Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
370,68 KB
Nội dung
Chương6.LậptrìnhhướngđốitượngChương này giới thiệu những khái niệm cơ bản trong lậptrìnhhướngđối tượng. Các khái niệm cơ bản như lớp, đối tượng, thuộc tính, phương thức, thông điệp, và quan hệ của chúng sẽ được thảo luận trong phần này. Thêm vào đó là sự trình bày của những đặc điểm quan trọng trong lậptrìnhhướngđốitượng như tính bao gói, tính thừa kế, tính đa hình, nhằm giúp người h ọc có cái nhìn tổng quát về lậptrìnhhướngđối tượng. 6.1. Giới thiệu Hướngđốitượng (object orientation) cung cấp một kiểu mới để xây dựng phần mềm. Trong kiểu mới này, các đốitượng (object) và các lớp (class) là những khối xây dựng trong khi các phương thức (method), thông điệp (message), và sự thừa kế (inheritance) cung cấp các cơ chế chủ yếu. Lậptrìnhhướngđốitượng (OOP- Object-Oriented Programming) là một cách tư duy mới, tiếp cận hướngđốitượng để giải quyết vấ n đề bằng máy tính. Thuật ngữ OOP ngày càng trở nên thông dụng trong lĩnh vực công nghệ thông tin. Khái niệm 6.1 Lậptrìnhhướngđốitượng (OOP) là một phương pháp thiết kế và phát triển phần mềm dựa trên kiến trúc lớp và đối tượng. Nếu bạn chưa bao giờ sử dụng một ngôn ngữ OOP thì trước tiên bạn nên nắm vững các khái niệm của OOP hơn là viết các chương trình. Bạn cần hiểu được đốitượng (object) là gì, lớp (class) là gì, chúng có quan hệ với nhau như thế nào, và làm thế nào để các đốitượng trao đổi thông điệp (message) với nhau, vâng vâng. OOP là tập hợp các kỹ thuật quan trọng mà có thể dùng để làm cho việc triển khai chươngtrình hiệu quả hơn. Quá trình tiến hóa của OOP như sau: Lậptrình tuyến tính Lậptrình có cấu trúc Sự trừu tượng hóa dữ liệu LậptrìnhhướngđốitượngChương 6: Lậptrìnhhướngđốitượng 76 6.2. Trừu tượng hóa (Abstraction) Trừu tượng hóa là một kỹ thuật chỉ trình bày những các đặc điểm cần thiết của vấn đề mà không trình bày những chi tiết cụ thể hay những lời giải thích phức tạp của vấn đề đó. Hay nói khác hơn nó là một kỹ thuật tập trung vào thứ cần thiết và phớt lờ đi những thứ không cần thiết. Ví dụ những thông tin sau đây là các đặc tính gắn kết với con người: Tên Tuổi Địa chỉ Chiều cao Màu tóc Giả sử ta cần phát triển ứng dụng khách hàng mua sắm hàng hóa thì những chi tiết thiết yếu là tên, địa chỉ còn những chi tiết khác (tuổi, chiều cao, màu tóc, ) là không quan trọng đối với ứng dụng. Tuy nhiên, nếu chúng ta phát triển một ứng dụng hỗ trợ cho việc điều tra tội phạm thì những thông tin như chiều cao và màu tóc là thiết yếu. Sự trừu tượng hóa đã không ngừng phát triển trong các ngôn ngữ lập trình, nh ưng chỉ ở mức dữ liệu và thủ tục. Trong OOP, việc này được nâng lên ở mức cao hơn – mức đối tượng. Sự trừu tượng hóa được phân thành sự trừu tượng hóa dữ liệu và trừu tượng hóa chương trình. Khái niệm 6.2 Trừu tượng hóa dữ liệu (data abstraction) là tiến trình xác định và nhóm các thuộc tính và các hành động liên quan đến một thực thể đặc thù trong ứng dụng đang phát triển. Trừu tượng hóa chươngtrình (program abstraction) là một sự trừu tượng hóa dữ liệu mà làm cho các dịch vụ thay đổi theo dữ liệu. 6.3. Đốitượng (object) Các đốitượng là chìa khóa để hiểu được kỹ thuật hướngđối tượng. Bạn có thể nhìn xung quanh và thấy được nhiều đốitượng trong thế giới thực như: con chó, cái bàn, quyển vở, cây viết, tivi, xe hơi .Trong một hệ thống hướngđối tượng, mọi thứ đều là đối tượng. Một bảng tính, một ô trong bảng tính, một biểu đồ, một bảng báo cáo, một con số hay một số điện thoại, một tập tin, một thư mục, một máy in, một câu hoặc một từ, thậm chí một ký tự, tất cả chúng là những ví dụ của một đối tượng. Rõ ràng chúng ta viết một chươngtrìnhhướngđốitượng cũng có nghĩa là chúng ta đang xây dựng một mô hình Chương 6: Lậptrìnhhướngđốitượng 77 của một vài bộ phận trong thế giới thực. Tuy nhiên các đốitượng này có thể được biểu diễn hay mô hình trên máy tính. Một đốitượng thế giới thực là một thực thể cụ thể mà thông thường bạn có thể sờ, nhìn thấy hay cảm nhận được. Tất cả các đốitượng trong thế giới thực đều có trạng thái (state) và hành động (behaviour). Ví dụ: Trạng thái Hành động Con chó Tên Màu Giống Vui sướng Sủa Vẫy tai Chạy Ăn Xe đạp Bánh răng Bàn đạp Dây xích Bánh xe Tăng tốc Giảm tốc Chuyển bánh răng Các đốitượng phần mềm (software object) có thể được dùng để biểu diễn các đốitượng thế giới thực. Chúng được mô hình sau khi các đốitượng thế giới thực có cả trạng thái và hành động. Giống như các đốitượng thế giới thực, các đốitượng phần mềm cũng có thể có trạng thái và hành động. Một đốitượng phần mềm có biến (variable) hay trạng thái (state) mà thường được gọi là thuộc tính (attribute; property) để duy trì trạng thái của nó và phương thức (method) để thực hiện các hành động của nó. Thuộc tính là một hạng mục dữ liệu được đặt tên bởi một định danh (identifier) trong khi phương thức là một chức năng được kết hợp với đốitượng chứa nó. OOP thường sử dụng hai thuật ngữ mà sau này Java cũng sử dụng là thuộc tính (attribute) và phương thứ c (method) để đặc tả tương ứng cho trạng thái (state) hay biến (variable) và hành động (behavior). Tuy nhiên C++ lại sử dụng hai thuật ngữ dữ liệu thành viên (member data) và hàm thành viên (member function) thay cho các thuật ngữ này. Xét một cách đặc biệt, chỉ một đốitượng riêng rẽ thì chính nó không hữu dụng. Một chươngtrìnhhướngđốitượng thường gồm có hai hay nhiều hơn các đốitượng phần mềm tương tác lẫn nhau như là sự tương tác c ủa các đốitượng trong trong thế giới thực. Khái niệm 6.3 Đốitượng (object) là một thực thể phần mềm bao bọc các thuộc tính và các phương thức liên quan. Kể từ đây, trong giáo trình này chúng ta sử dụng thuật ngữ đốitượng (object) để chỉ một đốitượng phần mềm. Hình 6.1 là một minh họa của một đốitượng phần mềm: Chương 6: Lậptrìnhhướngđốitượng 78 Hình 6.1 Một đốitượng phần mềm Mọi thứ mà đốitượng phần mềm biết (trạng thái) và có thể làm (hành động) được thể hiện qua các thuộc tính và các phương thức. Một đốitượng phần mềm mô phỏng cho chiếc xe đạp sẽ có các thuộc tính để xác định các trạng thái của chiếc xe đạp như: tốc độ của nó là 10 km trên giờ, nhịp bàn đạp là 90 vòng trên phút, và bánh răng hiện tại là bánh răng thứ 5. Các thuộc tính này thông thường được xem như thuộc tính thể hiện (instance attribute) bởi vì chúng chứa đựng các trạng thái cho một đốitượng xe đạp cụ thể. Trong kỹ thuật hướngđốitượng thì một đốitượng cụ thể được gọi là một thể hiện (instance). Khái niệm 6.4 Một đốitượng cụ thể được gọi là một thể hiện (instance). Hình 6.2 minh họa một xe đạp được mô hình như một đốitượng phần mềm: Hình 6.2 Đốitượng phần mềm xe đạp Đốitượng xe đạp phần mềm cũng có các phương thức để thắng lại, tăng nhịp đạp hay là chuyển đổi bánh răng. Nó không có phương thức để thay đổi tốc độ vì tốc độ của xe đạp có thể tình ra từ hai yếu tố số vòng quay và bánh răng hiện tại. Những phương thức này thông thường được biết như là các phương thước thể hiện (instance method) bởi vì chúng tác độ ng hay thay đổi trạng thái của một đốitượng cụ thể. Chương 6: Lậptrìnhhướngđốitượng 79 6.4. Lớp (Class) Trong thế giới thực thông thường có nhiều loại đốitượng cùng loại. Chẳng hạn chiếc xe đạp của bạn chỉ là một trong hàng tỉ chiếc xe đạp trên thế giới. Tương tự, trong một chươngtrìnhhướngđốitượng có thể có nhiều đốitượng cùng loại và chia sẻ những đặc điểm chung. Sử dụng thuật ngữ hướngđối tượng, chúng ta có thể nói rằng chi ếc xe đạp của bạn là một thể hiện của lớp xe đạp. Các xe đạp có một vài trạng thái chung (bánh răng hiện tại, số vòng quay hiện tại, hai bánh xe) và các hành động (chuyển bánh răng, giảm tốc). Tuy nhiên, trạng thái của mỗi xe đạp là độc lập và có thể khác với các trạng thái của các xe đạp khác. Trước khi tạo ra các xe đạp, các nhà sản xuất thường thiết lập một bảng thiết kế (blueprint) mô tả các đặc điểm và các yếu tố cơ bản của xe đạp. Sau đó hàng loạt xe đạp sẽ được tạo ra từ bản thiết kế này. Không hiệu quả nếu như tạo ra một bản thiết kế mới cho mỗi xe đạp được sản xuất. Trong phần mềm hướngđốitượng cũng có thể có nhiều đốitượng cùng loại chia sẻ những đặc đ iểm chung như là: các hình chữ nhật, các mẫu tin nhân viên, các đoạn phim, … Giống như là các nhà sản xuất xe đạp, bạn có thể tạo ra một bảng thiết kế cho các đốitượng này. Một bảng thiết kế phần mềm cho các đốitượng được gọi là lớp (class). Khái niệm 6.5 Lớp (class) là một thiết kế (blueprint) hay một mẫu ban đầu (prototype) định nghĩa các thuộc tính và các phương thức chung cho tất cả các đốitượng của cùng một loại nào đó. Một đốitượng là một thể hiện cụ thể của một lớp. Trở lại ví dụ về xe đạp chúng ta thấy rằng một lớp Xedap là một bảng thiết kế cho hàng loạt các đốitượng xe đạp được tạo ra. Mỗi đốitượng xe đạp là một thể hiện của lớp Xedap và trạng thái của nó có thể khác với các đốitượng xe đạp khác. Ví dụ một xe đạp hiện tại có thể là ở bánh răng thứ 5 trong khi một chiế c khác có thể là ở bánh răng thứ 3. Lớp Xedap sẽ khai báo các thuộc tính thể hiện cần thiết để chứa đựng bánh răng hiện tại, số vòng quay hiện tại, cho mỗi đốitượng xe đạp. Lớp Xedap cũng khai báo và cung cấp những thi công cho các phương thức thể hiện để cho phép người đi xe đạp chuyển đổi bánh răng, phanh lại, chuyển đổi số vòng quay, như Hình 6.3. Chương 6: Lậptrìnhhướngđốitượng 80 Hình 6.3 Khai báo cho lớp Xedap Sau khi bạn đã tạo ra lớp xe đạp, bạn có thể tạo ra bất kỳ đốitượng xe đạp nào từ lớp này. Khi bạn tạo ra một thể hiện của lớp, hệ thống cấp phát đủ bộ nhớ cho đốitượng và tất cả các thuộc tính thể hiện của nó. Mỗi thể hiện sẽ có vùng nhớ riêng cho các thuộc tính thể hiện của nó. Hình 6.4 minh họa hai đốitượng xe đạ p khác nhau được tạo ra từ cùng lớp Xedap: Hình 6.4 Hai đốitượng của lớp Xedap Ngoài các thuộc tính thể hiện, các lớp có thể định nghĩa các thuộc tính lớp (class attribute). Một thuộc tính lớp chứa đựng các thông tin mà được chia sẻ bởi tất cả các thể hiện của lớp. Ví dụ, tất cả xe đạp có cùng số lượng bánh răng. Trong trường hợp này, định nghĩa một thuộc tính thể hiện để giữ số lượng bánh răng là không hiệu quả bởi vì tấ t cả các vùng nhớ của các thuộc tính thể hiện này đều giữ cùng một giá trị. Trong những trường hợp như thế bạn có thể định nghĩa một thuộc tính lớp để chứa đựng số lượng bánh răng của xe đạp.Tất cả các thể hiện của lớp Xedap sẽ chia thuộc tính này. Một lớp cũng có thể khai báo các phương thức lớp (class methods). Bạn có thể triệu gọi một phương thức lớp trực tiếp từ lớp nhưng ngược lại bạn phải triệu gọi các phương thức thể hiện từ một thể hiện cụ thể nào đó. Chương 6: Lậptrìnhhướngđốitượng 81 Hình 6.5 Lớp và thể hiện của lớp Khái niệm 6.6 Thuộc tính lớp (class attribute) là một hạng mục dữ liệu liên kết với một lớp cụ thể mà không liên kết với các thể hiện của lớp. Nó được định nghĩa bên trong định nghĩa lớp và được chia sẻ bởi tất cả các thể hiện của p. lớ Phương thức lớp (class method) là một phương thức được triệu gọi mà không tham khảo tới bất kỳ một đố i tượng nào. Tất cả các phương thức lớp ảnh hưởng đến toàn bộ lớp chứ không ảnh hưởng đến một lớp riêng rẽ nào. 6.5. Thuộc tính (Attribute) Các thuộc tính trình bày trạng thái của đối tượng. Các thuộc tính nắm giữ các giá trị dữ liệu trong một đối tượng, chúng định nghĩa một đốitượng đặc thù. Khái niệm 6.7 Thuộc tính (attribute) là dữ liệu trình bày các đặc điểm về một đối tượng. Một thuộc tính có thể được gán một giá trị chỉ sau khi một đốitượng dựa trên lớp ấy được tạo ra. Một khi các thuộc tính được gán giá trị chúng mô tả một đối tượng. Mọi đốitượng của một lớp phải có cùng các thuộc tính nhưng giá trị của các thuộc tính thì có thể khác nhau. Một thuộc tính của đốitượng có thể nhận các giá trị khác nhau tại những thời đ iểm khác nhau. Chương 6: Lậptrìnhhướngđốitượng 82 6.6. Phương thức (Method) Các phương thức thực thi các hoạt động của đối tượng. Các phương thức là nhân tố làm thay đổi các thuộc tính của đối tượng. Khái niệm 6.8 Phương thức (method) có liên quan tới những thứ mà đốitượng có thể làm. Một phương thức đáp ứng một chức năng tác động lên dữ liệu của đốitượng (thuộc tính). Các phương thức xác định cách thức hoạt động của một đốitượng và được thực thi khi đốitượng cụ thể được tạo ra.Ví dụ, các hoạt động chung của một đốitượng thuộc lớp Chó là sủa, vẫy tai, chạy, và ăn. Tuy nhiên, chỉ khi một đốitượng cụ thể thuộc lớp Chó được tạo ra thì các phương thức sủa, vẫy tai, chạy, và ăn mới được thực thi. Các phương thức mang lại một cách nhìn khác về đối tượng. Khi bạn nhìn vào đốitượng Cửa ra vào bên trong môi trường của bạn (môi trường thế giới thực), một cách đơn giản bạn có thể thấy nó là một đốitượng bất động không có khả năng suy nghỉ. Trong tiếp cận hướngđốitượng cho phát triển hệ thống, Cửa ra vào có thể được liên kết tới phương th ức được giả sử là có thể được thực hiện. Ví dụ, Cửa ra vào có thể mở, nó có thể đóng, nó có thể khóa, hoặc nó có thể mở khóa. Tất cả các phương thức này gắn kết với đốitượng Cửa ra vào và được thực hiện bởi Cửa ra vào chứ không phải một đốitượng nào khác. 6.7. Thông điệp (Message) Một chươngtrình hay ứng dụng lớn thường chứa nhiều đốitượng khác nhau. Các đốitượng phần mềm tương tác và giao tiếp với nhau bằng cách gởi các thông điệp (message). Khi đốitượng A muốn đốitượng B thực hiện các phương thức của đốitượng B thì đốitượng A gởi một thông điệp tới đốitượng B. Ví dụ đốitượng người đi xe đạp muốn đốitượng xe đạp thực hiện phương thức chuyển đổi bánh răng của nó thì đốitượng người đi xe đạp cần phải gởi một thông điệp tới đốitượng xe đạp. Đôi khi đốitượng nhận cần thông tin nhiều hơn để biết chính xác thực hiện công việc gì. Ví dụ khi bạn chuyển bánh răng trên chiếc xe đạp của bạn thì b ạn phải chỉ rõ bánh răng nào mà bạn muốn chuyển. Các thông tin này được truyền kèm theo thông điệp và được gọi là các tham số (parameter). Chương 6: Lậptrìnhhướngđốitượng 83 Một thông điệp gồm có: Đốitượng nhận thông điệp Tên của phương thức thực hiện Các tham số mà phương thức cần Khái niệm 6.9 Một thông điệp (message) là một lời yêu cầu một hoạt động. Một thông điệp được truyền khi một đốitượng triệu gọi một hay nhiều phương thức của đốitượng khác để yêu cầu thông tin. Khi một đốitượng nhận được một thông điệp, nó thực hiện một phương thức tương ứng. Ví dụ đốitượng xe đạp nhận được thông điệp là chuyển đổi bánh răng nó sẽ thực hiện việc tìm kiếm phương thức chuyển đổi bánh răng tương ứng và thực hiện theo yêu cầu của thông điệp mà nó nhận được. 6.8. Tính bao gói (Encapsulation) Trong đốitượng xe đạp, giá trị của các thuộc tính được chuyển đổi bởi các phương thức. Phương thức changeGear() chuyển đổi giá trị của thuộc tính currentGear. Thuộc tính speed được chuyển đổi bởi phương thức changeGear() hoặc changRpm(). Trong OOP thì các thuộc tính là trung tâm, là hạt nhân của đối tượng. Các phương thức bao quanh và che giấu đi hạt nhân của đốitượng từ các đốitượng khác trong chương trình.Việc bao gói các thuộc tính c ủa một đốitượng bên trong sự che chở của các phương thức của nó được gọi là sự đóng gói (encapsulation) hay là đóng gói dữ liệu. Đặc tính đóng gói dữ liệu là ý tưởng của các nhà thiết các hệ thống hướngđối tượng. Tuy nhiên, việc áp dụng trong thực tế thì có thể không hoàn toàn như thế. Vì những lý do thực tế mà các đốitượngđôi khi cần phải phơi bày ra một vài thuộc tính này và che gi ấu đi một vài phương thức kia. Tùy thuộc vào các ngôn ngữ lậptrìnhhướngđốitượng khác nhau, chúng ta có các điều khiển các truy xuất dữ liệu khác nhau. Khái niệm 6.10 Đóng gói (encapsulation) là tiến trình che giấu việc thực thi chi tiết của m ột đối tượng. Một đốitượng có một giao diện chung cho các đốitượng khác sử dụng để giao tiếp với nó. Do đặc tính đóng gói mà các chi tiết như: các trạng thái Chương 6: Lậptrìnhhướngđốitượng 84 được lưu trữ như thế nào hay các hành động được thi công ra sao có thể được che giấu đi từ các đốitượng khác. Điều này có nghĩa là các chi tiết riêng của đốitượng có thể được chuyển đổi mà hoàn toàn không ảnh hưởng tới các đốitượng khác có liên hệ với nó. Ví dụ, một người đi xe đạp không cần biết chính xác cơ chế chuyển bánh răng trên xe đạp thực sự làm việc như thế nào nhưng vẫn có thể sử dụng nó. Điều này được gọi là che giấu thông tin. Khái niệm 6.11 Che giấu thông tin (information hiding) là việc ẩn đi các chi tiết của thiết kế hay thi công từ các đốitượng khác. 6.9. Tính thừa kế (Inheritance) Hệ thống hướngđốitượng cho phép các lớp được định nghĩa kế thừa từ các lớp khác. Ví dụ, lớp xe đạp leo núi và xe đạp đua là những lớp con (subclass) của lớp xe đạp. Như vậy ta có thể nói lớp xe đạp là lớp cha (superclass) của lớp xe đạp leo núi và xe đạp đua. Khái niệm 6.12 Thừa kế (inheritance) nghĩa là các hành động (phương thức) và các thuộc tính được định nghĩa trong một lớp có thể được thừa kế hoặc được sử dụng lại bởi lớp khác. Khái niệm 6.13 Lớp cha (superclass) là lớp có các thuộc tính hay hành động được thừa hưởng bởi một hay nhiều lớp khác. Lớp con (subclass) là lớp thừa hưởng một vài đặc tính chung của lớp cha và thêm vào những đặc tính riêng khác. Các lớp con thừa kế thuộc tính và hành động từ lớp cha của chúng. Ví dụ, một xe đạp leo núi không những có bánh răng, số vòng quay trên phút và tốc độ giống như mọi xe đạp khác mà còn có thêm một vài loại bánh răng vì thế mà nó cần thêm một thuộc tính là gearRange (loại bánh răng). Các lớp con có thể định nghĩa lại các phương thức được thừa kế để cung cấp các thi công riêng biệt cho các phương thức này. Ví dụ, một xe đạp leo núi s ẽ cần một phương thức đặc biệt để chuyển đổi bánh răng. Chương 6: Lậptrìnhhướngđốitượng 85