24/05/2018, 17:05

Giới thiệu về lập trình hướng đối tượng

Nội dung: Hai cách tiếp cận trong lập trình: lập trình hướng chức năng và lập trình hướng đối tượng; Những khái niệm, thành phần cơ bản của phương pháp hướng đối tượng; Ngôn ngữ lập trình hướng đối tượng. Phương ...

Nội dung:

  • Hai cách tiếp cận trong lập trình: lập trình hướng chức năng và lập trình hướng đối tượng;
  • Những khái niệm, thành phần cơ bản của phương pháp hướng đối tượng;
  • Ngôn ngữ lập trình hướng đối tượng.
  1. Phương pháp lập trình hướng chức năng dựa chủ yếu vào việc phân tách các chức năng chính của bài toán thành những chức năng đơn giản hơn và thực hiện làm mịn dần từ trên xuống (top-down).
  2. Phương pháp lập trình mà ngày nay chúng ta nghe nói tới nhiều đó là lập trình hướng đối tượng. Lập trình hướng đối tượng dựa trên nền tảng là các đối tượng. Lập trình hướng đối tượng cho phép chúng ta kết hợp những tri thức bao quát về các quá trình thực tế với những khái niệm trừu tượng được sử dụng trong máy tính. Chương trình hay hệ thống hướng đối tượng được xem như là tập các lớp đối tượng tương tác với nhau để thực hiện các yêu cầu của bài toán đặt ra.

Lập trình hướng chức năng (thủ tục)

Trọng tâm của cách tiếp cận này là các hàm chức năng. Cấu trúc của chương trình được xây dựng theo cách tiếp cận hướng chức năng có dạng như Hình 1

Cấu trúc của chương trình hướng chức năng

  • Kỹ thuật phân rã các chức năng (hàm) theo cách tiếp cận top-down để tạo ra cấu trúc phân cấp. Chương trình được xây dựng theo cách tiếp cận hướng chức năng thực chất là tập các chương trình con. Các hàm trong một chương trình phải có liên hệ, trao đổi được với nhau.
  • Như chúng ta đã biết, các hàm (các bộ phận chức năng) chỉ có thể trao đổi được với nhau thông qua các tham số, nghĩa là phải sử dụng biến chung (global). Mỗi hàm có thể có vùng dữ liệu riêng còn gọi là dữ liệu cục bộ (local).
Quan hệ giữa dữ liệu và hàm trong LTHTT
  • Đối với những chương trình, dự án tin học lớn, phức tạp đòi hỏi nhiều người, nhiều nhóm tham gia thì những thay đổi của những biến dữ liệu liệu chung sẽ ảnh hưởng tới tất cả những ai có liên quan tới chúng.
  • Tính mở (open) của hệ thống kém.
  • Tách dữ liệu khỏi chức năng xử lý nên vấn đề che giấu, bảo vệ thông tin trong hệ thống là kém, nghĩa là vấn đề an toàn, an ninh dữ liệu là rất phức tạp.
  • Không hỗ trợ việc sử dụng lại và kế thừa nên chất lượng và giá thành của các phần mềm rất khó được cải thiện.

Lập trình hướng đối tượng

  • Đặt trọng tâm vào các đối tượng. Dữ liệu được gắn chặt với các hàm thành phần và chúng được tổ chức, quản lý truy nhập theo nhiều mức khác nhau.
  • Phân tích bài toán thành tập các thực thể được gọi là các lớp đối tượng, Hệ thống được xem như là một tập các lớp đối tượng và các đối tượng đó trao đổi với nhau thông qua việc gửi và nhận các thông điệp (message), do vậy một chương trình hướng đối tượng thực sự có thể hoàn toàn không cần sử dụng biến chung.
  • Tính mở cao hơn.
  • Cơ chế bao bọc, che giấu thông tin của phương pháp hướng đối tượng giúp tạo ra được những hệ thống an toàn, an ninh cao hơn cách tiếp cận hướng chức năng.
  • Hỗ trợ rất mạnh nguyên lý sử dụng lại nhiều nhất có thể và tạo ra mọi khả năng để kế thừa những lớp đã được thiết kế, lập trình tốt để nhanh chóng tạo ra được những phần mềm có chất lượng, gia thành rẻ hơn và đáp ứng các yêu cầu của người sử dụng.
  • Phương pháp hướng đối tượng được xây dựng dựa trên một tập các khái niệm cơ sở:
    1. Đối tượng (object),
    2. Lớp đối tượng (class),
    3. Trừu tượng hóa dữ liệu (Data Abstracttion),
    4. Bao bọc và che giấu thông tin (Encapsulation and Information Hiding),
    5. Mở rộng, kế thừa giữa các (Inheritance),
    6. Đa xạ và nạp chồng (Polymorphism and Overloading),
    7. Liên kết động (Dynamic Binding),
    8. Truyền thông điệp (Message Passing).

Đối tượng

  • Đối tượng là thực thể của hệ thống, của CSDL và được xác định thông qua định danh ID (IDentifier) của chúng. Mỗi đối tượng có tập các đặc trưng bao gồm cả các phần tài sản thường là các dữ liệu thành phần hay các thuộc tính mô tả các tính chất và các phương thức, các thao tác trên các dữ liệu để xác định hành vi của đối tượng đó.
  • Đối tượng là những thực thể được xác định trong thời gian hệ thống hướng đối tượng hoạt động. Như vậy đối tượng có thể biểu diễn cho người, vật, hay một bảng dữ liệu hoặc bất kỳ một hạng thức nào đó cần xử lý trong chương trình.

Lớp đối tượng

  • Lớp là bản mẫu hay một kiểu chung cho tất cả những đối tượng có những đặc trưng giống nhau. Đối tượng chính là thể hiện (cá thể) của một lớp xác định. Trong lập trình hướng đối tượng, lớp được xem là đồng nhất với kiểu dữ liệu trừu tượng (ADT - Abstract Data Type được Barbara đề xuất vào những năm 1970).
  • Lập trình hướng đối tượng là cách phân chia chương trình thành các đơn thể (các lớp) bằng cách tạo ra các vùng bộ nhớ cho cả dữ liệu lẫn hàm và chúng sẽ được sử dụng như các mẫu để tạo ra bản sao từng đối tượng khi chúng được tạo ra trong hệ thống.
  • Lớp chính là tập các đối tượng có cùng các thuộc tính và hành vi giống nhau. Các thành phần của lớp có thể chia thành ba vùng quản lý chính:
    • công khai ( public ),
    • được bảo vệ ( protected ),
    • riêng ( private ).
    Lớp Student trong UML
  • UML (Unified Modeling Language)ngôn ngữ mô hình hoá hình thức, thống nhất và trực quan. Phần lớn các thông tin trong mô hình được thể hiện bởi các ký hiệu đồ hoạ, biểu đồ thể hiện mối quan hệ giữa các thành phần của hệ thống một cách thống nhất và có logic chặt chẽ.
  • UML được sử dụng để đặc tả, xây dựng và làm tài liệu cho các tác phẩm (Artifacts), các kết quả của các pha phân tích, thiết kế và lập trình hướng đối tượng dưới dạng các biểu đồ, bản mẫu hay các trang Web.
  • UML là ngôn ngữ chuẩn công nghiệp để lập kế hoạch chi tiết phát triển phần mềm. Hiện nay nhiều hãng sản xuất phần mềm lớn như: Microsoft,IBM, HP, Oracle, Digital Equipment Corp., Texas Instruments, Rational Software, v.v., sử dụng UML như là chuẩn cho ngôn ngữ mô hình hoá hệ thống phần mềm.

Trừu tượng hóa dữ liệu

  • Trừu tượng hóa là cách biểu diễn những đặc tính chính và bỏ qua những chi tiết. Trừu tượng hóa là sự mở rộng khái niệm kiểu dữ liệu và cho phép định nghĩa những phép toán trừu tượng trên các dữ liệu trừu tượng.
  • Khi xây dựng phần mềm thì nguyên lý trừu tượng hoá được thực hiện thông qua việc trừu tượng hoá các chức năng, hàm (thuật toán) và trừu tượng hoá các kiểu dữ liệu nguyên thuỷ.

Bao bọc và che giấu thông tin

  • Đóng gói dữ liệu và các hàm vào một đơn vị cấu trúc (gọi là lớp) được xem như một nguyên tắc bao bọc thông tin. Kỹ thuật này cho phép xác định các vùng đặc trưng riêng, công khai hay được bảo vệ bao gồm cả dữ liệu và các câu lệnh nhằm điều khiển hoặc hạn chế những truy nhập tuỳ tiện của những đối tượng khác. Chính các hàm thành phần công khai của lớp sẽ đóng vai trò như là giao diện giữa các đối tượng và với phần còn lại của hệ thống. Nguyên tắc bao bọc dữ liệu để ngăn cấm sự truy nhập trực tiếp trong lập trình được gọi là sự che giấu thông tin.

Sự mở rộng, kế thừa giữa các lớp

  • Một lớp này được quyền sử dụng một số tính chất (cả dữ liệu và các hàm thành phần) của các lớp khác.
  • Nguyên lý chung của kế thừa thì chỉ những thuộc tính, hàm thành phần được bảo vệ và công khai là được quyền kế thừa, còn những thuộc tính, hàm thành phần riêng là không được phép kế thừa.
  • Hỗ trợ hai nguyên lý kế thừa: kế thừa đơn và kế thừa bội. Kế thừa đơn là một lớp có thể kế thừa từ một lớp cơ sở, còn kế thừa bội là một lớp có thể kế thừa từ nhiều hơn một lớp cơ sở. Ngôn ngữ C++ hỗ trợ cả hai nguyên lý kế thừa, nhưng Java chỉ hỗ trợ thực hiện kế thừa đơn.
  • Nguyên lý kế thừa đơn hỗ trợ cho việc tạo ra cấu trúc cây phân cấp các lớp.
Cấu trúc phân cấp các lớp theo quan hệ kế thừa trong UML
  • Trong LTHĐT, khái niệm kế thừa kéo theo ý tưởng sử dụng lại. Nghĩa là từ một lớp đã được xây dựng, chúng ta có thể bổ sung thêm một số tính chất tạo ra một lớp mới kế thừa lớp cũ mà không làm thay đổi những cái đã có.
  • Có thể diễn đạt cơ chế kế thừa như sau:
    • Lớp A kế thừa lớp B sẽ có (không tường minh) tất cả các thuộc tính, hàm đã được xác định trong B, ở những vùng được phép kế thừa (được bảo vệ, công khai),
    • Bổ sung thêm một số thuộc tính, hàm để mô tả được đúng các hành vi của những đối tượng mà lớp A quản lý.

Đa xạ (tương ứng bội) và nạp chồng

  • Đa xạ tương tự như trong toán học. Đa xạ là kỹ thuật được sử dụng để mô tả khả năng gửi một thông điệp chung tới nhiều đối tượng mà mỗi đối tượng lại có cách xử lý riêng theo ngữ cảnh của mình.
Tương ứng bội của hàm Ve()
  • Nạp chồng (Overloading) là một trường hợp của đa xạ. Nạp chồng là khả năng của một khái niệm (như các phép toán chẳng hạn) có thể được sử dụng với nhiều nội dung thực hiện khác nhau khác nhau tuỳ theo ngữ cảnh, cụ thể là tuỳ thuộc vào kiểu và số các tham số của chúng.
    • int Cong(int, int); // Cộng hai số nguyên
    • float Cong(float, float); // Cộng hai số thực
    • Complex Cong(Complex, Complex); // Cộng hai số phức
    • String Cong(String, String); // Ghép hai xâu
    • String Cong(String, int); // Ghép một xâu với một số nguyên

Liên kết động

  • Liên kết thông thường (liên kết tĩnh) là dạng liên kết được xác định ngay khi dịch chương trình. Hầu hết các chương trình được viết bằng Pascal, C đều là dạng liên kết tình.
  • Liên kết động là dạng liên kết các hàm, chức năng khi chương trình thực hiện các lời gọi các hàm, chức năng đó. Liên kết động liên quan chặt chẽ với những khái niệm đa xạ và kế thừa trong lập trình hướng đối tượng.

Truyền thông điệp

  • Chương trình hướng đối tượng (được thiết kế và lập trình theo phương pháp hướng đối tượng) bao gồm một tập các đối tượng và mối quan hệ giữa các đối tượng đó với nhau.
  • Lập trình trong ngôn ngữ hướng đối tượng bao gồm các bước sau:
    1. Tạo ra các lớp đối tượng và mô tả hành vi của chúng,
    2. Tạo ra các đối tượng theo định nghĩa của các lớp,
    3. Xác định sự trao đổi thông tin giữa các đối tượng trong hệ thống.
  • Trong chương trình, thông điệp gửi đến cho một đối tượng chính là để yêu cầu thực hiện một công việc cụ thể, nghĩa là sử dụng những hàm tương ứng để xử lý dữ liệu đã được khai báo trong lớp đối tượng đó

    Khi hệ thống máy tính muốn in một tệp dataFile thì máy tính hiện thời (: Computer ) gửi đến cho đối tượng :PrinterServer một yêu cầu Print(dataFile) . Truyền thông điệp giữa các đối tượng

Mỗi đối tượng chỉ tồn tại trong thời gian nhất định.

Các ưu điểm của lập trình hướng đối tượng

  1. Thông qua nguyên lý kế thừa, chúng ta có thể loại bỏ được những đoạn chương trình lặp lại, dư thừa trong quá trình mô tả các lớp và mở rộng khả năng sử dụng các lớp đã được xây dựng.
  2. Chương trình được xây dựng từ những đơn thể (đối tượng) trao đổi với nhau nên việc thiết kế và lập trình sẽ được thực hiện theo quy trình nhất định chứ không phải dựa vào kinh nghiệm và kỹ thuật như trước. Điều này đảm bảo rút ngắn được thời gian xây dựng hệ thống và tăng năng suất lao động.
  3. Nguyên lý che giấu thông tin giúp người lập trình tạo ra được những chương trình an toàn không bị thay đổi bởi những đoạn chương trình khác một cách tuỳ tiện.
  4. Có thể xây dựng được ánh xạ các đối tượng của bài toán vào đối tượng của chương trình.
  5. Cách tiếp cận thiết kế đặt trọng tâm vào dữ liệu, giúp chúng ta xây dựng được mô hình chi tiết và phù hợp với thực tế.
  6. Những hệ thống hướng đối tượng dễ mở rộng, nâng cấp thành những hệ lớn hơn.
  7. Kỹ thuật truyền thông điệp trong việc trao đổi thông tin giữa các đối tượng giúp cho việc mô tả giao diện với các hệ thống bên ngoài trở nên đơn giản hơn.
  8. Có thể quản lý được độ phức tạp của những sản phẩm phần mềm.

Các ngôn ngữ lập trình hướng đối tượng

Dựa vào khả năng đáp ứng các khái niệm về hướng đối tượng, chúng ta có thể chia ra làm hai loại:

  • (list con)Ngôn ngữ lập trình dựa trên đối tượng (object-based),
  • Ngôn ngữ lập trình hướng đối tượng (object-oriented).
  • Lập trình dựa trên đối tượng là kiểu lập trình hỗ trợ chính cho việc bao bọc, che giấu thông tin và định danh các đối tượng. Lập trình dựa trên đối tượng có những đặc tính sau:
    • Bao bọc dữ liệu
    • Cơ chế che giấu và hạn chế truy nhập dữ liệu
    • Tự động tạo lập và huỷ bỏ các đối tượng
    • Tính đa xạ
  • Ngôn ngữ hỗ trợ cho kiểu lập trình trên được gọi là ngôn ngữ lập trình dựa trên đối tượng. Ngôn ngữ trong lớp này không hỗ trợ cho việc thực hiện kế thừa và liên kết động. Ada là ngôn ngữ lập trình dựa trên đối tượng.
  • Lập trình hướng đối tượng là kiểu lập trình dựa trên đối tượng và bổ sung thêm nhiều cấu trúc để cài đặt những quan hệ về kế thừa và liên kết động.
  • Vì vậy đặc tính của LTHĐT có thể viết một cách ngắn gọn như sau:

Các đặc tính dựa trên đối tượng + kế thừa + liên kết động.

  • Ngôn ngữ hỗ trợ cho những đặc tính trên được gọi là ngôn ngữ LTHĐT, ví dụ như Java, C++, Smalltalk, Object Pascal,v.v...

  1. Nêu các đặc trưng cơ bản của cách tiếp cận lập trình hướng chức năng và lập trình hướng đối tượng.
  2. Tại sao lại gọi khái niệm lớp là kiểu dữ liệu trừu tượng trong lập trình hướng đối tượng.
  3. Nêu nguyên lý hoạt động của khái niệm đa xạ, tương ứng bội trong lập trình hướng đối tượng, khái niệm này thực hiện được trong lập trình hướng chức năng hay không, tại sao?
  4. Khái niệm kế thừa và sử dụng lại trong lập trình hướng đối tượng là gì?, ngôn ngữ lập trình C++ và Java hỗ trợ quan hệ kế thừa như thế nào?.
  5. Liên kết động là gì?, tại sao lại phải cần liên kết động (liên kết muộn)?
0