1 / 72

Chương 02 NHẬP MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Introduction to OOP (3 giờ)

Chương 02 NHẬP MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Introduction to OOP (3 giờ). Mục tiêu. Nhận biết sự khác biệt giữa lập trình hướng thủ tục và lập trình hướng đối tượng. Luyện tập tư duy lập trình hướng đối tượng . Nhận diện một số ngôn ngữ OOP. Mục tiêu.

kasi
Download Presentation

Chương 02 NHẬP MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Introduction to OOP (3 giờ)

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. Chương 02NHẬP MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGIntroduction to OOP(3 giờ) Chương 01- Nhập môn OOP

  2. Mục tiêu • Nhận biết sự khác biệt giữa lập trình hướng thủ tục và lập trình hướng đối tượng. • Luyện tập tư duy lập trình hướng đối tượng. • Nhận diện một số ngôn ngữ OOP. Chương 01- Nhập môn OOP

  3. Mục tiêu • Nắm vững một số định nghĩa trong OOP bao gồm: • Trừu tượng hóa dữ liệu. • Lớp, đối tượng, thể hiện. • Thông điệp và gửi thông điệp. • Tính bao đóng. • Tính kế thừa. • Tính đa hình Chương 01- Nhập môn OOP

  4. Nội dung chi tiết • Nhược điểm của lập trình thủ tục. • Tư duy hướng đối tượng. • Diễn đạt hướng đối tượng. • Ưu điểm của lập trình hướng đối tượng • Các khái niệm căn bản của OOP • Những gợi ý cần thiết khi lập trình OO. Chương 01- Nhập môn OOP

  5. 2.1- Lập trình thủ tục • POP- Procedure Oriented Programming. • Data structure + Algorithm = Program • Kỹ thuật POP: Program struct XX {..... }; pick nouns Data structure type Fun (XX x) {..... } Problem pick verbs Operation (function) void main() { XX x; Fun(x); } Chương 01- Nhập môn OOP

  6. VietLyLich(x); x.VietLyLich(); “x ơi, viết lý lịch đi em” 2.2- Nhược điểm của POP • Diễn đạt “thiếu tự nhiên” Có học sinh x “Viết lý lịch cho học sinh x” “x ơi, viết lý lịch đi em” Diễn đạt nào tự nhiên hơn? Chương 01- Nhập môn OOP

  7. Nhược điểm của POP... • Khó mô tả những quan hệ phức tạp của thế giới tự nhiên. Biểu diễn dạng cấu trúc “phức tạp” không phải là dễ dàng đối với nhiều người. • Quan hệ giữa các dữ liệu được biểu diễn bằng cấu trúc lồng nhau hoặc một pointer.  Tính phân lớp khó được phát hiện, có khó khăn trong biểu diễn lẫn tính dễ hiểu. • Thí dụ ở slide sau. Chương 01- Nhập môn OOP

  8. Tự nhiên Hiện thực struct PERSON {.... } ; Person struct MALE { PERSON Data <dữ liệu thêm> } ; is a is a Diễn đạt phải tường minh  không tự nhiên Male Female struct FEMALE { PERSON Data <dữ liệu thêm> } ; Nhược điểm của POP... Chương 01- Nhập môn OOP

  9. Nhược điểm của POP... • Bảo mật kém do không thể giới hạn truy xuất đến một dữ liệu. struct STUDENT { char Name[21]; int Age; int Score; }; void main() {STUDENT x = { “Hoa”, 19, 5}; x.Age=1000; x.Score=-20; } Bạn nghĩ sao về 2 tác vụ này? Chương 01- Nhập môn OOP

  10. Nhược điểm của POP... • Cần một phương pháp lập trình khác giúp giải quyết những nhược điểm này. • OOP có những đặc điểm vượt trội so với POP và là hướng lập trình chủ đạo hiện nay. Chương 01- Nhập môn OOP

  11. 2.2- Tư duy hướng đối tượng • Đối tượng-Object • Lớp-Class • Tính thừa kế- Inheritance • Tính đa hình-Polymorphism Chương 01- Nhập môn OOP

  12. What is an object? • Objects are key to understanding object-oriented technology. • Some real-world objects: your dog, your desk, your television set, your bicycle. • Real-world objects share two characteristics: They all have state and behavior Chương 01- Nhập môn OOP

  13. Objects… • Identifying the state and behavior for real-world objects is a great way to begin thinking in terms of object-oriented programming. Chương 01- Nhập môn OOP

  14. How to describe a real-object? • Ask yourself two questions: • "What possible states can this object be in?“ • "What possible behavior can this object perform?". • Real-world objects vary in complexity Chương 01- Nhập môn OOP

  15. How to describe a real-object? … • Your desktop lamp may have only two possible states (on and off) and two possible behaviors (turn on, turn off). • Your desktop radio might have additional states (on, off, current volume, current station) and behavior (turn on, turn off, increase volume, decrease volume, seek, scan, and tune). • These real-world observations all translate into the world of object-oriented programming. Chương 01- Nhập môn OOP

  16. Software Object- Đối tượng phần mềm • An object is a software bundle of related state and behavior. • Software objects are often used to model the real-world objects that you find in everyday life. Chương 01- Nhập môn OOP

  17. Software objects Chương 01- Nhập môn OOP

  18. What is a class? • In the real world, many individual objects belong of the same kind. • Each bicycle was built from the same set of blueprints and therefore contains the same components. • In object-oriented terms, we say that your bicycle is an instance of the class of objects known as bicycles. • A class is the blueprint from which individual objects are created Chương 01- Nhập môn OOP

  19. 2.3-Diễn đạt hướng đối tượng Thí dụ 1: Xét hai diễn đạt: • Nhân viên văn phòng viết lý lịch cho sinh viên “Hoàng” ViếtLýLịch(Hoàng); • Hoàng ơi, viết lý lịch đi em.Hoàng.ViếtLýLịch();  Theo bạn, tình huống nào đúng với thực tế? Thí dụ 2: Xét hai diễn đạt: • Tính tổng mảng a có n phần tử Tổng(a,n); • Mảng a ơi, tình tổng đi em: a.Tổng(); • Xem a là một đối tượng. Chương 01- Nhập môn OOP

  20. Diễn đạt hướng đối tượng • Diễn đạt tác vụ theo hướng thủ tục : TênTácVụ(ĐốiTượngDữLiệu);  Tổng(a,n); • Diễn đạt tác vụ theo hướng đối tượng : ĐốiTượngDữLiệu.TênTácVụ();  a.Tổng(); • Xem dữ liệu là đối tượng làm chương trình tự nhiên hơn vì giống tự nhiên hơn. Chương 01- Nhập môn OOP

  21. Hiện thực Tự nhiên class PERSON {.... } ; Person class MALE: PERSON {<dữ liệu thêm> } ; is a is a tự nhiên Male Female class FEMALE: PERSON { <dữ liệu thêm> } ; 2.4- Ưu điểm của OOP • Dễ mô tả các quan hệ phân cấp trong thế giới tự nhiên. Chương 01- Nhập môn OOP

  22. Benefits software objects • Modularity: The source code for an object can be written and maintained independently of the source code for other objects.. • Information-hiding: By interacting only with an object's methods, the details of its internal implementation remain hidden from the outside world. • Code re-use: you can use (perhaps written by another software developer) that object in your program.. • Pluggability and debugging ease: If a bolt (con ốc) breaks, you replace it, not the entire machine. Chương 01- Nhập môn OOP

  23. Thí dụ về che dấu thông tin • Bên ngoài không thể tùy tiện truy cập một dữ liệu thuộc tính  Security Chương 01- Nhập môn OOP

  24. Thí dụ về tái sử dụng code Tái sử dụng code Tái sử dụng code Chương 01- Nhập môn OOP

  25. 2.5- Some OOP languages • C++ ( Borland C++, Visual C++) • Java • C# ( C sharp) • Visual Basic. • ..... Chương 01- Nhập môn OOP

  26. Ngôn ngữ OOP • C++, MS VC++: hỗ trợ cả POP lẫn OOP  Lai OOP. Hỗ trợ đa thừa kế. Đối tượng là biến của chương trình. Hàm main() là POP. • Java (Sun), C# (Microsoft): chỉ hỗ trợ OOP, hàm main phải nằm trong một lớp. Chỉ hỗ trợ đơn thừa kế. Chương 01- Nhập môn OOP

  27. 2.6- Các khái niệm căn bản của OOP • OOP – Object Oriented Programming. • Chương trình là sự hoạt động của các đối tượng Giống tự nhiên. • Trong tự nhiên: Đối tượng được biểu diễn bằng trạng thái (states) + hành vi (behaviors). • Đối tượng thực thi một hoạt động tức là đối tượng thực hiện một hành vi mà đối tượng này có khả năng. • Một chương trình là một trật tự các lời yêu cầu đối tượng thực hiện hành vi của mình.  Chương trình là một kích bản (script). Chương 01- Nhập môn OOP

  28. Khái quát hóa 1 5 7 -3 8 .... Số nguyên ( int ) int, NGUOI, PERSON là các ADT Danh từ chung trong ngôn ngữ tự nhiên Người ( PERSON ) <Code, Name, date_of_birth, Address, e-mail .......> Khái quát hóa attributes 2.7- Lớp - Kiểu dữ liệu trừu tượng • Abstract Data Type. • Kết qủa của việc khái quát hóa các thực thể. Chương 01- Nhập môn OOP

  29. 2.8- Lớp- Kiểu dữ liệu trừu tượng • Đối tượng (object): Bao gói dữ liệu + hành vi. • Đối tượng phải thuộc một lớp (class). • Xây dựng một đối tượng là xây dựng một lớp • Class = data (biến mô tả)+ methods (code). data membersfunction members Chương 01- Nhập môn OOP

  30. 2.9-Ba đặc điểm của OOP • 3 khái niệm cơ bản của OOP • Bao gói (đóng gói) dữ liệu + hành vi + che đi những thành phần có tính “tế nhị” mà bên ngoài không thể truy cập. • Tính thừa kế: Một lớp có thể thừa kế từ lớp khác. • Tính đa hình: Kỹ thuật cho phép có khác biệt giữa code của cùng một hành vi trong lớp cha và trong lớp con. Chương 01- Nhập môn OOP

  31. 2.10- Bao gói - Encapsulation • Che dấu đi dữ liệu. • Bên ngoài chỉ tương tác được với đối tượng qua một số hành vi. • Hành vi giao tiếp (public, interface methods): Hành vi giúp đối tượng giao tiếp với môi trường. • Hành vi riêng/nội (private, internal): hành vi xử lý dữ liệu nội tại của đối tượng mà bên ngoài không thể truy cập. class NGƯỜI Tên NămSinh TênNgườiYêu .... getTen() getNamSinh() getTenNguoiYeu() TiêuHóa() Nuốt() Đi() Đứng() Chạy() Nhẩy() ....... getTen() getNamSinh() getTenNguoiYeu() Đi() Đứng() interfaces Chương 01- Nhập môn OOP

  32. class CIRLCE int x, y, r; int BorderColor; int BkColor; public int getX() public void setX(int xx) public int getY() public void setY(int yy) public int getR() public void setR(int r) public double getPerimeter() public double getArea() Bao gói..... Với khai báo này, bên ngoài có thể truy cập 2 thuộc tính mầu hay không? Chương 01- Nhập môn OOP

  33. Bao gói… class CASSETTE ĐọcBăng(); GhiBăng(); XửLýNhiễu(); Play() Stop() Môi trường bên ngoài Rewind() Forward() Record() Interfaces (public methods) Hành vi nội (private methods) Chương 01- Nhập môn OOP

  34. Bao gói… interface • Set of common methods of a class through them, an object can interact with the outside world. • The buttons on the front of your television set, for example, are the interface between you and the electrical wiring on the other side of its plastic casing. You press the "power" button to turn the television on and off. Chương 01- Nhập môn OOP

  35. 2.11-Tính thừa kế-Inheritance • Các loại đối tượng khác nhau thường có chung một số đặc điểm. Chương 01- Nhập môn OOP

  36. Tính thừa kế… • Từ những lớp đối tượng đã có, ta có thể đặc tả lớp đối tượng mới, lớp mới sẽ mang những đặc tính của những lớp đã có (di truyền) + những đặc tính mới của riêng nó  Con = Cha + một tí khác biệt. •  Tiết kiệm công sức viết code và test. • Tồn tại mối quan hệ cha (lớp nền,base,parent)- con ( lớp dẫn xuất,derived class). • C++ cho phép đa thừa kế (1 lớp có thể là dẫn xuất của nhiều lớp khác). • C#, Java là ngôn ngữ OO đơn thừa kế.  Thừa kế là đặc điểm tái sử dụng thông tin của OOP. Chương 01- Nhập môn OOP

  37. class PERSON ID_Num Name YearOfBirth Address getID_Num() setID_Num(newID) ...... Tính thừa kế… Để được cái tương đương class STUDENT ID_Num Name YearOfBirth Address getID_Num() setID_Num(newID) ...... thừa kế quan hệ “là 1” RollNum Score getScore() setSore(newScore) ...... tính chất riêng class STUDENT RollNum Score getScore() setSore(newScore) ...... Chỉ phải hiện thực bằng này Con = Cha + một tí Chương 01- Nhập môn OOP

  38. 2.12- Đa hình-Polymorphism • Khả năng có những hiện thực khác nhau cho cùng một hành vi. • Kỹ thuật cho phép thay đổi nội dung của cùng một hành vi trong 2 lớp cha –con. • Bản chất: Sửa code của cùng một hành vi ở 2 lớp cha con để các code này khác nhau. • Đa hình tạo ra khả năng cho phép gọi một hành vi của một lớp mà không cần quan tâm đến hiện thực của hành vi này. Chương 01- Nhập môn OOP

  39. class CIRCLE int x,y,r; void Draw () { circle (x,y,r); } class RECTANGLE int x1,y1, x2, y2; void Draw () { rectangle(x1,y1, x2, y2); } class SHAPE void Draw () { } class TRIANGLE int x1,y1, x2, y2 , x3, y3; void Draw () { line(x1,y1, x2, y2); line(x2,y2, x3, y3); line(x3,y3, x1, y1); } Thí dụ về tính đa hình… class ĐànBà void DiChuyển(); class Người void DiChuyển(); class ĐànÔng void DiChuyển(); Đa hình tạo được tính mềm dẻo/linh động của chương trình Chương 01- Nhập môn OOP

  40. 2.13-Phân biệt Lớp, Thể hiện, Biến đối tượng • class: Hiện thực của một tập các đối tượng (object) cùng loại  Cùng dữ mô tả (data), cùng hành vi (methods). • Thể hiện – instance: Một thông tin về một đối tượng có trong bộ nhớ của chương trình. • Biến đối tượng(gọi tắt là đối tượng): • Pointer của đối tượng:Tham chiếu đến một thực thể của lớp. 7 5 “Hoa” 1000 obj 300 1000 Student obj= new Student(“Hoa”,5,7); Chương 01- Nhập môn OOP

  41. 2.14- Thông điệp, thông báo - Message • Gửi thông báo: Yêu cầu 1 đối tượng thực thi một hành vi. • Thí dụ: x là một HOCSINH < Name, Age> x.VietLyLich(); String S= x.getName(); int n= x.getAge(); Chương 01- Nhập môn OOP

  42. 2.15- Gợi ý khi thiết kế một lớp • Ta cần biết những thông tin gì về một đối tượng thuộc lớp này.  Dữ liệu mô tả. • Ta (bên ngoài) thực sự cần xử lý gì (động từ) trên đối tượng  Hành vi giao tiếp. • Để có được hành vi giao tiếp, có cần những xử lý thêm mà bên ngoài không cần biết đến  Hành vi nội. • Đơn giản nhất: Với mỗi thuộc tính dữ liệu của lớp, sẽ có 2 hành vi thao tác (gọi là accessors) get, set (gọi là getter, setter)thao tác lên dữ liệu này. Chương 01- Nhập môn OOP

  43. Bài tập tại chỗ class Student char code [12]; char name[30]; int score1; int score2; int score3; void input() void output() • Thiết kế lớp mô tả và xử lý một học sinh, biết rằng học sinh phải học 3 môn học. char* getCode() void setCode(char* newCode) char* getName() void setName(char* newName) int getScore1() void setScore1(int s1) int getScore2() void setScore2(int s2) int getScore3() void setScore3(int s3) float avg() Chương 01- Nhập môn OOP

  44. 2.16- Gợi ý về phân tích thừa kế (1) Liệt kê đặc điểm của các đối tượng cần quan tâm. (2) Tìm tập giao của các tính chất giữa các lớp, tách tập giao này để xây dựng lớp cha. (3) Đặt 1 tên gọi có ý nghĩa cho lớp cha. (4) Phần còn lại sau khi tách tập giao là các lớp con. Chương 01- Nhập môn OOP

  45. Thừa kế - Bài mẫu Phân tích phân cấp thừa kế cho các lớp: • Hàng điện máy <mã hàng, tên hàng, nhà sản xuất, giá, thời gian bảo hành, điện áp, công suất> • Hàng sành sứ < mã hàng, tên hàng, nhà sản xuất, giá, loại nguyên liệu> • Hàng thực phẩm <mã hàng, tên hàng, nhà sản xuất, giá, ngày sản xuất, ngày hết hạn dùng> Chương 01- Nhập môn OOP

  46. HangHoa maH tenH nsx gia HangDienMay HangSanhSu HangThucPham tgbh đa cx lnl ngsx nghhd Bài giải • HangĐienMay < maH,tenH,nsx,gia, tgbh,đa,cs > • HangSanhSu < maH,tenH,nsx,gia, lnl > • HangThucPham < maH,tenH,nsx,gia, ngsx,nhhd > Chương 01- Nhập môn OOP

  47. NhanVienQL pccv NhanVien NhanVienĐĐT maNV, tenNV ns, tđ, luongCb trường chuyênmôn NhanVienNC pcđh Thừa kế- Bài tập làm tại chỗ Phân tích phân cấp thừa kế cho các đối tượng trong một học viện: • Nhân viên quản lý <mã nv, tên nv, năm sinh, trình độ,trường đào tạo, chuyên môn, lương cb, phụ cấp chức vụ> • Nhân viên nghiên cứu <mã nv, tên nv, năm sinh, trình độ,trường đào tạo, chuyên môn, lương cb, phụ cấp độc hại> • Nhân viên phục vụ <mã nv, tên nv, năm sinh, trình độ, lương cb> Chương 01- Nhập môn OOP

  48. 2.17- Gợi ý về cách giải bài toán theo OOP Program class XX { type1 prop1; type2 prop2; ....... type Method1(...) { } ..... }; pick nouns properties Bao gói dữ liệu và hành vi thành class Problem pick verbs Operation (function, method, behavior) void main() { XX x; // object variable x.Method(...); } Chương 01- Nhập môn OOP

  49. Đề bài • Viết chương trình nhập,xuất1 học sinh. Thông tin cần quan tâm về 1 học sinh: Mã học sinh (8 ký tự), tên học sinh (30 ký tự), điểm (int). • Danh từ: Học sinh  cấu trúc HS • Động từ: • Bắt đầu; • Nhập một hs  Hàm Nhap(HS&hs) • Xuất một hs  Hàm Xuat(HS hs); • Ngưng. Chương 01- Nhập môn OOP

  50. Giải bài toán hướng POP với C++ Chương 01- Nhập môn OOP

More Related