Trong thời đại CNTT phát triển như hiện nay, thì các nhà lập trình luôn phải suy nghĩ xem làm thế nào để tạo ra những chương trình hay, tiện ích...Và một trong những thứ hỗ trợ người lập trình là ngôn ngữ lập trình. Có một số phương pháp lập trình truyền thống như lập trình tuyến tính, lập trình cấu trúc...Với lập trình tuyến tính thì một số ứng dụng phức tạp không thể thực hiện được. Trong khi đó với lập trình cấu trúc, chúng ta không quản lý được sự thay đổi dữ liệu khi có nhiều chương trình cùng sử dụng một biến chung, không tiết kiệm được tài nguyên...Để khắc phục một số hạn chế trên, người ta xây dựng một số mô hình lập trình tiên tiến hơn như: Lập trình hàm, lập trình logic, lập trình trực quan, lập trình tương tranh, lập trình phân tán, lập trình hướng đối tượng.... Trong bài báo cáo này, nhóm học viên đi vào nghiên cứu mô hình lập trình hướng đối tượng trong đó có các nội dung cơ bản gồm: Tổng quan về lập trình hướng đối tượng; một số tính chất đặc trưng của lập trình hướng đối tượng… Với thời lượng quy định của một báo cáo môn học, lượng nội dung kiến thức sẽ không đủ truyền tải hết trong báo cáo. Các nội dung được nêu trong báo cáo chỉ là các nội dung trọng tâm nhất của mô hình lập trình hướng đối tượng.
Trang 1MỤC LỤC
PHẦN I: MỞ ĐẦU 3
PHẦN II MÔ HÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 4
I GIỚI THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 4
II NHỮNG KHÁI NIỆM CƠ BẢN VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 5
2.1 Đối tượng 5
2.1 Lớp (class) 5
2.2 Lớp con (subclass) 6
2.3 Lớp trừu tượng hay lớp cơ sở trừu tượng (abstract class) 6
2.4 Phương Thức (method) 7
2.5 Thuộc tính (attribute) 7
2.6 Thực thể (instance) 8
2.7 Công cộng (public) 8
2.8 Riêng tư (private) 8
2.9 Bảo tồn (protected) 9
2.10 Đa kế thừa (muliple inheritance) 9
III CÁC TÍNH CHẤT CƠ BẢN CỦA LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 9
3.1 Tính kế thừa 10
3.2 Tính đóng gói (encapsulation) và che dấu thông tin (information hiding) 11
3.3 Tính đa hình (polymorphism) 12
IV CÁC NGUYÊN LÝ CỦA THIẾT KẾ HƯỚNG ĐỐI TƯỢNG 13
4.1 Single Responsibility Principle (SRP) 13
4.2 Open-Closed Principle(OCP) 13
4.3 Liskov Substitution Principle (LSP) 14
4.4 Interface Segregation Principle (ISP) 14
4.5 Dependency Injection or Inversion Principle (DIP) 14
4.6 DRY (Don’t repeat yourself) 14
4.7 Encapsulate What Changes 15
4.8 Favor Composition over Inheritance 15
4.9 Programming for Interface not Implementation 16
4.10 Delegation principle 16
PHẦN III CÁC NGÔN NGỮ VÀ VÀI ỨNG DỤNG CỦA OOP 17
I CÁC NGÔN NGỮ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 17
II MỘT SỐ ỨNG DỤNG TIÊU BIỂU 17
Trang 2PHẦN IV: ỨNG DỤNG QUẢN LÝ THƯ VIỆN MÔ HÌNH 3 LAYER 18
I KHÁI QUÁT VỀ ỨNG DỤNG 18
II MÔ HÌNH CSDL CỦA CHƯƠNG TRÌNH 18
III CÁC FORM CHỨC NĂNG 19
3.1 Chương trình chính 19
3.2 Quản lý sách 19
3.3 Quản lý độc giả 20
3.4 Quản lý mượn – trả sách 20
3.5 Quản lý nhân viên thư viện 21
PHẦN IV KẾT LUẬN 22
TÀI LIỆU THAM KHẢO 23
Trang 3PHẦN I: MỞ ĐẦU
Trong thời đại CNTT phát triển như hiện nay, thì các nhà lập trình luônphải suy nghĩ xem làm thế nào để tạo ra những chương trình hay, tiện ích Vàmột trong những thứ hỗ trợ người lập trình là ngôn ngữ lập trình Có một sốphương pháp lập trình truyền thống như lập trình tuyến tính, lập trình cấutrúc Với lập trình tuyến tính thì một số ứng dụng phức tạp không thể thựchiện được Trong khi đó với lập trình cấu trúc, chúng ta không quản lý được
sự thay đổi dữ liệu khi có nhiều chương trình cùng sử dụng một biến chung,không tiết kiệm được tài nguyên Để khắc phục một số hạn chế trên, người taxây dựng một số mô hình lập trình tiên tiến hơn như: Lập trình hàm, lập trìnhlogic, lập trình trực quan, lập trình tương tranh, lập trình phân tán, lập trìnhhướng đối tượng
Trong bài báo cáo này, nhóm học viên đi vào nghiên cứu mô hình lậptrình hướng đối tượng trong đó có các nội dung cơ bản gồm: Tổng quan vềlập trình hướng đối tượng; một số tính chất đặc trưng của lập trình hướng đốitượng…
Với thời lượng quy định của một báo cáo môn học, lượng nội dungkiến thức sẽ không đủ truyền tải hết trong báo cáo Các nội dung được nêutrong báo cáo chỉ là các nội dung trọng tâm nhất của mô hình lập trình hướngđối tượng
Trang 4PHẦN II MÔ HÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
I GIỚI THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Lập trình hướng đối tượng (Object Oriented Programming - gọi tắt là
OOP) hay chi tiết hơn là Lập trình định hướng đối tượng, chính là phương
pháp lập trình lấy đối tượng làm nền tảng để xây dựng thuật giải, xây dựngchương trình Thực chất đây không phải là một phương pháp mới mà là mộtcách nhìn mới trong việc lập trình Để phân biệt, với phương pháp lập trìnhtheo kiểu cấu trúc mà chúng ta quen thuộc trước đây, hay còn gọi là phươngpháp lập trình hướng thủ tục (Procedure-Oriented Programming), người lậptrình phân tích một nhiệm vụ lớn thành nhiều công việc nhỏ hơn, sau đó dầndần chi tiết, cụ thể hoá để được các vấn đề đơn giản, để tìm ra cách giải quyếtvấn đề dưới dạng những thuật giải cụ thể rõ ràng qua đó dễ dàng minh hoạbằng ngôn ngữ giải thuật (hay còn gọi các thuật giải này là các chương trìnhcon) Cách thức phân tích và thiết kế như vậy chúng ta gọi là nguyên lý lập
trình từ trên xuống (top-down), để thể hiện quá trình suy diễn từ cái chung
cho đến cái cụ thể
Khái niệm hướng đối tượng được xây dựng trên nền tảng của khái niệmlập trình có cấu trúc và sự trừu tượng hóa dữ liệu Sự thay đổi căn bản ở chỗ,một chương trình hướng đối tượng được thiết kế xoay quanh dữ liệu màchúng ta có thể làm việc trên đó, hơn là theo bản thân chức năng của chươngtrình Điều này hoàn toàn tự nhiên một khi chúng ta hiểu rằng mục tiêu củachương trình là xử lý dữ liệu Suy cho cùng, công việc mà máy tính thực hiệnvẫn thường được gọi là xử lý dữ liệu Dữ liệu và thao tác liên kết với nhau ởmột mức cơ bản (còn có thể gọi là mức thấp), mỗi thứ đều đòi hỏi ở thứ kia
có mục tiêu cụ thể, các chương trình hướng đối tượng làm tường minh mốiquan hệ này
Một cách giản lược, đây là khái niệm và là một nỗ lực nhằm giảm nhẹcác thao tác viết mã cho người lập trình, cho phép họ tạo ra các ứng dụng mà
Trang 5các yếu tố bên ngoài có thể tương tác với các chương trình đó giống như làtương tác với các đối tượng vật lý.
Những đối tượng trong một ngôn ngữ OOP là các kết hợp giữa mã và
dữ liệu mà chúng được nhìn nhận như là một đơn vị duy nhất Mỗi đối tượng
có một tên riêng biệt và tất cả các tham chiếu đến đối tượng đó được tiếnhành qua tên của nó Như vậy, mỗi đối tượng có khả năng nhận vào các thôngbáo, xử lý dữ liệu (bên trong của nó), và gửi ra hay trả lời đến các đối tượngkhác hay đến môi trường
Lập trình hướng đối tượng liên kết cấu trúc dữ liệu với các thao tác,theo cách mà tất cả thường nghĩ về thế giới quanh mình Chúng ta thường gắnmột số các hoạt động cụ thể với một loại hoạt động nào đó và đặt các giả thiếtcủa mình trên các quan hệ đó
Ví dụ: Chúng ta biết rằng một chiếc xe có các bánh xe, di chuyển được
và có thể đổi hướng của nó bằng cách quẹo tay lái Tương tự như thế, một cáicây là một loại thực vật có thân gỗ và lá Một chiếc xe không phải là một cáicây, mà cái cây không phải là một chiếc xe, chúng ta có thể giả thiết rằng cái
mà chúng ta có thể làm được với một chiếc xe thì không thể làm được vớimột cái cây Chẳng hạn, thật là vô nghĩa khi muốn lái một cái cây, còn chiếc
xe thì lại chẳng lớn thêm được khi chúng ta tưới nước cho nó
II NHỮNG KHÁI NIỆM CƠ BẢN VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
2.1 Đối tượng
Đố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ìnhcon và vì thế các đối tượng sẽ được chia thành hai bộ phận chính: phần cácphương thức (method) và phần các thuộc tính (property) Trong thực tế, cácphươ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ợpcá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ả đốitượng có những tính chất gì
Trang 62.1 Lớp (class)
Một lớp được hiểu là một kiểu dữ liệu bao gồm các thuộc tính và cácphương thức được định nghĩa từ trước Đây là sự trừu tượng hóa của đốitượng Một đối tượng sẽ được xác lập khi nó được thực thể hóa từ một lớp.Khác với kiểu dữ liệu thông thường, một lớp là một đơn vị (trừu tượng) baogồm sự kết hợp giữa các phương thức và các thuộc tính Để có một đối tượng(mà có thể được xem như là một biến) hoạt động được thì việc thực thể hóa sẽ
có thể bao gồm việc cài đặt các giá trị ban đầu của các thuộc tính cũng nhưviệc đăng kí bộ nhớ, mà công việc này thường được giao cho các phươngthức gọi là “máy kết cấu” (constructor) hay hàm dựng Ngược lại khi một đốitượng thuộc về một lớp không còn sử dụng nữa thì cũng có thể có mộtphương thức để xử lý gọi là “máy hủy diệt” (destructor) hay hàm hủy
Như vậy, để có được các đối tượng thì người lập trình OOP cần phảithiết kế lớp của các đối tượng đó bằng cách xây dựng các thuộc tính và cácphương thức có các đặc tính riêng
Mỗi một phương thức hay một thuộc tính đầy đủ của một lớp còn đượcgọi tên là một thành viên (member) của lớp đó
2.2 Lớp con (subclass)
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ộtphần hay toàn bộ các đặc tính của một lớp khác Lớp mà chia sẽ sự kế thừagọi là lớp phụ mẫu (parent class)
2.3 Lớp trừu tượng hay lớp cơ sở trừu tượng (abstract class)
Lớp trừu tượng là một lớp mà nó không thể thực thể hóa thành một đốitượng thực dụng được Lớp này được thiết kế nhằm tạo ra một lớp có các đặctính tổng quát nhưng bản thân lớp đó chưa có ý nghĩa (hay không đủ ý nghĩa)
để có thể tiến hành viết mã cho việc thực thể hóa (xem thí dụ)
Thí dụ: Lớp “hinh_phang” đượ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_phẳng 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
Trang 7tượ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àyngườ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ánkính và hằng số nội tại Pi cho lớp “hinh_tron” và sau đó viết mã cụ thể chocác phương thức “tinh_chu_vi” và “tinh_dien_tich”)
2.4 Phương Thức (method)
Là hàm nội tại của một lớp (hay một đối tượng) Tùy theo đặc tính màngười lập trình gán cho, một phương pháp có thể chỉ được gọi bên trong cáchàm khác của lớp đó, có thể cho phép các câu lệnh bên ngoài lớp gọi tới nó,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) được phép gọi tới nó Mỗi phương pháp đều có thể có kiểutrả về, chúng có thể trả các kiểu dữ liệu cổ điển hay trả về một kiểu là một lớp
đã được định nghĩa từ trước Một tên gọi khác của phương pháp của một lớp
là hàm thành viên
Người ta còn định nghĩa thêm vài loại phương pháp đặc biệt:
- Hàm dựng (constructor) là hàm được dùng để cài đặt các giá tri banđầu cho các biến nội tại và đôi khi còn dùng để khai báo về việc xử dụng bộnhớ
Hàm hủy (destructor) là hàm dùng vào việc làm sạch bộ nhớ và hủy bỏ têncủa một đối tượng sau khi đã dùng xong, trong đó có thể bao gồm cả việc xóacác con trỏ nội tại và trả về các phần bộ nhớ mà đối tượng đã dùng.Trong một số trường hợp thì hàm hủy hay hàm dựng có thể được tự động hóabởi ngôn ngữ OOP như là trường hợp của Visual C++, C#
- Tiện ích (utility) là các hàm chỉ họat động bên trong của một lớp màkhông cho phép môi trường bên ngoài gọi tới Các hàm này có thể là nhữngtính toán trung gian nội bộ của một đối tượng mà xét thấy không cần thiếtphải cho thế giới bên ngoài của đối tượng biết là gì
2.5 Thuộc tính (attribute)
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ạicủ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
Trang 8Cá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ộtlớ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ácbiế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ủaphương pháp, tùy theo người viết mã, biến nội tại có thể chỉ được dùng bêntrong các phương pháp của chính lớp đó, có thể cho phép các câu lệnh bênngoài lớp, hay chỉ cho phép các lớp có quan hệ đặc biệt như là quan hệ lớpcon, (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 đó
2.6 Thực thể (instance)
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ộtlớ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ộtthự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ộtlớ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ácbiế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ì đặcbiệt từ người lập trình
2.7 Công cộng (public)
Công cộng là một tính chất được dùng để gán cho các phương pháp,các biến nội tại, hay các lớp mà khi khai báo thì người lập trình đã cho phépcác câu lệnh bên ngoài cũng như các đối tượng khác được phép dùng đến nó
Thí dụ: Trong C++ khai báo public: int my_var; thì biến my_var có hai tínhchấ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 đặctính của biến my_var khiến nó có thể được xử 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
2.8 Riêng tư (private)
Riêng tư là sự thể hiện tính chất đóng mạnh nhất (của một đặc tính haymột lớp) Khi dùng tính chất này gán cho một biến, một phương pháp thì biếnhay phương pháp đó chỉ có thể được sử dụng bên trong của lớp mà chúng
Trang 9được định nghĩa Mọi nỗ lực dùng đến chúng từ bên ngoài qua các câu lệnhhay từ các lớp con sẽ bị phủ nhận hay bị lỗi.
2.9 Bảo tồn (protected)
Tùy theo ngôn ngữ, sẽ có vài điểm nhỏ khác nhau về cách hiểu tínhchất này Nhìn chung đây là tính chất mà mà khi dùng để áp dụng cho cácphương pháp, các biến nội tại, hay các lớp thì chỉ có trong nội bộ của lớp đóhay các lớp con của nó (hay trong nội bộ một gói như trong Java) được phépgọi đến hay dùng đến các phương pháp, biến hay lớp đó
So với tính chất riêng tư thì tính bảo tồn rộng rãi hơn về nghĩa chia sẻ
dữ liệu hay chức năng Nó cho phép một số trường hợp được dùng tới các đặctính của một lớp (từ một lớp con chẳng hạn)
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 mẹ như trong C++.
2.10 Đa kế thừa (muliple inheritance)
Đây là một tính chất cho phép một lớp con có khả năng kế thừa trựctiếp cùng lúc nhiều lớp khác
Vài điểm cần lưu ý khi viết mã dùng tính chất đa kế thừa:
Khi muốn có một sự kế thừa từ nhiều lớp phụ mẫu thì các lớp này cầnphả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 “ambiguilty” Bởi vì lúc đó phần mềm chuyển 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 phụmẫu
Không phải ngôn ngữ OOP loại phân lớp nào cũng hỗ trợ cho tính chất này.Ngoài các khái niệm trên, tùy theo ngôn ngữ, có thể sẽ có các chức năng OOPriêng biệt được cấp thêm vào
III CÁC TÍNH CHẤT CƠ BẢN CỦA LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
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 đặctính và sử dụng của một đối tượng Trong thực tế, các đối tượng thường được
Trang 10trừu tượng hóa qua việc định nghĩa của các lớp (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ươngthứ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ởingười lập trình) được xem là một đặc tính riêng của đối tượng Tập hợp cácđặ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 phương pháp lập trình có các tínhchất chính sau:
3.1 Tính kế thừa
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 chophép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà không phảitiến hành định nghĩa lại Tuy nhiên, không phải ngôn ngữ định hướng đốitượng nào cũng có tính chất này
Khi bắt đầu xây dựng ứng dụng chúng ta sẽ bắt đầu việc thiết kế cáclớp, thông thường chúng ta sẽ thấy có trường hợp một số lớp dường như cóquan hệ với những lớp khác, chúng có những đặc tính khá giống nhau VD: 3lớp AndroidPhone, IPhone, WindowsPhone ở hình dưới:
Mỗi lớp đều đại diện cho một loại smartphone khác nhau nhưng lại cónhững thuộc tính giống nhau Thay vì sao chép những thuộc tính này, sẽ hayhơn nếu ta đặt chúng ở một nơi có thể dùng bởi những lớp khác Điều nàyđược thực hiện bởi tính kế thừa trong OOP: chúng ta có thể định nghĩa lớpcha – base class (trong trường hợp này là Smartphone ) và có những lớp con
kế thừa từ nó (derived class), tạo ra một mối quan hệ cha/con như hình dưới:
Trang 11Bây giờ, các lớp con có thể kế thừa 3 thuộc tính từ lớp cha Nếu cácchức năng của lớp cha đã được định nghĩa đầy đủ thì lập trình viên sẽ khôngphải làm bất cứ việc gì ở lớp con Còn nếu một lớp con muốn chức năng khác
so với định nghĩa ở lớp cha thì nó có thể ghi đè (override) chức năng đã đượcđịnh nghĩa trên lớp cha này
Như hình trên bây giờ nếu gọi thuộc tính OSVersion trên lớp AndroidPhone thì nó sẽ dùng định nghĩa được khai báo ở lớp này, trong khi hai lớpIphone & Windows Phone vẫn dùng định nghĩa được khai báo ở lớp chaSmartphone
3.2 Tính đóng gói (encapsulation) và che dấu thông tin (information hiding)
Sự đóng gói là cơ chế ràng buộc dữ liệu và thao tác trên dữ liệu đóthành một thể thống nhất, tránh được các tác động bất ngờ từ bên ngoài Thểthống nhất này gọi là đối tượng
Trong Objetc Oriented Software Engineering của Ivar Jacibson, tất cảcác thông tin của một hệ thống định hướng đối tượng được lưu trữ bên trongđối tượng của nó và chỉ có thể hành động khi các đối tượng đó được ra lệnhthực hiện các thao tác Như vật, sự đóng gói không chỉ đơn thuần là sự gomchung dữ liệu và chương trình vào trong một khối, chúng còn được hiểu theonghĩa là sự đồng nhất giữa dữ liệu và các thao tác tác động lên dữ liệu đó.Trong một đối tượng, dữ liệu hay thao tác hay cả hai có thể là riêng (private)hoặc chung (public) của đối tượng đó Thao tác hay dữ liệu riêng là thuộc vềđối tượng đó chỉ được truy cập bởi các thành phần của đối tượng, điều nàynghĩa là thao tác hay dữ liệu riêng không thể truy cập bởi các phần khác củachương trình tồn tại ngoài đối tượng Khi thao tác hay dữ liệu là chung, cácphần khác của chương trình có thể truy cập nó mặc dù nó được định nghĩa
Trang 12trong một đối tượng Các thành phần chung của một đối tượng dùng để cungcấp một giao diện có điều khiển cho các thành thành riêng của đối tượng.
Trong một đối tượng, dữ liệu hay thao tác hay cả hai có thể là riêng(private) hoặc chung (public) của đối tượng đó Thao tác hay dữ liệu riêng làthuộc về đối tượng đó chỉ được truy cập bởi các thành phần của đối tượng,điều này nghĩa là thao tác hay dữ liệu riêng không thể truy cập bởi các phầnkhác của chương trình tồn tại ngoài đối tượng Khi thao tác hay dữ liệu làchung, các phần khác của chương trình có thể truy cập nó mặc dù nó đượcđịnh nghĩa trong một đối tượng Các thành phần chung của một đối tượngdùng để cung cấp một giao diện có điều khiển cho các thành thành riêng củađối tượng Cơ chế đóng gói là phương thức tốt để thực hiện cơ chế che dấuthông tin so với các ngôn ngữ lập trình cấu trúc
3.3 Tính đa hình (polymorphism)
Đó là khả năng để cho một thông điệp có thể thay đổi cách thực hiệncủa nó theo lớp cụ thể của đối tượng nhận thông điệp Khi một lớp dẫn xuấtđược tạo ra, nó có thể thay đổi cách thực hiện các phương thức nào đó mà nóthừa hưởng từ lớp cơ sở của nó Một thông điệp khi được gởi đến một đốitượng của lớp cơ sở, sẽ dùng phương thức đã định nghĩa cho nó trong lớp cơ
sở Nếu một lớp dẫn xuất định nghĩa lại một phương thức thừa hưởng từ lớp
cơ sở của nó thì một thông điệp có cùng tên với phương thức này, khi đượcgởi tới một đối tượng của lớp dẫn xuất sẽ gọi phương thức đã định nghĩa cholớp dẫn xuất Như vậy đa hình là khả năng cho phép gởi cùng một thông điệpđến những đối tượng khác nhau có cùng chung một đặc điểm, nói cách khácthông điệp được gởi đi không cần biết thực thể nhận thuộc lớp nào, chỉ biếtrằng tập hợp các thực thể nhận có chung một tính chất nào đó Chẳng hạn,thông điệp “vẽ hình” được gởi đến cả hai đối tượng hình hộp và hình tròn.Trong hai đối tượng này đều có chung phương thức vẽ hình, tuy nhiên tuỳtheo thời điểm mà đối tượng nhận thông điệp, hình tương ứng sẽ được vẽ lên.Trong các ngôn ngữ lập trình OOP, tính đa hình thể hiện qua khả năng chophép mô tả những phương thức có tên giống nhau trong các lớp khác nhau.Đặc điểm này giúp người lập trình không phải viết những cấu trúc điều khiển