25/05/2018, 08:21

Các mẫu hình định hướng đối tượng con

Có nhiều phong cách lập trình hướng đối tượng. Sự khác nhau giữa các phong cách này là tùy theo việc các ngôn ngữ lập trình chú trọng vào khía cạnh nào của sự thuận lợi của định hướng đối tượng và vào việc kết hợp các cấu trúc trong các phương cách khác ...

Có nhiều phong cách lập trình hướng đối tượng. Sự khác nhau giữa các phong cách này là tùy theo việc các ngôn ngữ lập trình chú trọng vào khía cạnh nào của sự thuận lợi của định hướng đối tượng và vào việc kết hợp các cấu trúc trong các phương cách khác nhau.

Trong các ngôn ngữ cấu trúc, OOP thường xuất hiện như là một dạng mà ở đó các kiểu dữ liệu được mở rộng để hành xử giống như là một kiểu của một đối tượng trong OOP, hoàn toàn tương tự cho một kiểu dữ liệu trừu tượng với sự mở rộng như là sự kế thừa. Mỗi phương pháp thực ra là một chương trình con mà, một cách cú pháp, giới hạn nội trong một lớp.

Khác với cách sử dụng lớp, nguyên mẫu là một mô hình khác ít được biết đến hơn, nó có ý nghĩa đạt tới việc chia sẻ ứng xử theo định hướng đối tượng. Sau khi đối tượng được định nghĩa, một đối tượng khác tương tự sẽ được định nghĩa từ đối tượng ban đầu. Ngôn ngữ nguyên mẫu cơ bản được biết đến nhiều nhất là JavaScript mà đây là một sự thiết lập của ECMAScript. Self, một ngôn ngữ lập trình được phát triển bởi Sun Microsystems cũng là một thí dụ của ngôn ngữ dùng nguyên mẫu cho việc chia sẻ ứng xử chứ không dùng sự phân lớp. NewtonScript, Act1, Io và Delegation là các thí dụ khác. Đặc biệt, Hybrid và Exemplars sử dụng cả hai mô hình nguyên mẫu và phân lớp. Trong các hệ thống nguyên mẫu, các đối tượng tự chúng là các khuôn thức (template), trong khi các hệ thống phân lớp dùng các lớp như là các khuôn thức cho các đối tượng.

Các tiếp cận kiểu phân lớp thì chiếm đa số trong OOP mà nhiều người sẽ định nghĩa các đối tượng như là có tính chất đóng mà việc chia sẻ dữ liệu xảy ra bởi sự phân lớp và bởi tính kế thừa. Mặc dù vậy, khái niệm tổng quát hơn "chia sẻ ứng xử" được công nhận như là các kỹ thuật thay thế (như trường hợp nguyên mẫu).

Lập trình hướng đối tượng cơ bản là trung tâm về việc tạo thành của các đối tượng và các tương tác của chúng, nhưng có thể sẽ thiếu đi một số chức năng quan trọng của mẫu hình định hướng đối tượng lớp cơ bản như là tính kế thừa. Những hệ thống đối tượng cơ bản như vậy thường không được xem như là định hướng đối tượng vì tính kế thừa một cách điển hình là một yếu tố cốt lõi của OOP.

Thí dụ của trường hợp này là ngôn ngữ Visual Basic với các phiên bản 6.0 hay nhỏ hơn.

Đã có nhiều nỗ lực để chuẩn hóa các khái niệm được dùng trong lập trình định hướng đối tượng. Những khái niệm và các kết cấu sau đây đã được suy diễn như là các khái niệm của OOP:

  • Các kiểu dữ liệu đồng đại số
  • Các lượng tồn tại và các mô đun
  • Đệ qui
  • Các bản và việc mở rộng bản
  • Đa hình biên F

Các nỗ lực tìm một định nghĩa thống nhất hay lý thuyết đứng sau các đối tượng đã không mấy thành công và thường bị phân hóa nặng. Thí dụ, một số định nghĩa thì tập trung lên các hoạt động tinh thần trong khi số khác lại ngả về việc cấu trúc chương trình. Một trong các định nghĩa đơn giản hơn cho rằng OOP là một hành xử của việc sử dụng các biểu đồ cấu trúc dữ liệu hay sử dụng các dãy mà có thể chứa các hàm và các con trỏ sang các biểu đồ khác. Sự kế thừa có thể tiến hành bởi nhân bản các biểu đồ này (mà đôi khi gọi là "nguyên bản hóa"),

Trong những năm gần đây, lập trình đối tượng cơ bản đã đặc biệt trở nên phổ biến trong các ngôn ngữ lập trình văn lệnh vì chúng có tính trừu tượng, tính đóng, khả năng tái sử dụng, và dễ sử dụng (trong khi khả năng kế thừa trong các ngôn ngữ này vẫn còn là các câu hỏi chưa có câu trả lời). Smalltalk có thể là ngôn ngữ đầu tiên có kiểu như trên, Python và Ruby là các ngôn ngữ tương đối mới và được xây dựng từ đầu với ý tưởng OOP, trong khi đó ngôn ngữ văn lệnh Perl đã đang được từ từ thêm vào các chức năng mới về định hướng đối tượng kể từ phiên bản 5. Khả năng của các đối tượng để thể hiện "thế giới thực" là một lý do cho sự phổ biến của JavaScript và ECMAScript, mà được bàn cãi là thích hợp để đại diện cho DOM của các hồ sơ HTML và XML trên Internet.

  • Thí dụ trên được viết trong C++ có thể dùng bất kì trình dịch nào để dịch thẳng ra tập tin khả thi. Cụ thể là dùng Borland C++ cho Windows hay dùng g++ cho Linux.
  • Các dòng màu đen là mã nguồn, các dòng màu khác là các dòng giải thích ý nghĩa sử dụng của OOP.
  • Đòi hỏi người đọc biết ít nhiều cách dùng về ngôn ngữ lập trình và trình dịch.
  • Bản thân các lớp khi khai báo vẫn có tính trừu tượng. Nghĩa là, nó không sử dụng trực tiếp được (mà chỉ có thể xem là các kiểu dữ liệu). Chỉ khi nào người dùng thực hiện động tác thực thể hóa (instantiate) thì lớp này mới khởi động và tạo thành một đối tượng thực. Trong thí dụ này thì câu lệnh Inherit1 boy; và câu lệnh Inherit2 girl; là hai câu lệnh để thực thể hóa thành hai đối tượng boy và girl.
  • Sự hỗ trợ các loại đặc tính cho OOP trong C++ rất phong phú. Thí dụ chỉ nhằm minh họa các tính chất cơ bản của OOP.
0