Tài liệu Lập trình hướng đối tượng: GIỚI THIỆU MÔN HỌC LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGThời lượng 30 tiết lý thuyết (2 chỉ), 30 tiết thực hành (1 chỉ)Thi cuối kỳ lý thuyết: Trắc nghiệm (100%) thực hành: làm bài tập lớn + báo cáo+ điểm danh (100%)Tài liệu tham khảo:Lập trình hướng đối tượng với C++, Lê Đăng Hưng, Tạ Tuấn AnhC how to program, Deitel, International edition, Prentice Hall, 2004GIỚI THIỆU MÔN HỌC LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGNội dung môn họcLập trình hướng đối tượng – các khái niệm cơ bảnCác mở rộng của C++ so với CĐối tượng và lớpĐịnh nghĩa toán tử trên lớpKỹ thuật thừa kếKhuôn hìnhCHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢNLẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚCLập trình cấu trúc:Chương trình = Cấu trúc dữ liệu + giải thuậtLập trình hướng đối tượng (Object oriented programming)Đặt trọng tâm vào đối tượngCHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢNLẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚCCác đặc điểm của lập trình hướng đối tượng:Tập trung vào dữ liệu thay cho các hàmChương trình được chia thành các đối tượngCấu trúc dữ liệu được t...
44 trang |
Chia sẻ: Khủng Long | Lượt xem: 1138 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Lập trình hướng đối tượng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
GIỚI THIỆU MÔN HỌC LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGThời lượng 30 tiết lý thuyết (2 chỉ), 30 tiết thực hành (1 chỉ)Thi cuối kỳ lý thuyết: Trắc nghiệm (100%) thực hành: làm bài tập lớn + báo cáo+ điểm danh (100%)Tài liệu tham khảo:Lập trình hướng đối tượng với C++, Lê Đăng Hưng, Tạ Tuấn AnhC how to program, Deitel, International edition, Prentice Hall, 2004GIỚI THIỆU MÔN HỌC LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGNội dung môn họcLập trình hướng đối tượng – các khái niệm cơ bảnCác mở rộng của C++ so với CĐối tượng và lớpĐịnh nghĩa toán tử trên lớpKỹ thuật thừa kếKhuôn hìnhCHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢNLẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚCLập trình cấu trúc:Chương trình = Cấu trúc dữ liệu + giải thuậtLập trình hướng đối tượng (Object oriented programming)Đặt trọng tâm vào đối tượngCHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢNLẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚCCác đặc điểm của lập trình hướng đối tượng:Tập trung vào dữ liệu thay cho các hàmChương trình được chia thành các đối tượngCấu trúc dữ liệu được thiết kế sao cho đặc tả được đối tượngCác hàm thao tác trên các vùng dữ liệu của đối tượng được gắn với cấu dữ liệu đóDữ liệu được đóng gói lại, được che giấu và không cho phép các hàm ngoại lại truy nhập tự doCác đối tượng tác động và trao đổi thông tin với nhau qua các hàmCó thể dể dàng bổ sung dữ liệu và các hàm mới vào đối tượng nào đó khi cần thiếtChương trình được thiết kế theo cách tiếp cận từ dưới lênCHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢNLẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚCĐối tượng (object)Đối tượng là sự kết hợp giữa dữ liệu và phương thức - method (thủ tục, hàm) thao tác trên dữ liệu đó Đối tượng = dữ liệu + phương thứcLớp (class)Lớp là một tập các đối tượng có cấu trúc dữ liệu và các phương thức giống nhau. Một đối tượng là một thể hiện cụ thể (instance) của một lớp.Trong lập trình ta có thể coi lớp như một kiểu dữ liệu, các đối tượng là biến có kiểu của lớpĐóng gói Đóng gói về chức năng: sử dụng các hàm hay thủ tục mà không cần biết đến nội dung bên trong nó, người dùng chỉ cần biết chức năng và các tham số cần truyền vào để gọi hàmĐóng gói dữ liệu: với mỗi đối tượng người dùng không thể truy cập trực tiếp vào các thành phần dữ liệu của nó mà phải thông qua các phương thứcCHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢNLẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚCThừa kế (inheritance)Kế thừa trong lập trình hướng đối tượng cho phép định nghĩa một lớp mới trên cơ sở lớp đã tồn tại và bổ sung thêm các phương thức hay thành phần dữ liệu mớiĐa hình (polymorphime)Các đối tượng khác nhau ứng xử với cùng một hành vi là khác nhauVí dụ: - việc đi của xe đạp và xe hơi- Tính diện tích của tam giác và đa giácCHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢNLẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚCCác ưu điểm của LTHĐTTính thừa kếXây dựng phần mềm theo quy trình không còn dựa chủ yếu vào kinh nghiệm -> rút ngắn thời gian, tăng năng suấtTính đóng gói tăng tính an toàn Ánh xạ các đối tượng từ thế giới thực vào chương trìnhCách tiếp cận theo HĐT dể dàng cài đặtDể mở rộng và nâng cấpThuận tiện mô tả giao tiếp giữa hệ thống với thế giới bên ngoàiQuản lý được độ phức tạp của chương trìnhCHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢN2. CÁC NGÔN NGỮ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGCác ưu điểm của LTHĐTTính thừa kếXây dựng phần mềm theo quy trình không còn dựa chủ yếu vào kinh nghiệm -> rút ngắn thời gian, tăng năng suấtTính đóng gói tăng tính an toàn Ánh xạ các đối tượng từ thế giới thực vào chương trìnhCách tiếp cận theo HĐT dể dàng cài đặtDể mở rộng và nâng cấpThuận tiện mô tả giao tiếp giữa hệ thống với thế giới bên ngoàiQuản lý được độ phức tạp của chương trìnhCHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++CÁC ĐIỂM KHÔNG TƯƠNG THÍCH GIỮA C++ VÀ ANSI C1.2 Khai báo hàm nguyên mẫuTronc C chỉ cần khai báo tên hàm và giá trị trả về, không cần danh sách kiểu của các tham sốC++ khai báo hàm nguyên mẫu Với C++ một lời gọi hàm chỉ được chấp nhận khi trình biên dịch biết được kiểu của các tham số, kiểu của giá trị trả về CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++CÁC ĐIỂM KHÔNG TƯƠNG THÍCH GIỮA C++ VÀ ANSI C1.2 Khai báo hàm nguyên mẫuChuyển kiểu tự động theo nguyên tắc sau:char -> int ->longint -> float ->doubleVí dụ:double ham(int , double) /* khai báo hàm ham*/.main(){int n; char c;double x, x1, x2,x3;x1=ham(n,x); /* không có chuyển đổi kiểu*/x2=ham(c,x); /* có chuyển đổi kiểu từ char->int*/x3=ham(x,n); /* có chuyển đổi kiểu từ double ->int và từ int thành double */. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++CÁC ĐIỂM KHÔNG TƯƠNG THÍCH GIỮA C++ VÀ ANSI C1.3 Sự tương thích giữa con trỏ void và các con trỏ khácTrong ANSI C, kiểu void tương thích với các kiểu con trỏ khác cả hai chiềuVí dụ:void *g;int *i;Phép gán sau là hợp lệg=i ;i=g ;Trong C++ chỉ có chuyển đổi kiểu ngầm định từ một kiểu con trỏ tùy ý thành void*, còn ngược lại phải thực hiện chuyển đổi kiểu tường minh.Ví dụ:g=i;i=(int*)g;CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++2. CÁC KHẢ NĂNG RA VÀO MỚI CỦA C++Trong tệp tiêu đề isotream.h người ta định nghĩa hai đối tượng cout và cin tương ứng với hai thiết bị chuẩn ra vào được sử dụng cùng với >. Thường thì ta hiểu cout là màn hình còn cin là bàn phím2.1 Ghi dữ liệu ra thiết bị chuẩn coutVí dụ 1 :#include main(){ cout void main(){ int n=25; cout void main(){ int n=25; cout (void*)CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++2. CÁC KHẢ NĂNG RA VÀO MỚI CỦA C++2.1 Các khả năng viết ra trên coutVí dụ:#include void main(){int n=25;long p=250000;unsigned q=63000 ;char c=’a’ ;float x=12.3456789;double y=12.3456789e16;char *st= “Hello C++”;int *ad=&n ;cout >n;Ví dụ 2:int n ;float p ;char c ;cin>>c>>n>>p ;Dùng toán từ >> để nhập dữ liệu cho các kiểu char, int, float, double và char* CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++2. CÁC KHẢ NĂNG RA VÀO MỚI CỦA C++2.2 Đọc dữ liệu từ thiết bị chuẩn cinGiống với hàm scanf(), cin tuân theo một số qui ước dùng trong việc phân tích các ký tựCác giá trị số được phân cách bởi : SPACE, TAB, CR, LF. Khi gặp một ký tự không hợp lệ như dấu “.” đối với số nguyên, chữ cái đối với số, ... sẽ kết thúc việc đọc cin, ký tự không hợp lệ này sẽ được xem xét trong lần đọc sauĐối với gía trị xâu ký tự, dấu phân cách cũng là SPACE, TAB, CR còn đối với gía trị ký tự, dấu phân cách là dấu CR. Trong hai trường hợp này không có khái niệm “ký tự không hợp lệ”. Mã sinh ra do nhấn phím Enter của lần nhập trước vẫn được xét trong lần nhập chuỗi hay ký tự tiếp theo và do đó sẽ có nguy cơ không nhập được đúng giá trị mong muốn khi đưa ra lệnh nhập xâu lý tự hoặc ký tự ngay sau các lệnh nhập cá giá trị khác. Giải pháp khắc phục ta dùng một trong hai lệnh saufflush(stdin) ; // khai báo trong stdio.hcin.clear(); // hàm thành phần của lớp cinCHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++2. CÁC KHẢ NĂNG RA VÀO MỚI CỦA C++2.2 Đọc dữ liệu từ thiết bị chuẩn cinVí dụ :#includevoid main(){int n;float x;char t[81] ; do { cout >n>>t>>x ; cout int a ;main(){ int a=10; // a cục bộ ::a=10 ; // a toàn cục cout#includeinline long tong(int a[]); // khai báo hàm inlinevoid main(){ int i; int a[3]; for (i=0;ivoid main(){ int x=3,&y; // sẽ báo lỗi vì y chưa được khởi tạo ..}Ví dụ :int &p=3; // không hợp lệconst int &p=3; // hợp lệCHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++5. THAM CHIẾU 5.2 Truyền tham số cho hàm bằng tham chiếuVí dụ :#include#include/* hàm được gọi theo truyền tham trị*/void swap1(int x, int y) { int temp =x; x=y; y=temp;}/* hàm thực hiện việc truyền tham số bằng con trỏ */void swap2(int *x,int *y) {int temp=*x;*x=*y;*y=temp;}/*hàm thực hiện việc truyền tham số bằng tham chiếu */void swap3(int &x,int &y) {int temp=x;x=y;y=temp;}CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++5. THAM CHIẾU 5.2 Truyền tham số cho hàm bằng tham chiếuvoid main(){ int a=3, b=4 ; swap1(a,b) ; cout & fct (){ return }CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++5. THAM CHIẾU 5.3 Giá trị trả về của hàm là tham chiếuVí dụ:#include#includeint a[5];int &fr(int *d,int i)void main(){clrscr();cout>fr(a,i); }cout//Ham nguyen mauint min(int, int); //Ham 1double min(double, double);//Ham 2char min(char, char);//Ham 3int min(int, int, int);//Ham 4int min(int, int *);//Ham 5main() {int n=10, p =12, q = -12;double x = 2.3, y = -1.2;char c = ‘A’, d= ‘Q’;int td[7] = {1,3,4,-2,0,23,9};coutint; float -->int. c. Các chuyển đổi kiểu được C và C++ chấp nhậnd. Chuyển đổi kiểu do người dùng định nghĩa CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++7. THAM SỐ NGẦM ĐỊNH TRONG LỜI GỌI HÀM #include void main() {int n=10,p=20;void fct(int, int = 12) ;//khai bao co 1 gia tri ngam dinhfct(n,p); //fct(n); //fct(); // loi}void fct(int a, int b) {cout #include void f();void main() { clrscr(); int n=10,p=20; void fct(int =0,int =12); coutvoid fct(int, int=10);void fct(int);void main() { int n=10, p=20; fct(n,p);//OK fct(n);//ERROR }CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++8. BỔ SUNG THÊM TOÁN TỬ QUẢN LÝ BỘ NHỚ ĐỘNG: new và delete8.1 Toán tử cấp phát bộ nhớ động newKhai báo int *adr; Chỉ thị adr=new int;Cấp phát vùng nhớ cần thiết cho một phần tử có kiểu int và gán cho adr địa chỉ tương ứngTrong C có lệnh tương đươngadr=(int *) malloc(sizeof(int));CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++8. BỔ SUNG THÊM TOÁN TỬ QUẢN LÝ BỘ NHỚ ĐỘNG: new và delete8.1 Toán tử cấp phát bộ nhớ động newKhai báo char *adc; Chỉ thị adc=new char[100];Cấp phát vùng nhớ đủ cho một mảng chứa 100 ký tự và đặt địa chỉ đầu của vùng nhớ cho biến adc.Trong C có lệnh tương đươngadc=(char *) malloc(100);CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++8. BỔ SUNG THÊM TOÁN TỬ QUẢN LÝ BỘ NHỚ ĐỘNG: new và delete8.1 Toán tử cấp phát bộ nhớ động newHai cách sử dụng newDạng 1: new type; Giá trị trả về là con trỏ đến vị trí tương ứng khi cấp phát thành công, ngược lại trả về NULL Dạng 2: new type[n]; // n là biểu thức nguyên không âmCấp phát vùng nhớ đủ để chứa n thành phần kiểu type và trả lại con trỏ đến đầu vùng nhớ đó nếu cấp phát thành côngCHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++8. BỔ SUNG THÊM TOÁN TỬ QUẢN LÝ BỘ NHỚ ĐỘNG: new và delete8.1 Toán tử giải phóng vùng nhớ động deleteMột vùng nhớ được cấp phát bằng new phải được giải phóng bằng delete. delete adr; delete adc;CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++7. BỔ SUNG THÊM TOÁN TỬ QUẢN LÝ BỘ NHỚ ĐỘNG: new và deleteVí dụ:#includevoid Nhap(int **mat);//nhap ma tran 2 chieuvoid In(int **mat);//In ma tranvoid main() { int **mat; int i; //cap phat mang 10 con tro nguyen mat = new int *[10]; for(i=0; i>mat[i][j]; } } void In(int ** mat) { int i,j; for(i=0; i<10;i++) { for(j=0; j<10;j++) cout<<mat[i][j]<<" "; cout<<"\n"; } }
Các file đính kèm theo tài liệu này:
- tailieu.ppt