1 / 44

GI ỚI THI ỆU M Ô N H ỌC 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 ƯỢNG Th ờ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%)

flo
Download Presentation

GI ỚI THI ỆU M Ô N H ỌC L ẬP TR ÌNH H ƯỚNG ĐỐI T ƯỢNG

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GIỚI THIỆU MÔN HỌC • LẬP TRÌNH HƯỚNGĐỐI TƯỢNG • Thờ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 Anh… • C how to program, Deitel, International edition, Prentice Hall, 2004

  2. GIỚI THIỆU MÔN HỌC • LẬP TRÌNH HƯỚNGĐỐI TƯỢNG • Nội dung môn học • Lập trình hướngđối tượng – các khái niệm cơ bản • Cá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ớp • Kỹ thuật thừa kế • Khuôn hình

  3. CHƯƠNG 1: • CÁC KHÁI NIỆM CƠ BẢN • LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚC • Lập trình cấu trúc: • Chương trình = Cấu trúc dữ liệu + giải thuật • Lập trình hướng đối tượng (Object oriented programming) • Đặt trọng tâm vào đối tượng

  4. CHƯƠNG 1: • CÁC KHÁI NIỆM CƠ BẢN • LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚC • Cá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àm • Chương trình được chia thành các đối tượng • Cấu trúc dữ liệu được thiết kế sao cho đặc tả được đối tượng • Cá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ự do • Các đối tượng tác động và trao đổi thông tin với nhau qua các hàm • Có 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ết • Chương trình được thiết kế theo cách tiếp cận từ dưới lên

  5. CHƯƠNG 1: • CÁC KHÁI NIỆM CƠ BẢN • LẬ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ức • Lớ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ức

  6. CHƯƠNG 1: • CÁC KHÁI NIỆM CƠ BẢN • LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚC • Thừ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 nhau • Ví 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ác

  7. CHƯƠNG 1: • CÁC KHÁI NIỆM CƠ BẢN • LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚC • Các ưu điểm của LTHĐT • Tí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ất • Tí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ình • Cách tiếp cận theo HĐT dể dàng cài đặt • Dể mở rộng và nâng cấp • Thuận tiện mô tả giao tiếp giữa hệ thống với thế giới bên ngoài • Quản lý được độ phức tạp của chương trình

  8. CHƯƠNG 1: • CÁC KHÁI NIỆM CƠ BẢN • 2. CÁC NGÔN NGỮ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG • Các ưu điểm của LTHĐT • Tí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ất • Tí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ình • Cách tiếp cận theo HĐT dể dàng cài đặt • Dể mở rộng và nâng cấp • Thuận tiện mô tả giao tiếp giữa hệ thống với thế giới bên ngoài • Quản lý được độ phức tạp của chương trình

  9. 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 C • 1.2 Khai báo hàm nguyên mẫu • Tronc 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ề

  10. 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 C 1.2 Khai báo hàm nguyên mẫu Chuyển kiểu tựđộng theo nguyên tắc sau: char -> int ->longint -> float ->double Ví 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 */ ….

  11. 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 C 1.3 Sự tương thích giữa con trỏ void và các con trỏ khác Trong ANSI C, kiểu void tương thích với các kiểu con trỏ khác cả hai chiều Ví 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;

  12. 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 << và >>. Thường thì ta hiểu cout là màn hình còn cin là bàn phím 2.1 Ghi dữ liệu ra thiết bị chuẩn cout Ví dụ 1 : #include <iostream.h> main() { cout << “Hello C++”; }

  13. 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 Ghi dữ liệu ra thiết bị chuẩn cout Sử dụng cout và << đưa ra các giá trị khác nhau

  14. 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 cout • Có thể sử dụng toán tử << cùng với cout để đưa ra màn hình giá trị của một biểu thức có các kiểu sau : • Kiểu cơ sở (char, int, float, double) • Xâu ký tự (char *) • Con trỏ (trừ con trỏ char *) • Trong trường hợp muốn đưa ra địa chỉ của xâu ký tự phải thực hiện việc chuyển đổi kiểu tường minh (char*)->(void*)

  15. 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 cout

  16. 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 cin Ví dụ 1: int n; cin>>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* 

  17. 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 cin • Giố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 sau • fflush(stdin) ; // khai báo trong stdio.h • cin.clear(); // hàm thành phần của lớp cin

  18. 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 cin Ví dụ : #include<iostream.h> void main() { int n; float x; char t[81] ; do { cout << “Nhap vao mot so nguyen, mot xau, mot so thuc : ” ; cint >>n>>t>>x ; cout <<  “Da nhap ”<<n<< “, ”<<t<< “va ”<<x<<“\n ” ; } while (n) ; }

  19. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++ 3. NHỮNG TIỆN ÍCH CHO NGƯỜI LẬP TRÌNH 3.1 Ghi chú thích cuối dòng C++ dùng // để chỉ ra một dòng là chú thích Ví dụ cout << ” Xin chao  \n“  ; // xin chao 3.2 Khai báo mọi nơi

  20. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++ 3. NHỮNG TIỆN ÍCH CHO NGƯỜI LẬP TRÌNH 3.1 Toán tử phạm vi ::

  21. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++ 4. HÀM INLINE Trong C++ ta có thể định nghĩa các hàm được thay thế trực tiếp thành mã lệnh máy tại chổ gọi (inline) mỗi lần được tham chiếu. Ưu điểm của hàm inline là chúng không đòi hỏi các thủ tục bổ sung khi gọi hàm và trả về giá trị. Do vậy, hàm inline được thực hiện nhanh hơn so với các hàm thông thường

  22. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++ 4. HÀM INLINE

  23. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++ 5. THAM CHIẾU Ngôn ngữ C++ giới thiệu một khái niệm mới là tham chiếu ”reference”. Một tham chiếu có thể là một biến, tham số hình thức của hàm hay dùng làm giá trị trả về của một hàm. 5.1 Tham chiếu tới một biến Ví dụ: int n ; int &p=n ; //p là một biến tham chiếu, p tham chiếu tới vùng nhớ nơi n lưu trữ Nếu viết: n=7; cout<<p; Kết quả in ra là:

  24. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++ 5. THAM CHIẾU 5.1 Tham chiếu tới một biến Tham chiếu và con trỏ giống nhau vì cùng chỉ đến các đối tượng có địa chỉ, cùng được cập phát địa chỉ khi khai báo. Nhưng cách sử dụng thì khác nhau. Khi nói tới tham chiếu ta phải gán nó với một biến nào đó đã khai báo, trong khi con trỏ thì không nhất thiết phải khởi tạo giá trị cho nó. Con trỏ có thể tham chiếu tới nhiều biến khác nhau con biến tham chiếu chỉ có thể tham chiếu tới một biến duy nhất lúc khởi tạo nó.

  25. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++ 5. THAM CHIẾU 5.1 Tham chiếu tới một biến

  26. 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ếu

  27. 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ếu

  28. 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ếu Định nghĩa hàm: <type> & fct (…) { return <biến có phạm vi toàn cục> }

  29. 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ếu

  30. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++ 6. ĐỊNH NGHĨA CHỒNG HÀM C++ cho cho phép sử dụng một tên cho nhiều hàm khách nhau ta gọi đó là sự chồng hàm.

  31. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++ 6. ĐỊNH NGHĨA CHỒNG HÀM Trường hợp có nhiều hàm trùng tên trong chương trình, việc xác định hàm nào được gọi tuân theo nguyên tắc sau: Tương ứng thật sự Tương ứng dữ liệu số nhưng có sự chuyển đổi kiểu tự động char và short -->int; float -->int. c. Các chuyển đổi kiểu được C và C++ chấp nhận d. Chuyển đổi kiểu do người dùng định nghĩa

  32. CHƯƠNG 2: NHỮNG MỞ RỘNG CỦA C++ 7. THAM SỐ NGẦMĐỊNH TRONG LỜI GỌI HÀM

  33. CHƯƠNG 2: • NHỮNG MỞ RỘNG CỦA C++ 7. THAM SỐ NGẦMĐỊNH TRONG LỜI GỌI HÀM • Các tham số có giá trị ngầmđịnh phải được đặt ở cuối trong danh sách các tham số của hàm • Các giá trị ngầm định của tham số được khai báo, không phải trong phần định nghĩa hàm

  34. CHƯƠNG 2: • NHỮNG MỞ RỘNG CỦA C++ 7. THAM SỐ NGẦMĐỊNH TRONG LỜI GỌI HÀM • Nếu muốn khai báo giá trị ngầmđịnh cho một biến con trỏ thì phải viết dấu * và = cách nhau ít nhất một khoảng trắng • Các giá trị ngầmđịnh có thể là một biểu thức : • VD: • float x; • int n; • void fct(float = n*2+1.5); • Chồng hàm và gọi hàm với tham số có giá trị ngầm định có thể gây ra lỗi biên dịch khi chương trình không xác định được hàm phù hợp:

  35. CHƯƠNG 2: • NHỮNG MỞ RỘNG CỦA C++ 7. THAM SỐ NGẦMĐỊNH TRONG LỜI GỌI HÀM

  36. 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à delete 8.1 Toán tử cấp phát bộ nhớ động new • Khai 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 ứng • Trong C có lệnh tương đương • adr=(int *) malloc(sizeof(int));

  37. 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à delete 8.1 Toán tử cấp phát bộ nhớ động new • Khai 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 đương • adc=(char *) malloc(100);

  38. 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à delete 8.1 Toán tử cấp phát bộ nhớ động new • Hai cách sử dụng new • Dạ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 âm • Cấ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ông

  39. 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à delete 8.1 Toán tử giải phóng vùng nhớ động delete • Mộ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;

  40. 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à delete

  41. 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à delete

More Related