Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 6: Ngôn ngữ lập trình hướng đối tượng

38 10 0
Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 6: Ngôn 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 Nguyên lý ngôn ngữ lập trình - Chương 6: Ngôn ngữ lập trình hướng đối tượng trình bày về khái niệm về trừu tượng hóa, trừu tượng hóa dữ liệu, sự dóng gói, tính thừa kế, một số ngôn ngữ lập trình hướng đối tượng.

Chương 6: Ngơn ngữ lập trình hướng đối tượng Giảng viên: Ph.D Nguyễn Văn Hòa Khoa KT-CN-MT – ðH An Giang Nội dung chương Giới thiệu Khái niệm trừu tượng hóa Trừu tượng hóa liệu Sự đóng gói Tính thừa kế Một số ngơn ngữ lập trình hướng đối tượng Sự phát triển kỹ thuật lập trình Mục tiêu kỹ sư phần mềm Tạo sản phẩm tốt cách có hiệu Nắm bắt cơng nghệ Phần mềm ngày lớn Hệ ñiều hành (Unix, Windows) : hàng chục triệu dịng lệnh Người dùng ngày địi hỏi nhiều chức Phần mềm ln cần sữa đổi Vì Cần kiểm sốt chi phí Chi phí phát triển Chi phí bảo trì Giải pháp sử dụng lại code Giảm chi phí thời gian phát triển Nâng cao chất lượng ðể sử dụng lại code (mã nguồn) Mã nguồn cần dễ hiểu Mã nguồn phải xác Có giao diện (inteface) rõ ràng Khơng u cầu thay đổi sử dụng chương trình Giải pháp: LT hướng ñối tượng Che dấu liệu (che dấu cấu trúc) Truy cập liệu thông qua giao diện xác ñịnh class MyDate { private int year, mon, day; public int getDay() { } public boolean setDay(int) { } } Khái niệm Lập trình hướng ñối tượng (OOP- ObjectOriented Programming) Một cách tư mới, tiếp cận hướng ñối tượng ñể giải vấn ñề máy tính Một phương pháp thiết kế phát triển phần mềm dựa kiến trúc lớp đối tượng Qui trình tiến hóa OOP Lập trình tuyến tính Lập trình cấu trúc (lập trình thủ tục) Trừu tượng hóa liệu Lập trình hướng đối tượng Tại tiếp cận hướng ñối tượng Loại bỏ thiếu sót tiếp cận theo thủ tục Trong OOP Dữ liệu xem phần tử yếu ñược bảo vệ Hàm gắn kết với liệu, thao tác liệu Phân tách toán thành nhiều thực thể (ñối tượng) xây dựng liệu + hàm cho ñối tượng Tăng cường khả sử dụng lại ðặc ñiểm OOP Nhấn mạnh liệu thủ tục Các chương trình chia thành đối tượng Dữ liệu che giấu khơng thể truy xuất từ hàm bên ngồi Các đối tượng giao tiếp với thông qua hàm Dữ liệu hay hàm thêm vào cần Theo tiếp cận từ lên Ưu ñiểm OOP So với tiếp cận cổ điển OOP có thuận lợi sau: OOP cung cấp cấu trúc module rõ ràng Giao diện ñược ñịnh nghĩa tốt Những chi tiết cài đặt ẩn OOP giúp lập trình viên trì mã sửa đổi mã tồn dễ dàng (các ñối tượng ñược tạo với khác nhỏ so với ñối tượng tồn tại) OOP cung cấp framework tốt với thư viện mã mà thành phần chọn sửa đổi lập trình viên 10 Sự đóng gối C / C++ C Không hỗ trợ trù tượng hóa liệu Tập tin chứa nhiều chương trình biên dịch cách độc lập Giao diện (interface) ñược dặt header file (.h) Header file ñược chèn vào codeSource #include C++ Giống C Dùng hàm friend ñể truy xuất ñến thành viên riêng lớp bạn 24 Sự đóng gối C / C++ (tt) Class Matrix //** A class declaration Class Vector{ friend Vector multiply(const Matrix&,const Vector&); }; Class Matrix{ //** The class definition friend Vector multiply(const Matrix&,const Vector&); }; //**The function that uses both Matrix and Vector class Vector multiply(const Matrix&,const Vector&){ } 25 C# Assemblies Tập hợp files vào thư viện liên kết ñộng DLL (dynamic link library) file thực thi (executable) Mỗi file có module biên dịch ñộc lập Một DLL tập hợp lớp phương thức liên kết chương trình thực thi C# có chế thay đổi quyền truy xuất, internal; thành viên internal lớp truy xuất tất lớp assembly mà xuất 26 Tính thừa kế Kế thừa từ lớp có từ trước Ích lợi: tận dụng lại Các thuộc tính chung Các hàm có thao tác tương tự Lớp sở (Base class) Lớp dẫn xuất (Derived class) LỚP CHA (Super class) STUDENT LỚP CON (Sub class) CIT_STUDENT 27 Chương Ví dụ minh họa (tt) ContactDir n Contact Ký hiệu Thừa kế SmartDir class SmartDir : public ContactDir { Contact* SmartDir::Recent (void) { return recent == ? : private: char *recent; ContactDir::Find(recent); // ten duoc tim gan nhat public: SmartDir(const int max) : ContactDir(max) } Contact* SmartDir::Find (const char *name) { Contact *c = ContactDir::Find(name); { recent = 0; } if (c != 0) Contact* Recent (void); recent = (char*) c->Name(); Contact* Find (const char *name); return c; // …………… }; } 28 Chương Hàm xây dựng hàm hủy Trong thừa kế, khởi tạo ñối tượng: Hàm xây dựng lớp cha gọi trước Sau hàm xây dựng lớp Trong thừa kế, hủy bỏ ñối tượng: Hàm hủy lớp ñược gọi trước Sau hàm hủy lớp cha A B C 29 Chương Hàm xây dựng hàm hủy (tt) class SmartDir : public ContactDir { private: char *recent; // ten duoc tim gan nhat public: SmartDir(const int max) : ContactDir(max) Gọi hàm xây dựng lớp cha { recent = 0; } SmartDir(const SmartDir& sd): ContactDir(sd) { recent = 0; } ~SmartDir() { delete recent; } // …………… Thu hồi vùng nhớ trỏ thành viên lớp ñã cấp vùng nhớ hàm xây dựng }; 30 Chương Thành viên lớp bảo vệ Thừa kế: Có tất liệu hàm thành viên Khơng truy xuất ñến thành viên private Thuộc tính truy cập protected: protected Cho phép lớp truy xuất class ContactDir { // protected: int Lookup (const char *name); Contact **contacts; // ds cac doi tac int dirSize; int maxSize; }; // kich thuoc hien tai // kich thuoc toi da class Foo { public: // cac vien chung private: // cac vien rieng protected: // cac vien duoc bao ve public: // cac vien chung nua protected: // cac vien duoc bao ve nua }; 31 Chương Lớp sở riêng, chung ñược bảo vệ Lớp sở Thừa kế public Thừa kế private Thừa kế protected private _ _ _ public public private protected protected protected private protected class A { private: int x; void Fx (void); public: int y; void Fy (void); protected: int z; void Fz (void); }; class B : A { // Thừa kế dạng private …… }; class C : private A { // A lớp sở riêng B ……… }; class D : public A { // A lớp sở chung C ……… }; class E : protected A { // A: lớp sở ñ c b o v ……… }; 32 Chương ða thừa kế (C++) OptionList Window Menu OptionList object OptionList data members Window object Menu object Window data members OptionList data members Window data members Menu data members class OptionList { public: OptionList (int n); ~OptionList (); // }; class Window { public: Window (Rect &); ~Window (void); // }; class Menu : public OptionList, public Window { public: Menu (int n, Rect &bounds); ~Menu (void); // }; Menu::Menu (int n, Rect &bounds) : OptionList(n), Window(bounds) { /* */ } 33 Ưu khuyết ñiểm ña thừa kế Khuyết ñiểm Tạo phức tạp NN cài ñặt (sự mơ hồ: phức tạp quan hệ thừa kế) ðôi không hiệu - chi phí liên kết động tăng lên với đa thừa kế Ưu ñiểm Trong vài trường hợp ña thừa kế tiện lợi 34 Chương Sự mơ hồ ña thừa kế class OptionList { public: // …… void Highlight (int part); }; class Menu : public OptionList, public Window class Window { public: // …… void Highlight (int part); }; Hàm tên Chỉ rõ hàm lớp { …… }; Gọi hàm lớp ? void main() { void main() { Menu m1(….); Menu m1(….); xử lý m1.OptionList::Highlight(10); :: m1.Highlight(10); m1.Window::Highlight(20); :: … … } } 35 Thừa kế Java Java hỗ trợ thừa kế ñơn public class Circle extends Point {//TK từ Point} Nhưng sử dụng interface,giống ña thừa kế public interface interfaceName { final constantType constantName = constantValue; returnValueType methodName( arguments ); } public interface interfaceName extends superinterfaceName, { interface body } 36 Thừa kế Java (tt) public interface Human { final String GENDER_MALE = "MALE"; final String GENDER_FEMALE = "FEMALE"; void move(); void talk(); } public abstract class Person implements Human { protected int age = 0; protected String firstname = "firstname"; protected String lastname = "lastname"; protected String gender = Human.GENDER_MALE; protected int progress = 0; public void move() { this.progress++; } } 37 Một số NNLThướng ñối tượng Smalltalk C++ Java C# Ada 95 Javascript 38 ... kiến trúc lớp ñối tượng Qui trình tiến hóa OOP Lập trình tuyến tính Lập trình cấu trúc (lập trình thủ tục) Trừu tượng hóa liệu Lập trình hướng đối tượng Tại tiếp cận hướng ñối tượng Loại bỏ thiếu...Nội dung chương Giới thiệu Khái niệm trừu tượng hóa Trừu tượng hóa liệu Sự đóng gói Tính thừa kế Một số ngơn ngữ lập trình hướng ñối tượng Sự phát triển kỹ thuật lập trình Mục tiêu kỹ... viên 10 Trừu tượng hóa Trừu tượng hóa biểu diễn đặc điểm cần thiết vấn đề Trừu tượng hóa tảng lập trình (và khoa học máy tính) Gần tồn NNLT hỗ trợ trừu tượng hóa tiến trình chương trình Từ 1980s,

Ngày đăng: 08/05/2021, 19:41

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

Tài liệu liên quan