Giáo án - Bài giảng: MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG KHI LẬP TRÌNH

107 943 0
Giáo án - Bài giảng: MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG KHI LẬP TRÌNH

Đ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

MƠN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ■ Đối tượng : ■ sv đại học quy ngành CNTT Tài liệu tham khảo : ■ Tập slide giảng & thực hành môn học ■ The C++ Programming Language (special 3rd edition), Bjarne Stroustrup, 2000 ■ CD MSDN Microsoft Visual Studio ■ Online-Help môi trường JBuilder w I BKk Khoa Công nghệ Thông tin Trường ĐH Bach Khoa Tp.HCM Môn : Lập trinh hướng đối tượng Slide MƠN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ■ ■ Nội dung gồm 10 chương : Ơn lại tính chất lập trình cấu trúc Các khái niệm lập trình OOP Cơ chế dịch mã OOP sang mã máy Tổng quát mức độ hỗ trợ OOP VC++ & Java Đặc tả class & tính chất đối tượng VC++ Đặc tả class & tính chất đối tượng Java Chi tiết gọi hàm, gởi thông điệp & đa xạ VC++ Chi tiết gọi hàm, gởi thông điệp & đa xạ Java Chi tiết thường trú, serialization, COM, Generalization & Template VC++ 10 Chi tiết thường trú, serialization, Generalization Java w I BKk Khoa Công nghệ Thông tin Trường ĐH Bach Khoa Tp.HCM Môn : Lập trinh hướng đối tượng Slide MƠN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ■ ■ Chưong ỒN LẠI CÁC TÍNH CHẤT CỦA LÂP TRÌNH CẤU TRÚC Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chuông 1: ơn lại tính chất lập trinh cấu trúc Slide Phương pháp phân tích từ-trên-xuống Mỗi vật môi trường xung quanh ta cấu thảnh từ nhiều phần tử nhỏ hơn, phần tử nhỏ lại cấu thành từ nhiều phần tử nhỏ Thí dụ, người gồm đầu, mình, tứ chi Tứ chi gồm tay chân Mỗi cơng việc cần giải máy tính cấu thành từ nhiều cống việc nhỏ hơn, công việc nhỏ lại cấu thành từ nhiều cơng việc nhỏ Phương pháp phân tích từ-trên-xuống (top-down analysis) phương pháp thường sử dụng để phân tích cống việc, nội dung phương pháp cố gắng xác định xem công việc cần giải cấu thành từ công việc nhỏ nào, công việc nhỏ cấu thành từ cống việc nhỏ nào, công việc xác định công việc thật đơn giản, thực dễ dàng Thí dụ việc học lấy kỹ sư CNTT khoa CNTT ĐHBK TP.HCM bao gồm cơng việc nhỏ học học kỳ từ tới 9, học học kỳ i học n môn học học kỳ đó, học mơn học lả học m chương mơn đó, Hình vẽ slide kế cho thấy trực quan phương pháp phân tích top-down Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chuông 1: ôn lại tính chất lập trinh cấu trúc Slide Phương pháp phân tích từ-trên-xuống (tt) chia thành nhiều công việc nhỏ hơn, đơn giản để giải I Công viêc I A, I Công việc Ẩ.11 ‘ Công việc A.12 Công việc cần giải (A) Công việc A2 Công việc A, ■ ■ ■ I Công việc A,n1 Công viêc A„ Công việc A i Công việc A.nn Các công việc đủ nhỏ để miêu tả lệnh hay lời gọi hàm/thủ tục có BK Khoa Cơng nghệ Thơng tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chng 1: ơn lại tính chất lập trinh cấu trúc Slide Tầm vực truy xuất biến - Tầm vực biến tập lệnh phéptruy xuất biến c C++ cho phép cấp độ tầm vực sau : o cục function : lệnh function truy xuất biến cục function void Command1_Click() { char strGreeting[256]; // Khai báo cục } o cục module : lệnh module truy xuất biến cục module static char strAddr[256]; // biến cục module char strName[256]; // biến toàn cục o toàn cục : lệnh chương trình truy xuất - biến tồn cục Trong ngữ cảnh (cùng function, module, hay cấp tồn cục), khơng thể dùng hai biến tên (C phân biệt chữ HOA chữ thường) Khoa Công nghệ Thông tin Trưởng ĐH Bách Khoa Tp.HCM Môn : Lập trinh hướng đối tưọng Chuông 1: ôn lại tính chất lập trinh cấu trúc Slide Cấu trúc chương trình huứng cấu trúc Chương trình = cấu trúc liệu + giải thuật module (package) entry 'start' local data module local data of function Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chuông 1: ôn lại tính chất lập trinh cấu trúc Slide Cẩu trúc chương trình huứng cấu trúc □ Thành phần “giải thuật” bao gồm code viết module Trong module, code gom nhóm thành hàm chức năng, hàm nhận dạng truy xuất thông qua tên hàm □ Thành phần “dữ liệu” bao gồm biến liệu định nghĩa module Trong module, mặt tầm vực truy xuất, biến định nghĩa cấp tầm vực : ■ Public : lệnh chương trình truy xuất ■ Private : có lệnh module hành truy xuất - Ngồi hàm chức năng, người ta định nghĩa biến cục bộ, biến truy xuất cục lệnh hàm tương ứng Ngoại lệ, số ngôn ngữ c, người ta cho phép định nghĩa biến lệnh thực thi (block - compose), biến truy xuất cục lệnh thân lệnh block tương ứng ■>điểm yếu ngốn ngữ hướng cấu trúc cho phép định nghĩa biến toàn = cục, biến bị lỗi, ta khó xác định nguyên nhân gây lỗi Việc mang hàm hay module ứng dụng sang ứng dụng khác khó khăn _ thưởng gây hiệu ứng “dây chuyền”. _ BK Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chng 1: ơn lại tính chất lập trinh cấu trúc Slide Cẩu trúc chương trình huứng cấu trúc □ Xét Turbo Pascal, ứng dụng gồm module chương trình nhiều module dịch vụ gọi Unit Để sử dụng thành phần module đó, ta phải dùng lệnh Use □ Xét c, ứng dụng gồm nhiều module ngang hàng, module file gồm nhiều hàm chức Điểm nhập ứng dụng hàm main() Module c file thư viện liên kết tĩnh (Mib) hay động (*.dll) Để sử dụng thành phần module đó, ta phải dùng lệnh #include Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chuông 1: ôn lại tính chất lập trinh cấu trúc Slide Mối quan hệ clienưserver giũa module //đặc tả interface module A : Client #include B.h extern int A_intA; typedef struct { } A_Type1; ¿define A_PI 3.14159 int A_func1 (int a, double b); #include A.h //hiện thục module A int AJntA; static int AJntB; int A_func1 (int a, double b) { B_Type1 var; B JntA = B_MAXLEN; A_func2(a); B_func1(a,b); } //đặc tả interface module B : server extern int BJntA; typedef struct { } B_Type1 ; #define B_MAXLEN 1024 int B_func1 (char c, char* d); #include B.h //hiện thực module B int BJntA; static int BJntB; int B_func1(int a, double b) { B_func2(a); } static void B_func2(int a) { } static void A_func2(int a) { } Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chuông 1: ôn lại tính chất lập trinh cấu trúc Slide 10 Tính tổng qt hóa (tt) □ Hàm tổng quát hóa (function template) cho phép ta đặc tả tập hàm mà dùng chung đoạn lệnh thực thi tác động liệu thuộc kiểu hay class khác và/hoặc với số lượng khác □ Class tổng quát hóa (class template) cho phép ta đặc tả tập class có tính chất giao diện giống tác động liệu thuộc kiểu hay class khác và/hoặc với số lượng khác Class tổng quát hóa cho phép sản sinh tự động class bình thường, class bình thường tự tạo đối tượng Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chương : Tổng quát hóa xây dựng hàm & class Slide 93 Function template Function template cho phép ta đặc tả tập hàm mà dùng chung đoạn lệnh thực thi tác động liệu thuộc kiểu hay class khác Thí dụ hàm IntSwapO sau : void lntSwap(int& a, int& b ) { int c = a; a = b; b = c; } cho phép swap số nguyên, template MySwapO sau : template void MySwap( T& a, T& b ) { T c (a); a = b; b = c; } định nghĩa họ hàm swap liệu có kiểu ^ auL BK^ T h° i c l r!? " gh! ™ n9J in, Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh hướng đối tuợng Chương : Tổng quát hóa xây dưng ham & class a a H /v a a SHde Function template (tt) ■ Ta C thể gọi hàm “template function” y gọi hàm bình Ĩ thường, khơng có khác biệt : int i, j; char k; MySwap (i, j); //Ok MySwap (i, k); //Sai khác kiểu ■ Ta đặc tả tham số rõ ràng gọi hàm “template function”, thí dụ : MySwap(i,j); //tạo hàm MySwap (int&, int&) gọi với (ij) Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chương : Tổng quát hóa xây dựng hàm & class Slide 95 Class template Class template cho phép ta đặc tả tập class mà dùng chung interface cấu trúc liệu tác động liệu thuộc kiểu hay class khác Thí dụ class Intstack sau : class Intstack { int StackBuffer[100]; int cltems; public: void lntstack( void ) : cltems( 100 ) {}; void push( const int item ); int pop( void ); }; int lntStack::pop ( void ) { if ( cltems < 100) void lntStack::push( const int item ) { return StackBuffer[cltems++]; if ( cltems > ) StackBuffer[ cltems] = item; else else throw "Stack overflow error."; throw "Stack underflow error."; return; Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh hướng đối tượng Chương : Tổng quát hóa xây dựng hàm & class Slide 96 Class template Class Intstack đặc tả slide trước tạo đối tượng stack chứa số nguyên Nếu muốn stack chứa số thực, ta phải đ|nh nghĩa class khác (gần giống với class Intstack) Tương tự, muốn stack chứa chuỗi, ta lại phải định nghĩa class khác (gần giống với class Intstack) Class template cho phép ta khắc phục phiền hà Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chương : Tổng quát hóa xây dựng hàm & class Slide 97 Class template Cú pháp khai báo class tem plate : template-declaration : tem plate < template-argument-list > déclaration template-argument-list : template-argument template-argument-list, template-argument template-argument : type-argument argument-declaration type-argument : class identifier typenam e identifier déclaration : đặc tả class bình thường có nhiều vị trí có dùng tham số template BK Khoa Cơng nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chương : Tổng quát hóa xây dựng hàm & class Slide 98 Class template (tt) template class MyStack { T StackBuffer[i]; int cltems; public: void MyStack( void ): cltems( i ) {}; void push( const T item ); T pop( void); template void MyStack< T, i >::push( const T item ) { if( cltems > ) StackBuffer[ cltems] = item; else throw "Stack overflow error."; return; -BK Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chương : Tổng quát hóa xây dựng hàm & class Slide 99 Class template (tt) template T MyStack< T, i >::pop( void ) { if( cltems < i ) return StackBuffer[cltems++]; else throw "Stack underflow error."; Cho phep dac ta cac class mieu ta cac stack gom nhieu du lieu bat ky nao do, thi du : MyStack intstack; // bien quan ly stack co toi da 20 so nguyen MyStack strstack; // bien quan ly stack co toi da 40 chu6i MyStack dblstack; // bien quan ly stack co toi da 100 so thuc ^ au L J3K ^ i h0a Cl r!? " Qh! I u 6n9-r-tin, , Truong OH Bach Khoa Tp.HCM Mon : Lap trinh huong doi tuong Chuong : Tong quat hoa xay dung ham & class aa/ aS|id e i 00 Class template (tt) Xem phần phụ lục chương để biết chi tiết, cụ thể template MFC dùng phổ biến CArray CList Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chương : Tổng quát hóa xây dựng hàm & class Slide 101 Định nghĩa class "serializable" Đọc/ghi liệu biến thuộc kiểu cổ điển (int, double, char[], ) rấr dễ nội dung biến khơng chứa tham khảo đến thành phần khác Ngược lại, việc đọc/ghi nội dung đối tượng thường khó khăn đối tượng chứa nhiều tham khảo đến đối tượng khác đối tượng tham khảo vịng lẫn Để hỗ trợ phần việc đọc/ghi nội dung đối tượng, VC++ đề nghị kỹ thuật "Serialization" Để định nghĩa class "serializable", ta cần thực tác vụ : định nghĩa class class CObject (gián tiếp hay trực tiếp) Overriding tác vụ "Serialize" Dùng macro DECLARE_SERIAL phát biểu đặc tả class Định nghĩa hàm constructor không tham số Dùng macro IMPLEMENT_SERIAL thực class ^ auL BK^ T h° i c l r!? " gh! 3J]ôn9 ttn , Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh hướng đối tuợng Chương : Tổng quát hóa xây dưng ham & class aa/ v a Slide-102 Định nghĩa class "serializable" //1 thừa kế class CObject class MyClass : public CObject { public : //3 dùng macro DECLARE_SERIAL DECLARE_SERIAL( MyClass); //4 định nghĩa constructor không tham số MyClassO; virtual void Serialize( CArchive& archive ); }; //5 dùng macro IMPLEMENT_SERIAL IMPLEMENT_SERIAL(MyClass, CObject, ) //2 Override hàm Serialize void MyClass::Serialize( CArchive& a r ) { } ^ L íh !?"g! 3J]ơn9 ttn , °iclr h B K ^ Trường ĐH Bách Khoa Tp.HCM au Môn : Lập trinh hướng đối tuợng Chương : Tổng quát hóa xây dưng ham & class aa/ v a Slide-103 Định nghĩa hàm Serialize void MyClass::Serialize (CArchive& a r ) { //1 gọi hàm Serialize class cha CObject::Serialize(ar); //2 gọi hàm Serialize đối tượng chứa vật lý ba.Serialize( a r ); //3 Serialize đối tượng tạo động thuộc tính cổ điển if ( ar.lsStoringO ) { llờ chế độ ghi đối tượng ar « p b a l; a r « pba; // Store other members ar « b1; ar « b2; } else { Hà chế độ đọc đối tượng ar » p b a l; a r » pba; // Polymorphic reconstruction of persistent object //load other members ar » b1; ar » b2; } } BK Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chương : Tổng quát hóa xây dựng hàm & class Slide 104 Ghi đôi tượng Để ghi đối tượng thuộc class "serializable", ta cần thực tác vụ : Định nghĩa đoi tượng CFile miêu tả file chứa thông tin Định nghĩa đối tượng CArchive ổ chế độ "store" Gọi tác vụ Serialize cần ghi đối tượng Đồng đối tượng CArchive Đóng file //1 Định nghĩa đối tượng CFile CFile theFile; theFile.Open("c:\\persist.bin", CFile::modeCreate I CFile::modeWrite); //2 Định nghĩa đối tượng CArchive CArchive archive(&theFile, CArchive::store); MyClass obj; //3 Gọi tác vụ Serialize để ghi đối tượng obj.Serialize(archive); //4 Gọi tác vụ Close để đóng đối tượng archive archive.Close(); //5 Gọi tác vụ Close để đóng đối tượng file theFile.Close(); BK Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chương : Tổng quát hóa xây dựng hàm & class Slide 105 Đọc lại đối tượng ■ ■ Để đọc lại đối tượng thuộc class "serializable", ta cần thực tác vụ : Định nghĩa đối tượng CFile miêu tả file chứa thông tin Định nghĩa đối tượng CArchive ổ chế độ "load" Gọi tác vụ Serialize cần ghi đối tượng Đồng đối tượng CArchive Đóng file //1 Định nghĩa đối tượng CFile CFile theFile; theFile.Open("c:\\persist.bin", CFile::modeRead); //2 Định nghĩa đối tượng CArchive CArchive archive(&theFile, CArchive::load); MyClass obj; //3 Gọi tác vụ Serialize để đọc lại đối tượng obj.Serialize(archive); HA Gọi tác vụ Close để đóng đối tượng archive archive.Close(); //5 Gọi tác vụ Close để đóng đối tượng file theFile.Close(); BK Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chương : Tổng quát hóa xây dựng hàm & class Slide 106 Thí dụ đọc/ghi đối tượng đối tượng class A BK Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh huớng đối tuợng Chương : Tổng quát hóa xây dựng hàm & class Slide 107 ... Tp.HCM Môn : Lập trình huửng đối tuợng Chương : Các khái niệm lập trình hưóng đối tưọng Slĩde 30 Tổng kết □ Mơ hình hướng đối tượng quan niệm giới (hay chương trình) bao gồm đối tượng độc lập sống... Mơn : Lập trình huửng đối tuợng Chương : Các khái niệm lập trình hưóng đối tưọng Slide 14 Cấu trúc chuong trình OOP □ Cấu trúc chương trình hướng đối tượng nhất, chứa loại thành phần : đối tượng. .. Tp.HCM Môn : Lập trinh hướng đối tượng Slide MƠN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ■ ■ Chưong ỒN LẠI CÁC TÍNH CHẤT CỦA LÂP TRÌNH CẤU TRÚC Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Môn : Lập trinh

Ngày đăng: 16/04/2014, 17:34

Từ khóa liên quan

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

Tài liệu liên quan