Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 57 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
57
Dung lượng
1,35 MB
Nội dung
Lập trình hướng đối tượng Giới thiệu Nội dung khóa học Phần 1: Giới thiệu lập trình hướng đối tượng Các khái niệm ngôn ngữ Phần 2: Lập trình hướng đối tượng với C++ The advantage of C++ over C Object & Class Operator Polymorphism Template I/O Stream - Exception Phần 3: Lập trình hướng đối tượng với C# Giới thiệu C#, Net Thừa kế số kỹ thuật Ứng dụng với C# Thài liệu tham khảo Nguyễn Thanh Thuỷ: Lập trình hướng đối tượng với C++, NXB Khoa học kỹ thuật Phần Giới thiệu Các nguyên tắc hướng ĐT Types, Classes, Objects Interfaces Inheritance, Polymorphism Delegation Các ngôn ngữ HĐT Computer programming “The history of computer programming is a steady move away from machine-oriented views of programming towards concepts and metaphors that more closely reflect the way in which we ourselves understand the world” Programming progression Programming has progressed through: machine code assembly language machine-independent programming languages procedures & functions objects Machine language – Mark I Machine language 0000 1001 1100 0110 1010 1111 0101 1000 1010 1111 0101 1000 0000 1001 1100 0110 1100 0110 1010 1111 0101 1000 0000 1001 0101 1000 0000 1001 1100 0110 1010 1111 Assembly language – PDP-11 Assembly language – Macro-11 GCD: TST B BEQ MOV SIMPLE A, R5 SXT SIMPLE: R4 DIV B, R4 MOV B, A MOV R5, B CALL GCD RETURN Machine-Independent Programming Languages – Fortran ! This example program solves for roots of the quadratic equation, ! ax^2 +bx +c =0,for given values of a, b and c ! PROGRAM bisection IMPLICIT NONE INTEGER :: iteration DOUBLE PRECISION :: CC, Er, xl, x0, x0_old, xr ! Set convergence criterion and guess for xl, xr CC = 1.d-4 xl = 8.d-1 xr = 11.d-1 ! Bisection method Er =CC +1 iteration = DO WHILE (Er > CC) iteration = iteration + ! Compute x0 and the error x0_old = x0 x0 = (xl + xr) / 2.d0 this is partial… Er = DABS((x0 - x0_old)/x0)*100.d0 WRITE (*,10) iteration, x0_old, x0, Er 10 FORMAT (1X,I4,3(2X,E10.4)) 10 Các mức độ truy cập thành viên lớp PRIVATE members available: Only within the class Order PROTECTED members available: PRIVATE Within the class Within the class hierarchy PUBLIC members available: PROTECTED PUBLIC Within the class Within the class hierarchy To users outside the class 43 Thừa kế - thí dụ Class: Order PRIVATE: orderNum AS INT custNum AS INT CalculateTotalPrice( ) PROTECTED: GetCredit( ) PUBLIC: CreateOrder( ) UpdateOrder( ) GetOrderTotal( ) Next( ) 44 Thừa kế - thí dụ Class: Order Class InternalOrder inherits Order PRIVATE: orderNum AS INT InternalOrder custNum AS INT PROTECTED: CalculateTotalPrice( ) GetCredit( ) PROTECTED: PUBLIC: GetCredit( ) CreateOrder( ) PUBLIC: UpdateOrder( ) CreateOrder( ) GetOrderTotal( ) UpdateOrder( ) Next( ) GetOrderTotal( ) Next( ) 45 Thừa kế viết chồng phương thức Method overriding used to specialize behavior Subclass may override a method in its super class (hierarchy) Method signatures must match Overriden method can: Completely override behavior of super class Augment behavior by providing its own behavior and calling super class method 46 Viết chồng phương thức – thí dụ Order Class InternalOrder inherits Order PROTECTED: GetCredit ( ) credit = FindCreditScore( ) InternalOrder PROTECTED: GetCredit ( ) credit = -1 /*unlimited*/ 47 Viết chồng phương thưc – thí dụ Order Class ExternalOrder inherits Order PROTECTED: GetCredit ( ) credit = FindCreditScore( ) ExternalOrder PROTECTED: GetCredit ( ) credit = SUPER:GetCredit( ) + extraMoney 48 Các tiện ích thừa kế viết chồng Inheritance supports modular design Common behavior put in super class and used by subclass Subclass can override to specialize behavior Inheritance is strongly-typed InternalOrder myOrder = NEW InternalOrder myOrder.GetCredit( ) myOrder is an InternalOrder that inherits from Order 49 Đa hình Một giao diện, nhiều thể Polymorphism is the ability to call an overridden method in a subclass using a super class object reference Code compiled using super class reference Runtime dispatches method call to subclass Three requirements: Hierarchy with overridden method in subclass Super class reference used to call method Subclass assigned to super class reference 50 Đa hình – thí dụ Order PROTECTED: GetCredit ( ) credit = FindCreditScore( ) InternalOrder PROTECTED: GetCredit ( ) credit = -1 /*unlimited*/ ExternalOrder PROTECTED: GetCredit ( ) credit = SUPER:GetCredit( ) + extraCreditPoints 51 Đa hình – thí dụ tiếp DEFINE myOrder AS Order Super Class if (bInternalCust = TRUE) reference myOrder = NEW InternalOrder( ) else myOrder = NEW ExternalOrder( ) myOrder:GetCredit( ) Calls InternalOrder:GetCredit( ) or ExternalOrder:GetCredit( ) 52 Các tiện ích đa hình Supports generic programming using super class or interface Type used at compile time is super class or interface Specialized behavior is called at runtime automatically Built on inheritance and overriding 53 Ủy quyền Ủy quyền việc sử dụng lớp khác lớp Lớp chuyển tiếp lời gọi phương thức tới lớp Lớp bao bọc lớp ủy quyền Tạo thể lớp Xác định phương thức tham chiếu (stub) cho phương thức cần xuất Không truy cập tới thành viên protected private 54 Ủy quyền – thí dụ Order tham chiếu tới đối tượng ShipInfo Order ShipInfo PRIVATE: PRIVATE: id ShipInfo shipObj shipdate = NEW ShipInfo( ) promisedate PUBLIC: PUBLIC: GetShipDate( ) SetDate( ) GetDate( ) … shipObj:GetDate( ) calls 55 Phần Giới thiệu Các nguyên tắc hướng ĐT Types, Classes, Objects Interfaces Inheritance, Polymorphism Delegation Các ngôn ngữ HĐT 56 Các ngôn ngữ hướng đối tượng SIMULA(67) SMALTALK(71) ADA(83) C++(86) SMALTALK(80) EIFFEL(90) ADA(95) JAVA(95) 57 [...]... HĐT 19 C c nguyên t c hướng đối tượng c bản Abstraction Encapsulation Hierarchies 20 Trừu tượng hóa G c nhìn bên ngoài c a đối tượng Trừu tượng hóa đư c sử dụng để quản lý sự ph c tạp Tập trung vào c c tính chất bản chất Loại bỏ c c chi tiết Tìm c c điểm chung c a c c đối tượng Defines the public contract Mô tả bên ngoài cho người dùng đối tượng “G c nhìn bên ngoài” Đ c lập với... GetOrderTotal( ) GetOrderTotal now calls CalculateTotalPrice( ) Next( ) 26 Phân c p C c quan hệ giữa c c đối tượng X c định quan hệ giữa c c đối tượng C c đối tượng đư c x c định qua c c đối tượng kh c Cho phép trạng thái và hành vi đư c chia sẻ và chuyên biệt hóa khi c n Khuyến khích sử dụng lại mã Hai dạng phân c p quan trọng: Inheritance Aggregation 27 Phân c p – thí dụ Order uses ShipInfo... Order orderNum AS INT custNum AS INT Hmm I’d like to change CalculatePrice to CalculateTotalPrice CalculatePrice( ) PUBLIC: CreateOrder( ) UpdateOrder( ) GetOrderTotal( ) GetOrderTotal calls CalculatePrice( ) Next( ) 25 Đóng gói – thí dụ (tiếp) Order orderNum AS INT This change was easy because users of custNum AS INT the object will not be affected CalculateTotalPrice( ) PUBLIC: CreateOrder( ) UpdateOrder(... Booch “Object-oriented programming is a method of implementation in which programs are organized as cooperative collections of objects, each of which represents an instance of some class ” Grady Booch 16 Phát triển ứng dụng hướng đối tượng C ch thiết kế và xây dựng ứng dụng C c đối tượng bó c c dữ liệu và phương th c cùng nhau C c đối tượng cho phép phân tách định nghĩa và thể hiện Không chỉ... C c nguyên t c hướng ĐT c bản Types, Classes, Objects và Interfaces Inheritance, Polymorphism và Delegation C c ngôn ngữ HĐT 30 Dạng Dạng là một định nghĩa Dạng x c định: Dữ liệu và phương th c C c quan hệ thừa kế với c c dạng kh c Không quan tâm tới thể hiện Cho phép định dạng mạnh Early (static) binding - types known at compile time Type-consistency enforced at compile time and... instances Thành ngữ Object thường đư c dùng cho c lớp và thể hiện Total Price = $45.00 YourOrder orderNum = 61 custNum = 58 Total Price = $318.34 35 Giao diện Giao diện x c định một dạng Giao diện là một tập c c định nghĩa phương th c của một tập hành vi – “hợp đồng” Không c thể hiện Lớp c thể thể hiện giao diện Phải thể hiện tất c c c phương th c của giao diện Hành vi c thể đư c chuyên... c pháp Lập trình hướng đối tượng c n bao hàm tư duy hướng đối tượng 17 Thiết kế một ứng dụng hướng đối tượng Order Take an Order Customer Create a Customer Assign Salesperson Check Credit beOrder Progress Customer Table DataSet Customer Table Order Table 18 Phần 1 Giới thiệu C c nguyên t c hướng ĐT c bản Types, Classes, Objects và Interfaces Inheritance, Polymorphism và Delegation C c. .. minimally capable computer language But that is like saying a shovel is theoretically as capable as a tractor In practice, using a shovel might make things very hard… 14 Lập trình hướng đối tượng là gì? Lập trình HĐT Phương pháp lập trình dựa trên c c ĐT để xây dựng chương trình Đối tượng Vật thật hay trừu tượng với thu c tính và hành vi Attribute: State, data Behavior: Action, method hay function... Abstraction - Example “What should an Order object Order do?” CreateOrder UpdateOrder GetOrderTotal Next InternalOrder Two types of Orders ExternalOrder 22 Đóng gói Ẩn giấu c c chi tiết thể hiện Đóng gói ẩn giấu thể hiện Th c đẩy thiết kế phần mềm theo module – dữ liệu và phương th c đư c bó c ng nhau Vi c truy c p dữ liệu thường thông qua phương th c Thường đư c gọi là “ẩn giấu thông tin” Cung... references is a ExternalOrder ShipInfo InternalOrder and ExternalOrder inherit from Order (Inheritance) 28 Tổng kết: c c nguyên t c HĐ c bản Trừu tượng hóa Break up complex problem Focus on public view, commonalities Đóng gói Hide implementation details Package data and methods together Phân c p Build new objects by referencing or extending other objects 29 Phần 1 Giới thiệu C c nguyên ... INT Hmm I’d like to change CalculatePrice to CalculateTotalPrice CalculatePrice( ) PUBLIC: CreateOrder( ) UpdateOrder( ) GetOrderTotal( ) GetOrderTotal calls CalculatePrice( ) Next( ) 25 Đóng... Booch 16 Phát triển ứng dụng hướng đối tượng C ch thiết kế xây dựng ứng dụng C c đối tượng bó liệu phương th c C c đối tượng cho phép phân tách định nghĩa thể Không c pháp Lập trình. .. dụ Class Order implements IList interface Class: Order orderNum AS INT custNum AS INT Interface: IList CalculateTotalPrice( ) PUBLIC: Next( ) PUBLIC: CreateOrder( ) UpdateOrder( ) Compiler checks