Bài giảng lập trình hướng đối tượng

98 1.3K 15
Bài giảng lập trình hướng đối tượng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng lập trình hướng đối tượng

TRƯỜNG ĐẠI HỌC ĐÀ LẠT KHOA TOÁN - TIN HỌC PHẠM QUANG HUY LẬP TRÌNH HƯỚNG ĐỐI TƯNG (Bài Giảng Tóm Tắt) Lưu hành nội -Đà Lạt 2008 Lập trình hướng đối tượng Phạm Quang Huy 2008 BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG LỜI MỞ ĐẦU Lập trình theo phương pháp hướng đối tượng phương pháp lập trình tương đối (xuất từ năm 1990) hầu hết ngôn ngữ lập trình hỗ trợ Giáo trình giới thiệu đặc trưng phương pháp lập trình hướng đối tượng tính đóng gói, tính kế thừa tính đa hình Chúng tơi chọn ngơn ngữ C# để minh họa, ngơn ngữ lập trình hướng đối tượng dễ học phổ dụng Sau hồn tất giáo trình này, sinh viên biết cách mơ hình hóa lớp đối tượng giới thực thành lớp đối tượng C# cách phối hợp đối tượng để giải vấn đề quan tâm Trước tìm hiểu chi tiết phương pháp lập trình hướng đối tượng, sinh viên nên đọc trước phần phụ lục A-Cơ ngôn …….ngữ C# để làm quen với kiểu liệu, cấu trúc điều khiển ngôn ngữ C# Sau nắm bắt phương pháp lập trình hướng đối tượng, sinh viên nên đọc thêm phần phụ lục BBiệt lệ để viết chương trình có tính dung thứ lỗi cao Lập trình hướng đối tượng Phạm Quang Huy 2008 MỤC LỤC I Giới thiệu lập trình hướng đối tượng I.1 Lập trình hướng thủ tục (Pascal, C, …) I.2 Lập trình hướng đối tượng (Object-oriented programming ) I.2.1 Tính đóng gói I.2.2 Tính kế thừa I.2.3 Tính đa hình I.2.4 Ưu điểm phương pháp lập trình hướng đối tượng II Lớp đối tượng II.1 Định nghĩa lớp II.2 Tạo đối tượng .7 II.3 Phương thức tạo lập (constructor) đối tượng II.4 Phương thức tạo lập chép (copy constructor) 11 II.5 Quá tải hàm 12 II.6 Sử dụng thành viên tĩnh .15 II.7 Tham số phương thức 18 II.7.1 Truyền tham trị tham số kiểu giá trị .18 II.7.2 Truyền tham chiếu tham số kiểu giá trị với từ khóa ref 19 II.7.3 Truyền tham chiếu với tham số kiểu giá trị từ khóa out 20 II.7.4 Truyền tham trị với tham số thuộc kiểu tham chiếu 21 II.7.5 Truyền tham chiếu với tham số thuộc kiểu liệu tham chiếu 24 II.8 Tham chiếu this 25 II.9 Đóng gói liệu với thuộc tính (property) 27 II.10 Toán tử (operator) 30 II.11 Indexer (Chỉ mục) 34 II.12 Lớp lồng 38 II.13 Câu hỏi ôn tập 38 II.14 Bài tập tổng hợp .39 III Kế thừa (inheritance) đa hình (polymorphism) 40 III.1 Quan hệ chuyên biệt hóa tổng quát hóa .40 III.2 Kế thừa 40 III.3 Gọi phương thức tạo lập lớp sở .42 III.4 Định nghĩa phiên lớp dẫn xuất 44 III.5 Tham chiếu thuộc lớp sở 46 III.6 Phương thức ảo (virtual method) tính đa hình (polymorphism) 48 III.7 Lớp Object 55 III.8 Lớp trừu tượng(abstract) 55 III.9 Giao diện (interface) 58 III.9.1 Thực thi giao diện 58 III.9.2 Hủy đối tượng 60 III.9.3 Thực thi nhiều giao diện 64 III.9.4 Mở rộng giao diện 66 III.9.5 Kết hợp giao diện 67 Lập trình hướng đối tượng Phạm Quang Huy 2008 III.9.6 Kiểm tra đối tượng có hỗ trợ giao diện hay khơng tốn tử is 67 III.9.7 Các giao diện Icomparer, IComparable (giao diện so sánh) ArrayList 67 III.9.8 Câu hỏi ôn tập 74 III.9.9 Bài tập tổng hợp 74 PHỤ LỤC A - CƠ BẢN VỀ NGÔN NGỮ C# I Tạo ứng dụng C# .75 I.1 Soạn thảo chương trình “Hello World” .76 I.2 Biên dịch chạy chương trình “Hello World” 77 II Cơ sở ngôn ngữ C# .77 II.1 Kiểu liệu 77 II.1.1 Các kiểu xây dựng sẵn C#: 77 II.1.2 Hằng 78 II.1.3 Kiểu liệt kê .79 II.1.4 Kiểu chuỗi 80 II.2 Lệnh rẽ nhánh 80 II.2.1 Lệnh if 80 II.2.2 Lệnh switch 81 II.2.3 Lệnh goto 82 II.2.4 Lệnh lặp while 83 II.2.5 Lệnh do…while 83 II.2.6 Lệnh for .84 II.2.7 Lệnh foreach 85 II.2.8 Lệnh continue break 85 II.3 Mảng 86 II.3.1 Mảng chiều .86 II.3.2 Mảng nhiều chiều 88 II.3.3 Một số ví dụ mảng nhiều chiều 89 II.4 Không gian tên (namespace) 90 PHỤ LỤC B - BIỆT LỆ I Ném biệt lệ .92 II Bắt ngoại lệ 92 III Khối finally 95 IV Một số ngoại lệ khác: .95 V Một số ví dụ khác 96 Lập trình hướng đối tượng Phạm Quang Huy 2008 I Giới thiệu lập trình hướng đối tượng I.1 Lập trình hướng thủ tục (Pascal, C, …) Trong phương pháp lập trình thủ tục, chương trình hệ thống thủ tục, hàm Tức là, viết chương trình, ta phải xác định chương trình làm cơng việc (thao tác) nào? Mỗi thao tác gồm thao tác nào? Từ thao tác tương ứng với hàm Như vậy, lập trình theo phương pháp thủ tục xác định hàm, định nghĩa hàm gọi hàm để giải vấn đề đặt Một nhược điểm phương pháp hàm truy cập biến tồn cục liệu phải truyền qua nhiều hàm trước đến hàm thực sử dụng thao tác Điều dẫn đến khó kiểm sốt chương trình q lớn phát triển, sửa đổi chương trình Một khó khăn việc nhớ hàm xây dựng sẵn số lượng hàm nhiều I.2 Lập trình hướng đối tượng (Object-oriented programming ) Phương pháp lấy đối tượng làm tảng để xây dựng chương trình Đối tượng gắn kết liệu đối tượng hàm (còn gọi phương thức) thao tác liệu Đối tượng = Dữ liệu + Phương thức Khi viết chương trình theo phương pháp hướng đối tượng ta phải trả lời câu hỏi: - Chương trình liên quan tới lớp đối tượng nào? - Mỗi đối tượng cần có liệu thao tác nào? - Các đối tượng quan hệ với chương trình? Từ ta thiết kế lớp đối tượng tổ chức trao đổi thông tin đối tượng, lệnh để đối tượng thực nhiệm vụ thích hợp Ví dụ : - Đối tượng chuỗi : • Dữ liệu: mảng kí tự • Thao tác: tính chiều dài, nối hai chuỗi - Đối tượng stack : • Dữ liệu: số nguyên hay kí tự , hay kiểu liệu định nghĩa • Thao tác: tạo lập stack, đưa phần tử vào đỉnh, loại bỏ phần tử đỉnh… Các ngơn ngữ lập trình hướng đối tượng có ba đặc điểm chung tính đóng gói (encapsulation), tính kế thừa (inheritance ) tính đa hình (polymorphism) Lập trình hướng đối tượng Phạm Quang Huy 2008 I.2.1 Tính đóng gói Tính đóng gói kỹ thuật ràng buộc liệu phương thức thao tác liệu vào lớp để dễ kiểm sốt, làm tăng tính trừu tượng liệu Lớp đối tượng cung cấp số phương thức để giao tiếp với mơi trường bên ngồi, che dấu cài đặt thực bên lớp I.2.2 Tính kế thừa Tính kế thừa trình định nghĩa lớp đối tượng (gọi lớp dẫn xuất) dựa lớp khác định nghĩa gọi lớp sở nhằm tận dụng đoạn mã chương trình có Lớp việc bổ sung thành phần riêng định nghĩa lại hàm lớp sở khơng cịn phù hợp với I.2.3 Tính đa hình Tính đa hình ý tưởng “sử dụng giao diện chung cho nhiều phương thức khác nhau”, dựa chế liên kết muộn Tức phương thức cụ thể xác định vào lúc chạy chương trình, tùy thuộc vào đối tượng thực thi giao diện Điều làm giảm đáng kể độ phức tạp chương trình I.2.4 Ưu điểm phương pháp lập trình hướng đối tượng • Tính đóng gói làm giới hạn phạm vi sử dụng biến, nhờ việc quản lý giá trị biến dễ dàng hơn, việc sử dụng mã an tồn • Phương pháp làm cho tốc độ phát triển chương trình nhanh mã tái sử dụng cải tiến dễ dàng, uyển chuyển • Phương pháp tiến hành tiến trình phân tích, thiết kế chương trình thơng qua việc xây dựng đối tượng có tương hợp với đối tuợng thực tế Điều làm cho việc sửa đổi dễ dàng cần thay đổi chương trình • … II Lớp đối tượng Chương trình hệ thống đối tượng Xây dựng chương trình định nghĩa lớp đối tượng, sau khai báo đối tượng tổ chức để đối tượng thực thi nhiệm vụ II.1 Định nghĩa lớp Một lớp kiểu cấu trúc mở rộng, kiểu mẫu chung cho đối tượng thuộc loại Như vậy, thành phần lớp gồm cấu trúc liệu mô tả đối tượng lớp phương thức (còn gọi hàm, hành vi, thao tác) mà biến đối tượng lớp có Các phương thức thao tác thành phần liệu khai báo lớp Lập trình hướng đối tượng Phạm Quang Huy 2008 Việc định nghĩa lớp thể tính đóng gói phương pháp lập trình hướng đối tượng Cú pháp định nghĩa lớp: [ MứcĐộTruyCập] class TênLớp [:LớpCơSở] { - Khai báo thành phần liệu (khai báo biến) - Định nghĩa phương thức, thuộc tính lớp } Chú ý: • Dữ liệu phương thức lớp gọi chung thành phần lớp • Các thành phần liệu xem biến toàn cục phương thức lớp, tức phương thức lớp có quyền truy cập đến thành phần liệu mà không cần phải khai báo lại phương thức Mức độ truy cập Thông thường, mức độ truy cập (access-modifiers) lớp public Ngoài thành phần lớp có mức độ truy cập riêng Mức độ truy cập thành phần cho biết loại phương thức phép truy cập đến nó, hay nói cách khác mơ tả phạm vi mà thành phần nhìn thấy Bảng sau liệt kê kiểu mức độ truy cập thành phần lớp: Mức độ truy cập Ý nghĩa public Thành viên đánh dấu public nhìn thấy phương thức lớp khác private Chỉ có phương thức lớp A phép truy cập đến thành phần đánh dấu private lớp A protected Chỉ có phương thức lớp A lớp dẫn xuất từ A phép truy cập đến thành phần đánh dấu protected lớp A internal Các thành viên internal lớp A truy xuất phương thức lớp khối kết hợp (assembly) A protected internal Tương đương với protected or internal Chú ý: • Mặc định, không cụ thể mức độ truy cập thành viên lớp xem có mức độ truy cập private Lập trình hướng đối tượng Phạm Quang Huy 2008 • Mức độ truy cập internal cho phép phương thức lớp khối kết hợp (assembly) với lớp định nghĩa truy cập Các lớp thuộc project xem khối kết hợp II.2 Tạo đối tượng Lớp mô tả cấu trúc chung nhóm đối tượng đó, ngược lại, đối tượng trường hợp cụ thể lớp (cịn gọi thể lớp) Vì đối tượng kiểu tham chiếu nên liệu thực tạo vùng nhớ Heap ta phải dùng toán tử new để cấp phát cho đối tượng Kể từ lúc đối tượng cấp phát nhớ, ta gán giá trị cho biến thành viên, gọi thi hành phương thức đối tượng Thường ta việc khai báo cấp phát đối tượng, việc hủy vùng nhớ mà đối tượng chiếm giữ đối tượng hiệu lực dọn rác trình biên dịch đảm nhiệm Cú pháp khai báo đối tượng cấp phát vùng nhớ cho đối tượng: TênLớp TênBiếnĐốiTượng; TênBiếnĐốiTượng = new TênLớp(DanhSáchĐốiSố); TênLớp TênBiếnĐốiTượng = new TênLớp(DanhSáchĐốiSố); Chú ý: • Sau khai báo biến đối tượng biến trỏ • Sau cấp phát bắng từ khóa new biến trỏ tới đối tượng thực Ví dụ: Chương trình nhập chiều dài, chiều rộng hình chữ nhật xuất diện tích, chu vi hình chữ nhật using System; namespace LopDoiTuongHCN { class HCN { protected float Dai, Rong; public float ChuVi() { return (Dai + Rong )*2; } public float DienTich() { return Dai* Rong; } Lập trình hướng đối tượng } } Phạm Quang Huy 2008 public void Nhap() { Console.WriteLine("Nhap chieu dai: "); Dai = float.Parse(Console.ReadLine()); Console.WriteLine("Nhap chieu rong: "); Rong = float.Parse(Console.ReadLine()); } public void Xuat() { Console.WriteLine("Hinh chu nhat: Dai = {0}, Rong = {1}", Dai, Rong); } class Application { static void Main(string[] args) { HCN h; h = new HCN(); h.Nhap(); h.Xuat(); Console.WriteLine("Chu vi hinh chu nhat: {0}", h.ChuVi()); Console.WriteLine("Dien tich hinh chu nhat: {0}", h.DienTich()); Console.ReadLine(); } } Trong ví dụ trên, ta định nghĩa lớp hình chữ nhật (HCN), đối tượng thuộc lớp có thành phần liệu chiều dài chiều rộng có phương thức như: nhap(), xuat(), DienTich(), ChuVi() Sau đó, hàm Main() ta khai báo đối tượng hình chữ nhật tên h, cấp phát vùng nhớ cho đối tượng gọi thực phương thức Chú ý: Nếu ta bỏ từ khóa public đứng trước phương thức lớp HCN hàm Main() khơng thể truy cập đến phương thức đối tượng h trình biên địch báo lỗi phương thức có mức độ truy cập private Bài tập 1: xây dựng lớp hình chữ nhật với thành phần liệu tọa độ góc bên trái (x1, y1), tọa độ góc bên phải (x2, y2) phương thức tính chiều dài, chiều rộng, diện tích, chu vi hình chữ nhật phương thức vẽ hình chữ nhật ký tự ‘*’ hình Lập trình hướng đối tượng Phạm Quang Huy 2008 Bài tập 2: viết chương trình xây dựng lớp phân số thao tác phân số +, -, *, /, tìm ước số chung lớn tử mẫu, rút gọn, cộng phân số với số nguyên Gợi ý: class PhanSo { int Tu, Mau; // private members public void NhapPhanSo() { // Đọan mã nhập tử số mẫu số } public void GanGiaTri(int TuSo, int MauSo) { // Đọan mã gán giá trị cho tử số mẫu số } public void XuatPhanSo() { // Đọan mã xuất tử số mẫu số dạng (a/b) } public PhanSo Cong(PhanSo PS2) //cộng phân số hành với phân số PS2 trả phân số { PhanSo KetQua = new PhanSo(); KetQua.TS = Tu * PS2.Mau + Mau* PS2.Tu; KetQua.MS = Mau * PS2.Mau; return KetQua; } public PhanSo Tru(PhanSo PS2) { // Đọan mã tru phân số hành với phân số PS2 trả phân số } … phương thức khác II.3 Phương thức tạo lập (constructor) đối tượng Phương thức tạo lập đối tượng có tính chất sau: Được gọi đến cách tự động đối tượng lớp tạo Dùng để khởi động giá trị đầu cho thành phần liệu đối tượng thuộc lớp Tên phương thức giống với tên lớp có mức độ truy cập public Khơng có giá trị trả Lập trình hướng đối tượng Phạm Quang Huy 2008 return 0; } } II.2.4 Lệnh lặp while Ví dụ II.2.4: Phân tích số nguyên dương N thừa số nguyên tố using System; class While { static void Main(string[] args) { int N, M, i; Console.WriteLine("Nhap so nguyen duong (>1): "); N= int.Parse(Console.ReadLine()); if (N 1) { if (M%i==0) { M=M/i; if (KetQua.Equals(""))KetQua = KetQua + i; else KetQua = KetQua + "*"+i; } else i = i +1; } Console.WriteLine("So {0} o dang thua so nguyen to la:{1}", N, KetQua); Console.ReadLine(); } } II.2.5 Lệnh do…while Cú pháp: while Vịng lặp …while thực lần Ví dụ II.2.5: Kết đoạn lệnh sau gì? 83 Lập trình hướng đối tượng Phạm Quang Huy 2008 using System; public class Tester { public static int Main( ) { int i = 11; { Console.WriteLine("i: {0}",i); i++; } while (i < 10); return 0; } } II.2.6 Lệnh for Cú pháp: for (khởi tạo; điều kiện dừng; lặp) lệnh; Ví dụ II.2.6: Kiểm tra số nguyên tố using System; class NguyenTo { static void Main(string[] args) { int N, i; Console.WriteLine("Nhap so nguyen duong (>1): "); N= int.Parse(Console.ReadLine()); if (N

Ngày đăng: 16/08/2012, 10:40

Hình ảnh liên quan

Bảng sau liệt kê các kiểu mức độ truy cập của các thành phần trong một lớp: - Bài giảng lập trình hướng đối tượng

Bảng sau.

liệt kê các kiểu mức độ truy cập của các thành phần trong một lớp: Xem tại trang 7 của tài liệu.
Trong ví dụ trên, ta định nghĩa một lớp các hình chữ nhật (HCN), mỗi đối tượng thuộc lớp này cĩ thành phần dữ liệu là chiều dài và chiều rộng và cĩ các phương  thức như: nhap(), xuat(), DienTich(), ChuVi() - Bài giảng lập trình hướng đối tượng

rong.

ví dụ trên, ta định nghĩa một lớp các hình chữ nhật (HCN), mỗi đối tượng thuộc lớp này cĩ thành phần dữ liệu là chiều dài và chiều rộng và cĩ các phương thức như: nhap(), xuat(), DienTich(), ChuVi() Xem tại trang 9 của tài liệu.
(tham số thực) sang tham số (tham số hình thức). Cịn khi truyền theo kiểu tham chiếu thì đối số và tham sốđều là một - Bài giảng lập trình hướng đối tượng

tham.

số thực) sang tham số (tham số hình thức). Cịn khi truyền theo kiểu tham chiếu thì đối số và tham sốđều là một Xem tại trang 19 của tài liệu.
(hình chữ nhật), HinhTron (hình trịn) kế thừa từ lớp HinhHọc với các thành phần dữ liệu và phương thức tính chu vi, diện tích cụ thể của từng loại đối tượng - Bài giảng lập trình hướng đối tượng

hình ch.

ữ nhật), HinhTron (hình trịn) kế thừa từ lớp HinhHọc với các thành phần dữ liệu và phương thức tính chu vi, diện tích cụ thể của từng loại đối tượng Xem tại trang 57 của tài liệu.
đối tượng hình thuộc dạng nào nên khơng thể tính diện tích của nĩ). Như vậy, lớp - Bài giảng lập trình hướng đối tượng

i.

tượng hình thuộc dạng nào nên khơng thể tính diện tích của nĩ). Như vậy, lớp Xem tại trang 58 của tài liệu.
để xuất một chuỗi &#34;Hello World&#34; ra màn hình. - Bài giảng lập trình hướng đối tượng

xu.

ất một chuỗi &#34;Hello World&#34; ra màn hình Xem tại trang 77 của tài liệu.
Ví dụ II.3.1: Nhập một mảng số nguyên, sắp xếp và xuất ra màn hình. - Bài giảng lập trình hướng đối tượng

d.

ụ II.3.1: Nhập một mảng số nguyên, sắp xếp và xuất ra màn hình Xem tại trang 88 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan