Networks Business Online Việt Nam & International VH2

Lập trình hướng đối tượng – Wikipedia tiếng Việt

Đăng ngày 06 November, 2022 bởi admin

Lập trình hướng đối tượng (tiếng Anh: Object-oriented programming, viết tắt: OOP) là một mẫu hình lập trình dựa trên khái niệm “công nghệ đối tượng”, mà trong đó, đối tượng chứa đựng các dữ liệu, trên các trường, thường được gọi là các thuộc tính; và mã nguồn, được tổ chức thành các phương thức. Phương thức giúp cho đối tượng có thể truy xuất và hiệu chỉnh các trường dữ liệu của đối tượng khác, mà đối tượng hiện tại có tương tác (đối tượng được hỗ trợ các phương thức “this” hoặc “self”). Trong lập trình hướng đối tượng, chương trình máy tính được thiết kế bằng cách tách nó ra khỏi phạm vi các đối tượng tương tác với nhau.[1][2] Ngôn ngữ lập trình hướng đối tượng khá đa dạng, phần lớn là các ngôn ngữ lập trình theo lớp, nghĩa là các đối tượng trong các ngôn ngữ này được xem như thực thể của một lớp, được dùng để định nghĩa một kiểu dữ liệu.

OOP được xem là giúp tăng hiệu suất, đơn giản hóa độ phức tạp khi bảo dưỡng cũng như lan rộng ra ứng dụng bằng cách được cho phép lập trình viên tập trung chuyên sâu vào những đối tượng ứng dụng ở bậc cao hơn. Ngoài ra, nhiều người còn cho rằng OOP dễ tiếp thu hơn cho những người mới học về lập trình hơn là những giải pháp trước đó. Một cách giản lược, đây là khái niệm và là một nỗ lực nhằm mục đích giảm nhẹ những thao tác viết mã cho người lập trình, được cho phép họ tạo ra những ứng dụng mà những yếu tố bên ngoài hoàn toàn có thể tương tác với những chương trình đó giống như là tương tác với những đối tượng vật lý .Những đối tượng trong một ngôn từ OOP là những phối hợp giữa mã và tài liệu mà chúng được nhìn nhận như thể một đơn vị chức năng duy nhất. Mỗi đối tượng có một tên riêng không liên quan gì đến nhau và toàn bộ những tham chiếu đến đối tượng đó được thực thi qua tên của nó. Như vậy, mỗi đối tượng có năng lực nhận vào những thông tin, giải quyết và xử lý tài liệu ( bên trong của nó ), và gửi ra hay vấn đáp đến những đối tượng khác hay đến môi trường tự nhiên .

Đa phần các ngôn ngữ lập trình thông dụng nhất hiện nay (như C++, Delphi, Java, Python etc.) là các ngôn ngữ lập trình đa mẫu hình và đều hỗ trợ lập trình hướng đối tượng ở nhiều mức độ khác nhau, thường được kết hợp với lập trình mệnh lệnh, lập trình thủ tục. Các ngôn ngữ lập trình hướng đối tượng đáng chú ý gồm có Java, C++, C#, Python, PHP, Ruby, Perl, Object Pascal, Objective-C, Dart, Swift, Scala, Common Lisp, và Smalltalk.

Các đặc thù cơ bản[sửa|sửa mã nguồn]

Đối tượng (object): Các dữ liệu và chỉ thị được kết hợp vào một đơn vị đầy đủ tạo nên một đối tượng. Đơn vị này tương đương với một chương trình con và vì thế các đối tượng sẽ được chia thành hai bộ phận chính: phần các phương thức (method) và phần các thuộc tính (attribute / Properties). Trong thực tế, các phương thức của đối tượng là các hàm và các thuộc tính của nó là các biến, các tham số hay hằng nội tại của một đối tượng (hay nói cách khác tập hợp các dữ liệu nội tại tạo thành thuộc tính của đối tượng). Các phương thức là phương tiện để sử dụng một đối tượng trong khi các thuộc tính sẽ mô tả đối tượng có những tính chất gì.
Các phương thức và các thuộc tính thường gắn chặt với thực tế các đặc tính và sử dụng của một đối tượng.
Trong thực tế, các đối tượng thường được trừu tượng hóa qua việc định nghĩa của các class).
Tập hợp các giá trị hiện có của các thuộc tính tạo nên trạng thái của một đối tượng.
Mỗi phương thức hay mỗi dữ liệu nội tại cùng với các tính chất được định nghĩa (bởi người lập trình) được xem là một đặc tính riêng của đối tượng. Nếu không có gì lầm lẫn thì tập hợp các đặc tính này gọi chung là đặc tính của đối tượng.) : Các tài liệu và thông tư được tích hợp vào một đơn vị chức năng khá đầy đủ tạo nên một đối tượng. Đơn vị này tương tự với một chương trình con và do đó những đối tượng sẽ được chia thành hai bộ phận chính : phần những ) và phần những ). Trong thực tiễn, cáccủa đối tượng là những hàm và cáccủa nó là những biến, những tham số hay hằng nội tại của một đối tượng ( hay nói cách khác tập hợp những tài liệu nội tại tạo thành thuộc tính của đối tượng ). Cáclà phương tiện đi lại để sử dụng một đối tượng trong khi cácsẽ diễn đạt đối tượng có những đặc thù gì. Các phương pháp và những thuộc tính thường gắn chặt với thực tiễn những đặc tính và sử dụng của một đối tượng. Trong thực tiễn, những đối tượng thường được trừu tượng hóa qua việc định nghĩa của những lớp ). Tập hợp những giá trị hiện có của những thuộc tính tạo nêncủa một đối tượng. Mỗihay mỗi tài liệu nội tại cùng với những đặc thù được định nghĩa ( bởi người lập trình ) được xem là mộtriêng của đối tượng. Nếu không có gì lầm lẫn thì tập hợp những đặc tính này gọi chung là đặc tính của đối tượng .Lập trình hướng đối tượng là một giải pháp lập trình có 4 tính chất chính sau :

  • Tính trừu tượng (abstraction): Đây là khả năng của chương trình bỏ qua hay không chú ý đến một số khía cạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết. Mỗi đối tượng phục vụ như là một “động tử” có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được các thao tác. Tính chất này thường được gọi là sự trừu tượng của dữ liệu.
    Tính trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể có một số đặc điểm chung cho nhiều đối tượng khác như là sự mở rộng của nó nhưng bản thân đối tượng ban đầu này có thể không có các biện pháp thi hành. Tính trừu tượng này thường được xác định trong khái niệm gọi là lớp trừu tượng hay lớp cơ sở trừu tượng.

  • Tính đóng gói (encapsulation) và che giấu thông tin (information hiding): Tính chất này không cho phép người sử dụng các đối tượng thay đổi trạng thái nội tại của một đối tượng. Chỉ có các phương thức nội tại của đối tượng cho phép thay đổi trạng thái của nó. Việc cho phép môi trường bên ngoài tác động lên các dữ liệu nội tại của một đối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã. Đây là tính chất đảm bảo sự toàn vẹn của đối tượng.

  • Tính đa hình (polymorphism): Thể hiện thông qua việc gửi các thông điệp (message). Việc gửi các thông điệp này có thể so sánh như việc gọi các hàm bên trong của một đối tượng. Các phương thức dùng trả lời cho một thông điệp sẽ tùy theo đối tượng mà thông điệp đó được gửi tới sẽ có phản ứng khác nhau. Người lập trình có thể định nghĩa một đặc tính (chẳng hạn thông qua tên của các phương thức) cho một loạt các đối tượng gần nhau nhưng khi thi hành thì dùng cùng một tên gọi mà sự thi hành của mỗi đối tượng sẽ tự động xảy ra tương ứng theo đặc tính của từng đối tượng mà không bị nhầm lẫn.

Ví dụ khi định nghĩa hai đối tượng “hinh_vuong” và “hinh_tron” thì có một phương thức chung là “chu_vi”. Khi gọi phương thức này thì nếu đối tượng là “hinh_vuong” nó sẽ tính theo công thức khác với khi đối tượng là “hinh_tron”.
  • Tính kế thừa (inheritance): Đặc tính này cho phép một đối tượng có thể có sẵn các đặc tính mà đối tượng khác đã có thông qua kế thừa. Điều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại. Tuy nhiên, không phải ngôn ngữ định hướng đối tượng nào cũng có tính chất này.

Một điểm mới về mẫu hình, về quan điểm[sửa|sửa mã nguồn]

OOP vẫn còn là một đề tài của nhiều tranh cãi về định nghĩa chuẩn xác hay về những nguyên tắc của nó .

Trong dạng tổng quát nhất, OOP được hiểu theo cách là một loại thực nghiệm viết chương trình văn bản được phân cấp ra thành nhiều mô đun (module), mà mỗi mô đun đóng vai như một lớp vỏ che đại diện cho mỗi kiểu dữ liệu.

Những khái niệm liên hệ đã được góp nhặt lại để tạo thành một khuôn khổ cho việc lập trình. Các triết lý đằng sau việc khuynh hướng đối tượng đã trở nên can đảm và mạnh mẽ để tạo thành một sự quy đổi mẫu hình trong ngành lập trình .Những mẫu hình khác như lập trình tính năng và lập trình thủ tục tập trung chuyên sâu hầu hết trên những hành vi, còn lập trình lô gíc lại tập trung chuyên sâu vào những chứng minh và khẳng định hài hòa và hợp lý để kích hoạt sự thực thi của mã chương trình .OOP đã tăng trưởng một cách độc lập từ việc điều tra và nghiên cứu về những ngôn từ khuynh hướng của mạng lưới hệ thống mô phỏng, đó là SIMULA 67, và từ việc nghiên cứu và điều tra những kiến trúc của mạng lưới hệ thống có độ đáng tin cậy cao, đó là những kiến trúc CPU và năng lực cơ bản của những hệ điều hành quản lý .Một công dụng rực rỡ của OOP là việc giải quyết và xử lý những kiểu con của những kiểu tài liệu .Dữ liệu của những đối tượng, một cách tổng quát, được yên cầu trong phong cách thiết kế để thỏa mãn nhu cầu những nhu yếu của người lập trình ( tức là những lớp ) .

Các kiểu dữ liệu bị giới hạn thêm các điều kiện mặc dù có cùng kiểu dữ liệu với loại không bị ràng buộc bởi các điều kiện đó, gọi là kiểu dữ liệu con. Cả hai loại kiểu dữ liệu này đều dựa vào và đều được điều tiết bởi các hành xử (tức là các phương thức) đã được định nghĩa. Các điều kiện hay yêu cầu này có thể được khai báo rõ ràng hay được giả thiết công nhận ngầm bởi người lập trình. Các ngôn ngữ định hướng đối tượng cung cấp nhiều cơ chế cho việc khẳng định rằng các giả thiết đó có tính địa phương cho một phần của chương trình. Các cơ chế này này có thể đọc thấy trong các tài liệu về các chương trình định hướng đối tượng.

OOP tự nó đã đang được dùng để khuyến mại cho nhiều mẫu sản phẩm và dịch vụ. Các định nghĩa hiện tại và ích lợi của những đặc tính của OOP thường được màu mè hóa bởi những mục tiêu của thị trường thương mại. Tương tự, nhiều ngôn từ lập trình có những quan điểm đặc biệt quan trọng về OOP mà nó ít tổng quát trong một số ít góc nhìn .Các định nghĩa đúng mực của OOP sẽ có sự độc lạ tùy theo quan điểm. Đặc biệt, những ngôn từ có kiểu tĩnh thường có cái nhìn hơi khác với những ngôn từ có kiểu động về OOP, nguyên do là vì chúng tập trung chuyên sâu trên thời hạn dịch hay tập trung chuyên sâu vào thời hạn thi hành của những chương trình .OOP thường được xem là một mẫu hình hơn là một kiểu hay một phong thái lập trình nhằm mục đích nhấn mạnh vấn đề vào điểm quan trọng là OOP hoàn toàn có thể đổi khác phương pháp tăng trưởng ứng dụng bằng cách đổi khác tư duy của những người lập trình và những kỹ sư ứng dụng về ứng dụng .Mẫu hình của OOP hầu hết không phải là kiểu lập trình mà là kiểu phong cách thiết kế. Một mạng lưới hệ thống được phong cách thiết kế bởi định nghĩa của những đối tượng mà những đối tượng này sẽ sống sót trong mạng lưới hệ thống đó, trong mã mà hiện thao tác chưa thích hợp với đối tượng, hay là trong người dùng đối tượng do tác động ảnh hưởng của đặc thù đóng của đối tượng .Cũng nên quan tâm rằng có sự độc lạ giữa mẫu hình xu thế đối tượng và kim chỉ nan những mạng lưới hệ thống. OOP tập trung chuyên sâu trên những đối tượng như thể những đơn vị chức năng của một mạng lưới hệ thống, trong khi đó, triết lý những mạng lưới hệ thống lại tự nó chỉ tập trung chuyên sâu vào mạng lưới hệ thống. Như là phần trung gian, người ta hoàn toàn có thể tìm thấy những dạng thức phong cách thiết kế ứng dụng hay những kỹ thuật khác dùng những lớp và những đối tượng như thể những viên gạch trong những thành phần lớn hơn. Những thành phần này hoàn toàn có thể được xem như là bước trung gian từ mẫu hình khuynh hướng đối tượng đến những quy mô ” khuynh hướng sống thực ” hơn của triết lý những mạng lưới hệ thống .

Các mẫu hình xu thế đối tượng con[sửa|sửa mã nguồn]

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

OOP với những ngôn từ cấu trúc[sửa|sửa mã nguồn]

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

Các quy mô nguyên mẫu cơ bản[sửa|sửa mã nguồn]

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 ví 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 ví 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 phần trong OOP mà nhiều người sẽ định nghĩa những đối tượng như thể có đặc thù đóng mà việc san sẻ tài liệu xảy ra bởi sự phân lớp và bởi tính thừa kế. Mặc dù vậy, khái niệm tổng quát hơn ” san sẻ ứng xử ” được công nhận như thể những kỹ thuật thay thế sửa chữa ( như trường hợp nguyên mẫu ) .( Xem thêm Lập trình nguyên mẫu cơ bản )

Mô hình đối tượng cơ bản[sửa|sửa mã nguồn]

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

Ví 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.

Định nghĩa chuẩn[sửa|sửa mã nguồn]

Đã có nhiều nỗ lực để chuẩn hóa những khái niệm được dùng trong lập trình khuynh hướng đối tượng. Những khái niệm và những cấu trúc sau đây đã được suy diễn như thể những khái niệm của OOP :
Các nỗ lực tìm một định nghĩa thống nhất hay kim chỉ nan đứng sau những đối tượng đã không mấy thành công xuất sắc và thường bị phân hóa nặng. Ví dụ, 1 số ít định nghĩa thì tập trung chuyên sâu lên những hoạt động giải trí niềm tin trong khi số khác lại ngả về việc cấu trúc chương trình. Một trong những định nghĩa đơn thuần hơn cho rằng OOP là một hành xử của việc sử dụng những biểu đồ cấu trúc tài liệu hay sử dụng những dãy mà hoàn toàn có thể chứa những hàm và những con trỏ sang những biểu đồ khác. Sự thừa kế hoàn toàn có thể triển khai bởi nhân bản những biểu đồ này ( mà đôi lúc gọi là ” nguyên bản hóa ” ) ,

OOP trong văn lệnh[sửa|sửa mã nguồn]

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

Ví dụ mã nguồn trong C + +[sửa|sửa mã nguồn]

OOP.gif
Lưu ý:

  • Ví 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 thực 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 ví 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 boygirl.
  • Sự hỗ trợ các loại đặc tính cho OOP trong C++ rất phong phú. Ví dụ chỉ nhằm minh họa các tính chất cơ bản của OOP.

Một số khái niệm cần biết trong ngôn từ OOP văn minh[sửa|sửa mã nguồn]

Hiện nay những ngôn từ OOP phổ cập nhất đều tập trung chuyên sâu theo giải pháp phân lớp trong đó có C + +, Java, C # và Visual Basic. NET. Ngôn ngữ OOP hay còn gọi là ngôn từ lập trình hướng đối tượng, là một chiêu thức phong cách thiết kế và tăng trưởng ứng dụng dựa trên kiến trúc lớp và đối tượng. Sau đây là 1 số ít khái niệm mà những ngôn từ này thường dùng tới
Một lớp hoàn toàn có thể được hiểu là khuôn mẫu để tạo ra những đối tượng. Trong một lớp, người ta thường dùng những biến để diễn đạt những thuộc tính và những hàm để diễn đạt những phương pháp của đối tượng. Khi đã định nghĩa được lớp, ta hoàn toàn có thể tạo ra những đối tượng từ lớp này. Để việc sử dụng được thuận tiện, trải qua mạng lưới hệ thống hàm tạo ( constructor ), người ta dùng lớp như một kiểu tài liệu để tạo ra những đối tượng. cc

Lớp con (subclass)

[sửa|sửa mã nguồn]

Lớp con là một lớp thông thường nhưng có thêm tính chất kế thừa một phần hay toàn bộ các đặc tính của một lớp khác. Lớp chia sẻ sự kế thừa gọi là lớp cha (parent class).
ll

Lớp trừu tượng hay lớp cơ sở trừu tượng (abstract class)

[sửa|sửa mã nguồn]

Lớp trừu tượng là một lớp mà nó không hề thực thể hóa thành một đối tượng thực dụng được. Lớp này được phong cách thiết kế nhằm mục đích tạo ra một lớp có những đặc tính tổng quát nhưng bản thân lớp đó chưa có ý nghĩa ( hay không đủ ý nghĩa ) để hoàn toàn có thể triển khai viết mã cho việc thực thể hóa. ( xem Ví dụ )

Ví dụ: Lớp “hinh” được định nghĩa không có dữ liệu nội tại và chỉ có các phương thức (hàm nội tại) “tinh_chu_vi”, “tinh_dien_tich”. Nhưng vì lớp hình này chưa xác định được đầy đủ các đặc tính của nó (cụ thể các biến nội tại là tọa độ các đỉnh nếu là đa giác, là đường bán kính và toạ độ tâm nếu là hình tròn,…) nên nó chỉ có thể được viết thành một lớp trừu tượng. Sau đó, người lập trình có thể tạo ra các lớp con chẳng hạn như là lớp “tam_giac”, lớp “hinh_tron”, lớp “tu_giac”,…. Và trong các lớp con này người viết mã sẽ cung cấp các dữ liệu nội tại (như là biến nội tại r làm bán kính và hằng số nội tại Pi cho lớp “hinh_tron” và sau đó viết mã cụ thể cho các phương thức “tinh_chu_vi” và “tinh_dien_tich”).

Phương thức (method)

[sửa|sửa mã nguồn]

Phương thức của một lớp thường được dùng để diễn đạt những hành vi của đối tượng ( hoặc của lớp ). Ví dụ như đối tượng thuộc lớp điện thoại thông minh có những hành vi sau : Đổ chuông, chuyển tín hiệu từ sóng sang dạng nghe được, chuyển tín hiệu giọng nói sang dạng chuẩn, chuyển tín hiệu lên tổng đài. v.v. Khi phong cách thiết kế, người ta hoàn toàn có thể dùng những phương pháp để miêu tả và thực thi những hành vi của đối tượng. Mỗi phương pháp thường được định nghĩa là một hàm, những thao tác để thực thi hành vi đó được viết tại nội dung của hàm. Khi triển khai hành vi này, đối tượng hoàn toàn có thể phải thực thi những hành vi khác. Ví dụ như điện thoại cảm ứng phải chuyển tín hiệu giọng nói sang dạng chuẩn trước khi chuyển lên tổng đài. Cho nên một phương pháp trong một lớp hoàn toàn có thể sử dụng phương pháp khác trong quy trình triển khai hành vi của mình .Người ta còn định nghĩa thêm vài loại phương pháp đặc biệt quan trọng :

  • Hàm tạo (constructor) là hàm được dùng để tạo ra một đối tượng, cài đặt các giá trị ban đầu cho các thuộc tính của đối tượng đó.
  • Hàm hủy (destructor) là hàm dùng vào việc làm sạch bộ nhớ đã dùng để lưu đối tượng và hủy bỏ tên của một đối tượng sau khi đã dùng xong, trong đó có thể bao gồm cả việc xóa các con trỏ nội tại và trả về các phần bộ nhớ mà đối tượng đã dùng.

Nhiều lớp thư viện có sẵn hàm tạo mặc định ( thường thì không có tham số ) và hàm hủy .

Thuộc tính (attribute)

[sửa|sửa mã nguồn]

Thuộc tính của một lớp bao gồm các biến, các hằng, hay tham số nội tại của lớp đó. Ở đây, vai trò quan trọng nhất của các thuộc tính là các biến vì chúng sẽ có thể bị thay đổi trong suốt quá trình hoạt động của một đối tượng. Các thuộc tính có thể được xác định kiểu và kiểu của chúng có thể là các kiểu dữ liệu cổ điển hay đó là một lớp đã định nghĩa từ trước. Như đã ghi, khi một lớp đã được thực thể hoá thành đối tượng cụ thể thì tập hợp các giá trị của các biến nội tại làm thành trạng thái của đối tượng. Giống như trường hợp của phương thức, tùy theo người viết mã, biến nội tại có thể chỉ được dùng bên trong các phương thức của chính lớp đó, có thể cho phép các câu lệnh bên ngoài lớp, hay chỉ cho phép các lớp có quan hệ đặc biệt như là quan hệ lớp con, (và quan hệ bạn bè (friend) trong C++) được phép dùng tới nó (hay thay đổi giá trị của nó). Mỗi thuộc tính của một lớp còn được gọi là thành viên dữ liệu của lớp đó.

Quan hệ giữa lớp và đối tượng[sửa|sửa mã nguồn]

Lớp trong ý niệm thường thì là cách phân loại những thực thể dựa trên những đặc thù chung của những thực thể đó. Do đó lớp là khái niệm mang tính trừu tượng hóa rất cao. Ví dụ như lớp ” người ” dùng để chỉ những thực thể sống trên Trái Đất có những thuộc tính : có hai chân, hai bàn tay khôn khéo, có tư duy, ngôn từ v.v và có phương pháp : tiếp xúc bằng ngôn từ, tư duy, đi, đứng bằng hai chân … Khi đó hai người đơn cử ông A, ông B là những đối tượng thuộc lớp người. Trong ngôn từ lập trình, ta cũng hiểu khái niệm lớp tương tự như, cho nên vì thế ta có quy trình ” Thực thể hóa ” sau, tạo một đối tượng thuộc một lớp đã được ta định nghĩa ( phân loại ) .

Thực thể (instance)

[sửa|sửa mã nguồn]

Thực thể hóa (instantiate) là quá trình khai báo để có một tên (có thể được xem như là một biến) trở thành một đối tượng từ một lớp nào đó.

Một lớp sau khi được tiến hành thực thể hóa để có một đối tượng cụ thể gọi là một thực thể. Hay nói ngược lại một thực thể là một đối tượng riêng lẻ của một lớp đã định trước. Như các biến thông thường, hai thực thể của cùng một lớp có thể có trạng thái nội tại khác nhau (xác định bởi các giá trị hiện có của các biến nội tại) và do đó hoàn toàn độc lập nhau nếu không có yêu cầu gì đặc biệt từ người lập trình. ” Thực thể hóa: gần giống như cá nhân hóa. Một lớp khi được ” cá nhân hóa” sẽ thành một đối tượng cụ thể.

Công cộng (public)

[sửa|sửa mã nguồn]

Công cộng là một đặc thù được dùng để gán cho những phương pháp, những biến nội tại, hay những lớp mà khi khai báo thì người lập trình đã được cho phép những câu lệnh bên ngoài cũng như những đối tượng khác được phép dùng đến nó .

Ví dụ: Trong C++ khai báo public: int my_var; thì biến my_var có hai tính chất là tính công cộng và là một integer cả hai tính chất này hợp thành đặc tính của biến my_var khiến nó có thể được sử dụng hay thay đổi giá trị của nó (bởi các câu lệnh) ở mọi nơi bên ngoài lẫn bên trong của lớp.

Riêng tư (private)

[sửa|sửa mã nguồn]

Riêng tư là sự bộc lộ đặc thù đóng mạnh nhất ( của một đặc tính hay một lớp ). Khi dùng đặc thù này gán cho một biến, một phương pháp thì biến hay phương pháp đó chỉ hoàn toàn có thể được sử dụng bên trong của lớp mà chúng được định nghĩa. Mọi nỗ lực dùng trực tiếp đến chúng từ bên ngoài qua những câu lệnh hay từ những lớp con sẽ bị phủ nhận hay bị lỗi .

Bảo tồn (protected)

[sửa|sửa mã nguồn]

Tùy theo ngôn từ, sẽ có vài điểm nhỏ khác nhau về cách hiểu đặc thù này. Nhìn chung đây là đặc thù mà khi dùng để vận dụng cho những phương pháp, những biến nội tại, hay những lớp thì chỉ có trong nội bộ của lớp đó hay những lớp con của nó ( hay trong nội bộ một gói như trong Java ) được phép gọi đến hay dùng đến những chiêu thức, biến hay lớp đó .So với đặc thù riêng tư thì tính bảo tồn thoáng rộng hơn về nghĩa san sẻ tài liệu hay công dụng. Nó được cho phép 1 số ít trường hợp được dùng tới những đặc tính của một lớp ( từ một lớp con ví dụ điển hình ) .

Lưu ý: Các tính chất công cộng, riêng tư và bảo tồn đôi khi còn được dùng để chỉ thị cho một lớp con cách thức kế thừa một lớp cha như trong C++.

Đa kế thừa (multiple inheritance)

[sửa|sửa mã nguồn]

Đây là một đặc thù được cho phép một lớp con có năng lực thừa kế trực tiếp cùng lúc nhiều lớp khác .Vài điểm cần chú ý quan tâm khi viết mã dùng đặc thù đa thừa kế :

  • Khi muốn có một sự kế thừa từ nhiều lớp cha thì các lớp này cần phải độc lập và đặc biệt tên của các dữ liệu hay hàm cho phép kế thừa phải có tên khác nhau để tránh lỗi "ambiguity". Bởi vì lúc đó trình dịch sẽ không thể xác định được là lớp con sẽ thừa kế tên nào của các lớp cha.
  • Nhiều ngôn ngữ, ví dụ như Java, không có đa kế thừa, nhưng chúng có khái niệm giao diện Interface. Với Interface, ta có thể có hầu hết các lợi ích mà đa kế thừa mang lại.

Ngoài những khái niệm trên, tùy theo ngôn từ, hoàn toàn có thể sẽ có những công dụng OOP riêng không liên quan gì đến nhau được cấp thêm vào .
Khái niệm về những đối tượng và thực thể trong khoa học máy tính được nhiều người biết đến từ mạng lưới hệ thống PDP-1 của MIT. Đây có lẽ rằng là Ví dụ sớm nhất của kiến trúc cơ sở có năng lực thực. Một vật chứng sớm khác của OOP được tìm thấy qua Sketchpad viết bởi Ivan Sutherland trong năm 1963, tuy nhiên, đây chỉ là một ứng dụng chứ không là một mẫu hình lập trình .Ngôn ngữ lập trình hướng đối tượng tiên phong là Simula, ngôn từ này được phong cách thiết kế để dùng trong những việc mô phỏng, được phát minh sáng tạo bởi Ole-Johan Dahl và Kristen Nygaard thuộc Trung tâm Máy tính Na Uy ở Oslo. Các kỹ năng và kiến thức trong ngôn từ này sau đó đã được dùng trong nhiều ngôn từ khác, mở màn từ Lisp và Pascal cho đến họ ngôn từ Smalltalk .Lập trình hướng đối tượng đã được tăng trưởng như thể giải pháp lập trình chủ yếu từ giữa thập niên 1990 nguyên do đáng kể là việc tác động ảnh hưởng của C + +, một ngôn từ lan rộng ra của C. Địa vị thống trị của OOP đã được củng cố vững chãi bởi sự phổ cập của những GUI dành cho ngôn từ lập trình hướng đối tượng ngày càng tiện nghi. Một Ví dụ về quan hệ thân thiện của thư viện GUI động và ngôn từ OOP là ứng dụng Cocoa, nó là khung cơ sở của Mac OS X dược viết bằng Objective C ( Objective C là một loại ngôn từ hướng đối tượng lan rộng ra của C với việc thông báo động ). Công cụ cho OOP cũng được nâng cao phần ” lập trình điều khiển và tinh chỉnh theo sự kiện ” ( mặc dầu khái niệm này không chỉ dành cho OOP ) .Tại Zürich, Niklaus Wirth và những tập sự đã theo dõi những đề tài như là tài liệu trừu tượng và lập trình mô đun. Modula-2 gồm có cả hai đặc tính đó. Thiết kế liền tiếp theo là Oberon gồm có sự tiếp cận riêng không liên quan gì đến nhau với việc xu thế đối tượng, những lớp, … Sự tiếp cận này không như Smalltalk, và cũng khác hẳn C + + .Các tính năng của hướng đối tượng cũng đã đang được thêm vào nhiều ngôn từ trong suốt thời hạn đó kể cả Ada, BASIC, Lisp, Fortran, Pascal và nhiều nữa. Việc cộng thêm những công dụng đó cho những ngôn từ mà được trước đó không chủ định phong cách thiết kế cho chúng ngay từ đầu cũng thường dẫn tới nhiều khó khăn vất vả trong năng lực thích hợp ( với mã nguồn viết cho những phiên bản cũ ) và năng lực bảo dưỡng mã. Điển hình của trường hợp này là Pascal và Visual Basic. Các ngôn từ thuần túy hướng đối tượng, ở phía khác, lại thiếu những đặc tính mà nhiều người lập trình phụ thuộc vào vào. Để bắc cầu cho khoảng trống này, nhiều nỗ lực đã được thực thi để tạo ra những ngôn từ đặt cơ sở trên những giải pháp hướng đối tượng nhưng lại được cho phép dùng nhiều đặc tính lập trình cấu trúc theo những phương cách ” bảo đảm an toàn “. Ngôn ngữ Eiffel của Bertrand Meyer đã sớm thành công xuất sắc với những tiềm năng này .Trong thập niên đã qua, Java được dùng thoáng đãng một phần là do sự tương tự như với C và C + +, nhưng có lẽ rằng do phần khác quan trọng hơn là việc lắp ráp sử dụng máy ảo mà chủ ý là thực thi cùng một mã nguồn cho nhiều nền tảng khác nhau. . NET của Microsoft cũng mở màn với những chủ ý tương tự như và cộng thêm việc tương hỗ nhiều ngôn từ hay những sự biến thể của những ngôn từ cũ ( như trường hợp C # và Visual Basic ) .Gần đây, 1 số ít ngôn từ Open với công dụng chính là khuynh hướng đối tượng nhưng lại thích hợp được với chiêu thức thủ tục như là Python và Ruby. Bên cạnh Java, C # và Visual Basic. NET là hai ngôn từ OOP quan trọng hiện tại phong cách thiết kế bởi Microsoft .Giống như lập trình thủ tục đã dẫn tới việc tinh lọc những kỹ thuật như thể lập trình cấu trúc, ứng dụng hướng đối tượng tân tiến phong cách thiết kế những giải pháp gồm có những sự tinh lọc. Chẳng hạn như thể việc ứng dụng những dạng thức phong cách thiết kế, phong cách thiết kế bởi hợp đồng và những ngôn từ quy mô trong đó có UML .

Các ngôn từ[sửa|sửa mã nguồn]

Bài chính: Ngôn ngữ lập trình hướng đối tượng

Các bài liên hệ[sửa|sửa mã nguồn]

  1. ^

    .

    | last = Kindler | first = E.

    | last2 = Krivy | first2 = I.

    | title = Object-Oriented Simulation of systems with sophisticated control

    | publisher = International Journal of General Systems

    | year = 2011 | pages = 313–343}}

  2. ^ Lewis, John; Loftus, William (2008). Java Software Solutions Foundations of Programming Design 6th ed. Pearson Education Inc. ISBN 0-321-53205-8., section 1.6 “Object-Oriented Programming”, section 1.6 ” Object-Oriented Programming “

Liên kết ngoài[sửa|sửa mã nguồn]

Các phê phán[sửa|sửa mã nguồn]

Source: https://vh2.com.vn
Category : Tin Học