Bài tập Lập trình nâng cao: Phân tích OOP & Design Patterns (Nguyễn Hoàng Phương)

Chuyên khảo phân tích Higher nationals in computing advanced programming assignment, đánh giá các khía cạnh quan trọng, đề xuất hướng nghiên cứu tiếp theo.

Trường đại học

BTEC

Chuyên ngành

Computing

Người đăng

Ẩn danh

Thể loại

Assignment

2018-2019

42
6
0

Phí lưu trữ

30 Point

Tóm tắt

I. Tìm hiểu khái niệm Lập trình hướng đối tượng nâng cao OOP

Lập trình hướng đối tượng (OOP) là một mô hình lập trình tổ chức các chương trình xung quanh các đối tượng, thay vì các hành động và logic. Đây là một triết lý thiết kế sử dụng một tập hợp các ngôn ngữ lập trình khác nhau, ví dụ như C#. Hiểu các khái niệm OOP có thể giúp đưa ra quyết định về cách thiết kế ứng dụng và ngôn ngữ nào nên sử dụng. Ví dụ đơn giản là một lớp đại diện cho một người. Lớp người sẽ chứa các thuộc tính để biểu diễn thông tin như tuổi, tên, chiều cao, v.v. Định nghĩa lớp cũng có thể chứa các hàm như sayMyName để in tên của người đó ra màn hình. Một gia đình có thể được xây dựng bằng cách khởi tạo các đối tượng người từ lớp cho mỗi thành viên trong gia đình. Mỗi đối tượng người sẽ chứa các thuộc tính dữ liệu khác nhau vì mỗi người là duy nhất. OOP có bốn khái niệm cơ bản: encapsulation, abstraction, inheritance, và polymorphism. Bốn khái niệm này tuy phức tạp, nhưng việc hiểu cách chúng hoạt động sẽ giúp hiểu các nguyên tắc cơ bản của một chương trình máy tính OOP. Tính encapsulation có nghĩa là đóng gói cái gì đó. Giống như một viên thuốc "encapsulates" hoặc chứa thuốc bên trong lớp phủ của nó, nguyên tắc encapsulation hoạt động theo cách tương tự trong OOP: bằng cách tạo ra một rào cản bảo vệ xung quanh thông tin chứa trong một lớp từ phần còn lại của mã. Trong OOP, đóng gói bằng cách liên kết dữ liệu và các hàm hoạt động trên dữ liệu đó thành một đơn vị duy nhất, lớp. Bằng cách đó, có thể ẩn các chi tiết riêng tư của một lớp khỏi thế giới bên ngoài và chỉ hiển thị chức năng quan trọng để giao tiếp với nó. Khi một lớp không cho phép mã gọi trực tiếp truy cập vào dữ liệu riêng tư của nó, người ta nói rằng nó được đóng gói tốt. Ví dụ, lớp người có thể có dữ liệu riêng tư, chẳng hạn như socialSecurityNumber, không nên hiển thị cho các đối tượng khác trong chương trình. Bằng cách đóng gói thành viên dữ liệu này dưới dạng biến riêng trong lớp, mã bên ngoài sẽ không có quyền truy cập trực tiếp vào nó và nó sẽ vẫn an toàn trong đối tượng của người đó. Nếu một phương thức được viết trong lớp người để thực hiện, chẳng hạn như một giao dịch ngân hàng có tên là bankTransaction(), thì hàm đó có thể truy cập biến socialSecurityNumber khi cần thiết. Dữ liệu riêng tư của người đó sẽ được đóng gói tốt trong một lớp như vậy. Thường thì việc suy luận và thiết kế một chương trình dễ dàng hơn khi có thể tách giao diện của một lớp khỏi triển khai của nó và tập trung vào giao diện. Điều này giống như việc xử lý một hệ thống như một "hộp đen", trong đó không quan trọng việc hiểu các hoạt động bên trong để gặt hái những lợi ích của việc sử dụng nó. Quá trình này được gọi là abstraction trong OOP, bởi vì chúng ta đang trừu tượng hóa các chi tiết triển khai của một lớp và chỉ trình bày một giao diện sạch sẽ và dễ sử dụng thông qua các hàm thành viên của lớp. Được sử dụng cẩn thận, abstraction giúp cô lập tác động của các thay đổi được thực hiện đối với mã, để nếu có sự cố xảy ra, thay đổi sẽ chỉ ảnh hưởng đến các chi tiết triển khai của một lớp chứ không phải mã bên ngoài. Ngôn ngữ hướng đối tượng hỗ trợ khái niệm inheritance. Các lớp có thể được tổ chức thành các hệ thống phân cấp, trong đó một lớp có thể có một hoặc nhiều lớp cha hoặc lớp con. Nếu một lớp có một lớp cha, thì lớp đó được coi là có nguồn gốc hoặc kế thừa từ lớp cha và nó đại diện cho một mối quan hệ loại "IS-A". Có nghĩa là, lớp con "IS-A" một loại của lớp cha. Do đó, nếu một lớp kế thừa từ một lớp khác, nó sẽ tự động có được nhiều chức năng và thuộc tính tương tự từ lớp đó và có thể được mở rộng để chứa mã và dữ liệu riêng biệt. Một tính năng hay của inheritance là nó thường dẫn đến việc sử dụng lại mã tốt vì các hàm của lớp cha không cần được định nghĩa lại trong bất kỳ lớp con nào của nó. Trong OOP, polymorphism cho phép xử lý đồng nhất các lớp trong một hệ thống phân cấp. Do đó, mã gọi chỉ cần được viết để xử lý các đối tượng từ gốc của hệ thống phân cấp và bất kỳ đối tượng nào được khởi tạo bởi bất kỳ lớp con nào trong hệ thống phân cấp sẽ được xử lý theo cùng một cách.

1.1. Tìm hiểu chi tiết về Tính đóng gói Encapsulation trong OOP

Trong OOP, chúng ta đóng gói bằng cách liên kết dữ liệu và các hàm hoạt động trên dữ liệu đó thành một đơn vị duy nhất, đó là lớp. Bằng cách đó, chúng ta có thể ẩn các chi tiết riêng tư của một lớp khỏi thế giới bên ngoài và chỉ hiển thị chức năng quan trọng để giao tiếp với nó. Khi một lớp không cho phép mã gọi trực tiếp truy cập vào dữ liệu riêng tư của nó, chúng ta nói rằng nó được đóng gói tốt. Ví dụ: xem xét lớp Person. Nó có thể có các trường name, age, address. Người dùng lớp Person chỉ cần biết cách sử dụng các trường này, không cần biết cách chúng được lưu trữ trong bộ nhớ.

1.2. Tính trừu tượng Abstraction và vai trò trong thiết kế OOP

Abstraction là quá trình ẩn các chi tiết triển khai của một lớp và chỉ trình bày một giao diện sạch sẽ và dễ sử dụng. Được sử dụng cẩn thận, abstraction giúp cô lập tác động của các thay đổi được thực hiện đối với mã, để nếu có sự cố xảy ra, thay đổi sẽ chỉ ảnh hưởng đến các chi tiết triển khai của một lớp chứ không phải mã bên ngoài. Ví dụ, một hệ thống âm thanh có các nút điều khiển bên ngoài cho phép người dùng tương tác, nhưng người dùng không cần biết về bo mạch logic phức tạp bên trong để sử dụng hệ thống.

1.3. Mối quan hệ Kế thừa Inheritance trong xây dựng hệ thống phân cấp lớp

Các lớp có thể được tổ chức thành các hệ thống phân cấp, trong đó một lớp có thể có một hoặc nhiều lớp cha hoặc lớp con. Nếu một lớp có một lớp cha, thì lớp đó được coi là có nguồn gốc hoặc kế thừa từ lớp cha và nó đại diện cho một mối quan hệ loại "IS-A". Có nghĩa là, lớp con "IS-A" một loại của lớp cha. Ví dụ, một lớp Animal có thể có các lớp con như DogCat. DogCat kế thừa các thuộc tính và phương thức chung từ lớp Animal, đồng thời có thể có các thuộc tính và phương thức riêng.

II. Tìm hiểu các Design Patterns trong OOP nâng cao Tổng quan

Design Patterns là các giải pháp đã được chứng minh cho các vấn đề thiết kế phần mềm thường gặp. Chúng là các mẫu thiết kế tái sử dụng có thể được áp dụng để giải quyết các vấn đề thiết kế cụ thể trong các ứng dụng hướng đối tượng. Design Patterns có thể được phân loại thành ba loại chính: Creational, Structural, và Behavioral. Creational Patterns liên quan đến việc tạo đối tượng. Structural Patterns liên quan đến việc cấu trúc các lớp và đối tượng. Behavioral Patterns liên quan đến việc gán trách nhiệm giữa các đối tượng. Design Patterns cung cấp một ngôn ngữ chung để các nhà phát triển giao tiếp và cộng tác. Chúng giúp cải thiện khả năng đọc, khả năng bảo trì và khả năng tái sử dụng của mã. Việc học và áp dụng Design Patterns là một kỹ năng quan trọng cho bất kỳ nhà phát triển OOP nào. Theo [Tài liệu gốc], "Vai trò của bạn là giảm bớt tình trạng này bằng cách thể hiện hiệu quả của sơ đồ UML trong OOAD và Design Patterns trong việc sử dụng".

2.1. Creational Patterns Nhóm các mẫu thiết kế liên quan đến tạo đối tượng

Creational Patterns cung cấp các cách để tạo đối tượng một cách linh hoạt và kiểm soát được. Các mẫu này thường che giấu logic tạo đối tượng, cho phép mã ứng dụng tập trung vào việc sử dụng đối tượng thay vì tạo ra chúng. Các ví dụ về Creational Patterns bao gồm: Abstract Factory, Builder, Factory Method, Prototype, và Singleton.

2.2. Structural Patterns Cấu trúc các lớp và đối tượng để tạo ra các cấu trúc lớn hơn

Structural Patterns giải quyết vấn đề về cách cấu trúc các lớp và đối tượng để tạo ra các cấu trúc lớn hơn và phức tạp hơn. Các mẫu này giúp tạo ra các mối quan hệ linh hoạt và hiệu quả giữa các đối tượng. Các ví dụ về Structural Patterns bao gồm: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, và Proxy.

2.3. Behavioral Patterns Gán trách nhiệm giữa các đối tượng và quản lý thuật toán

Behavioral Patterns tập trung vào cách các đối tượng tương tác với nhau và cách gán trách nhiệm giữa chúng. Các mẫu này giúp quản lý thuật toán, luồng điều khiển và giao tiếp giữa các đối tượng. Các ví dụ về Behavioral Patterns bao gồm: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, và Visitor.

III. Hướng dẫn cách triển khai Singleton Pattern trong ứng dụng OOP

Mẫu Singleton là một Creational Pattern đảm bảo rằng một lớp chỉ có một instance và cung cấp một điểm truy cập toàn cục cho instance đó. Mẫu này hữu ích khi bạn cần một đối tượng duy nhất để quản lý tài nguyên, chẳng hạn như kết nối cơ sở dữ liệu hoặc trình quản lý cấu hình. Để triển khai Singleton Pattern, bạn cần: 1) Tạo một thuộc tính private static để lưu trữ instance duy nhất của lớp. 2) Tạo một constructor private để ngăn việc tạo instance từ bên ngoài lớp. 3) Tạo một phương thức public static để cung cấp truy cập cho instance duy nhất của lớp. Theo [Tài liệu gốc], các Design Patterns nên được minh họa bằng sơ đồ lớp UML tương ứng.

3.1. Code mẫu triển khai Singleton Pattern bằng Java

public class Singleton {
 private static Singleton instance;
 private Singleton() {}
 public static Singleton getInstance() {
 if (instance == null) {
 instance = new Singleton();
 }
 return instance;
 }
}
``` Đoạn code này cho thấy một cách đơn giản để tạo một Singleton trong java. Instance duy nhất được tạo ra nếu nó chưa tồn tại.

3.2. Ưu điểm và nhược điểm của việc sử dụng Singleton Pattern

Ưu điểm: 1) Đảm bảo chỉ có một instance của lớp. 2) Cung cấp một điểm truy cập toàn cục cho instance. 3) Tiết kiệm tài nguyên bằng cách tránh tạo nhiều instance của lớp. Nhược điểm: 1) Có thể gây khó khăn cho việc kiểm thử đơn vị. 2) Có thể vi phạm nguyên tắc single responsibility. 3) Có thể gây ra các vấn đề về đồng bộ hóa trong môi trường đa luồng.

3.3. Trường hợp sử dụng thực tế cho Singleton Pattern trong OOP

Ví dụ: Trình quản lý cấu hình, Trình ghi nhật ký, Kết nối cơ sở dữ liệu, Thread pool. Trong trình quản lý cấu hình, chúng ta chỉ cần một instance duy nhất để đảm bảo tính nhất quán của cấu hình. Tương tự, đối với trình ghi nhật ký, chỉ một instance là cần thiết để quản lý tệp nhật ký.

IV. Tìm hiểu ứng dụng thực tế của Factory Method trong dự án OOP

Mẫu Factory Method là một Creational Pattern định nghĩa một interface để tạo đối tượng, nhưng cho phép các lớp con quyết định lớp nào sẽ được khởi tạo. Mẫu này hữu ích khi bạn cần tạo các đối tượng khác nhau dựa trên các điều kiện khác nhau. Để triển khai Factory Method, bạn cần: 1) Tạo một interface hoặc lớp abstract cho các đối tượng cần tạo. 2) Tạo một interface hoặc lớp abstract cho factory method. 3) Tạo các lớp con cụ thể triển khai các đối tượng và factory method cụ thể. Mẫu Factory Method cung cấp một cách để tách logic tạo đối tượng khỏi logic sử dụng đối tượng.

4.1. Code ví dụ về Factory Method với ngôn ngữ lập trình Python

from abc import ABC, abstractmethod

class Animal(ABC):
 @abstractmethod
 def speak(self):
 pass

class Dog(Animal):
 def speak(self):
 return "Woof!"

class Cat(Animal):
 def speak(self):
 return "Meow!"

class AnimalFactory(ABC):
 @abstractmethod
 def create_animal(self):
 pass

class DogFactory(AnimalFactory):
 def create_animal(self):
 return Dog()

class CatFactory(AnimalFactory):
 def create_animal(self):
 return Cat()

# Sử dụng
dog_factory = DogFactory()
dog = dog_factory.create_animal()
print(dog.speak())

4.2. Phân tích ưu điểm và nhược điểm khi sử dụng Factory Method

Ưu điểm: 1) Linh hoạt trong việc tạo đối tượng. 2) Tách logic tạo đối tượng khỏi logic sử dụng đối tượng. 3) Dễ dàng mở rộng để tạo thêm các loại đối tượng mới. Nhược điểm: 1) Thêm độ phức tạp cho mã. 2) Có thể làm tăng số lượng lớp trong dự án.

4.3. Ứng dụng thực tế của Factory Method trong các Framework và thư viện

Factory Method được sử dụng rộng rãi trong các Framework và thư viện để cung cấp một cách linh hoạt để tạo các đối tượng khác nhau. Ví dụ: trong Spring Framework, BeanFactory sử dụng Factory Method để tạo các bean khác nhau dựa trên cấu hình. Trong Django, Model sử dụng Factory Method để tạo các đối tượng đại diện cho dữ liệu trong cơ sở dữ liệu.

V. Phân tích quan hệ giữa OOP và Design Patterns nâng cao

OOP cung cấp các nguyên tắc cơ bản để thiết kế và xây dựng phần mềm, trong khi Design Patterns cung cấp các giải pháp đã được chứng minh cho các vấn đề thiết kế thường gặp trong OOP. Design Patterns dựa trên các nguyên tắc của OOP, chẳng hạn như abstraction, encapsulation, inheritance, và polymorphism. Việc hiểu các nguyên tắc của OOP là điều cần thiết để áp dụng Design Patterns một cách hiệu quả. Các Design Patterns tận dụng các tính năng của OOP để cung cấp các giải pháp linh hoạt, tái sử dụng và dễ bảo trì. Theo [Tài liệu gốc], mục tiêu là "phân tích mối quan hệ giữa mô hình hướng đối tượng và Design Patterns".

5.1. Mối quan hệ tương hỗ giữa Nguyên lý SOLID và Design Patterns

Nguyên lý SOLID là một tập hợp các nguyên tắc thiết kế hướng đối tượng giúp tạo ra mã dễ bảo trì, dễ mở rộng và dễ kiểm thử. Design Patterns thường tuân thủ các nguyên tắc SOLID, và việc áp dụng SOLID có thể giúp bạn thiết kế và triển khai Design Patterns một cách hiệu quả hơn. Ví dụ, Dependency Inversion Principle khuyến khích việc sử dụng abstractionInversion of Control (IoC), giúp bạn dễ dàng thay đổi và kiểm thử các thành phần trong ứng dụng của mình, điều này rất hữu ích khi áp dụng các Design Patterns như Strategy hoặc Template Method.

5.2. Cách Design Patterns giúp cải thiện cấu trúc và khả năng tái sử dụng mã

Design Patterns cung cấp các mẫu thiết kế tái sử dụng giúp cải thiện cấu trúc và khả năng tái sử dụng của mã. Bằng cách áp dụng Design Patterns, bạn có thể tạo ra các ứng dụng linh hoạt, dễ bảo trì và dễ mở rộng hơn. Ví dụ, Composite Pattern cho phép bạn tạo ra các cấu trúc cây phân cấp, giúp bạn dễ dàng quản lý và thao tác với các đối tượng phức tạp. Decorator Pattern cho phép bạn thêm các trách nhiệm mới cho đối tượng một cách động, mà không cần sửa đổi lớp gốc.

5.3. Ảnh hưởng của Design Patterns đến quá trình phát triển phần mềm OOP

Design Patterns giúp tăng tốc quá trình phát triển phần mềm bằng cách cung cấp các giải pháp đã được chứng minh cho các vấn đề thiết kế thường gặp. Chúng cũng giúp cải thiện khả năng giao tiếp giữa các thành viên trong nhóm phát triển bằng cách cung cấp một ngôn ngữ chung để thảo luận về các vấn đề thiết kế. Ngoài ra, Design Patterns có thể giúp giảm thiểu rủi ro trong quá trình phát triển phần mềm bằng cách sử dụng các giải pháp đã được kiểm chứng và giảm thiểu khả năng mắc lỗi.

VI. Tổng kết và hướng phát triển tiếp theo cho OOP Design Patterns

Bài viết này đã trình bày một cái nhìn tổng quan về OOPDesign Patterns, tập trung vào các khái niệm cơ bản, các loại Design Patterns phổ biến và mối quan hệ giữa OOPDesign Patterns. Việc nắm vững OOPDesign Patterns là điều cần thiết cho bất kỳ nhà phát triển phần mềm nào muốn tạo ra các ứng dụng chất lượng cao, dễ bảo trì và dễ mở rộng. Trong tương lai, việc nghiên cứu và áp dụng các Design Patterns mới và các kỹ thuật thiết kế phần mềm tiên tiến khác sẽ tiếp tục đóng vai trò quan trọng trong sự phát triển của ngành công nghiệp phần mềm.

6.1. Các xu hướng mới trong OOP và Design Patterns

Một số xu hướng mới trong OOPDesign Patterns bao gồm: Functional Programming, Reactive Programming, Microservices Architecture. Functional Programming nhấn mạnh việc sử dụng các hàm thuần túy và tránh các tác dụng phụ. Reactive Programming tập trung vào việc xử lý các luồng dữ liệu không đồng bộ. Microservices Architecture là một phong cách kiến trúc phần mềm trong đó ứng dụng được cấu trúc như một tập hợp các dịch vụ nhỏ, độc lập, giao tiếp với nhau thông qua các API.

6.2. Tầm quan trọng của việc liên tục học hỏi và cập nhật kiến thức về OOP

Ngành công nghiệp phần mềm liên tục phát triển, vì vậy việc liên tục học hỏi và cập nhật kiến thức về OOP và các kỹ thuật thiết kế phần mềm khác là điều cần thiết để duy trì sự cạnh tranh và tạo ra các ứng dụng chất lượng cao. Việc tham gia các khóa học, đọc sách và tài liệu trực tuyến, tham gia các hội thảo và hội nghị, và thực hành các kỹ năng của bạn là những cách tuyệt vời để liên tục học hỏi và cập nhật kiến thức về OOP.

6.3. Ứng dụng của AI và Machine Learning trong việc thiết kế OOP

AIMachine Learning đang ngày càng được sử dụng trong việc thiết kế OOP, chẳng hạn như tự động hóa việc tạo mã, tối ưu hóa thiết kế phần mềm và phát hiện các lỗi thiết kế. Việc sử dụng AIMachine Learning có thể giúp các nhà phát triển tạo ra các ứng dụng OOP hiệu quả hơn, chất lượng cao hơn và nhanh hơn.

20/09/2025

Trích đoạn nội dung tài liệu

Higher Nationals in Computing Advanced Programming ASSIGNMENT 1 Learner’s name: NGUYỄỄN HOÀNG PHƯƠNG ID: GCS200104 Class: GCS0902 Subject code: 1651 Assessor name: Nguyễễn Văn Sơn Assignment due: Assignment submitted: ASSIGNMENT 1 FRONT SHEET Qualification BTEC Level 5 HND Diploma in Computing Unit number and title Unit 20: Advanced Programming Date Received 1st Submission date submission Date Received 2nd Re-submission Date submission Student Name Nguyen Hoang Phuong Student ID Class GCS200104 Assessor name Nguyen Van Son Student declaration I certify that the assignment submission is entirely my own work and I fully understand the consequences of plagiarism. I understand that making a false declaration is a form of malpractice. Student’s signature Grading grid P1 P2 M1 M2 D1 D2 ❒ Summative Feedback: ❒ Resubmission Feedback: Grade: Assessor Signature: Date: Lecturer Signature: ASSIGNMENT 1 BRIEF Qualification BTEC Level 5 HND Diploma in Computing Unit number Unit 20: Advanced Programming Assignment title Examine and design solutions with OOP and Design Patterns Academic Year 2018-2019 Unit Tutor Doan Trung Tung Issue date 25 April 2019 Submission date 7 May 2019 Submission Format: Format: The submission is in the form of a group written report. This should be written in a concise, formal business style using single spacing and font size 12.

You are required to make use of headings, paragraphs and subsections as appropriate, and all work must be supported with research and referenced using the Harvard referencing system. Please also provide a bibliography using the Harvard referencing system. Submission Students are compulsory to submit the assignment in due date and in a way requested by the Tutors. The form of submission will be a soft copy in PDF posted on corresponding course of http://cms.vn/ Note: The Assignment must be your own work, and not copied by or from another student or from books etc.

If you use ideas, quotes or data (such as diagrams) from books, journals or other sources, you must reference your sources, using the Harvard style. Make sure that you know how to reference properly, and that understand the guidelines on plagiarism. If you do not, you definitely get fail Assignment Brief and Guidance: Scenario: You have recently joined a software development company to help improve their documentation of their in-houses software libraries which were developed with very poor docu e o o e ouses so w e b es w c we e deve oped w ve y poo documentation. As a result, it has been very difficult for the company to utilise their code in multiple projects due to poor documentation.

Your role is to alleviate this situation by showing the efficient of UML diagrams in OOAD and Design Patterns in usages. Tasks You and your team need to explain characteristics of Object-oriented programming paradigm by applying Object-oriented analysis and design on a given (assumed) scenario. The scenario can be small but should be able to presents various characteristics of OOP (such as: encapsulation, inheritance, polymorphism, override, overload, etc. The second task is to introduce some design patterns (including 3 types: creational, structural and behavioral) to audience by giving real case scenarios, corresponding patterns illustrated by UML class diagrams.

To summarize, you should analyze the relationship between the object-orientated paradigm and design patterns. The presentation should be about approximately 20-30 minutes and it should be summarized of the team report. Learning Outcomes and Assessment Criteria Pass Merit Distinction LO1 Examine the key components related to the object-orientated programming paradigm, analysing design pattern types P1 Examine the M1 Determine a design D1 Analyse the relationship characteristics of the pattern from each of the between the object-orientated object-orientated paradigm creational, structural and paradigm and design patterns. as well as the various class behavioural pattern types.

LO2 Design a series of UML class diagrams P2 Design and build class M2 Define class diagrams for D2 Define/refine class diagrams using a UML tool. specific design patterns using a diagrams derived from a given code UML tool. scenario using a UML tool. Table of Contents 1.

Examine the characteristics of the object-orientated paradigm as well as the various class relationships. What is OOP ?. 4 Basic concept of OOP. Various Class Relationship.

Design and build class diagrams using a UML tool. Examine the characteristics of the object-orientated paradigm as well as the various class relationships. What is OOP ? - Object oriented programming (OOP) is a programming structure where programs are organized around objects as opposed to action and logic. This is essentially a design philosophy that uses a different set of programming languages such as C#.

Understanding OOP concepts can help make decisions about how you should design an application and what language to use.[ CITATION ALE17 \l 1066 ] - A simple example would be a class representing a person. The person class would contain attributes to represent information such as the person’s age, name, height, etc. The class definition might also contain functions such as "sayMyName" which would simply print that person’s name to the screen. - A family could be constructed by instantiating person objects from the class for each member of the family.

Each person object would contain different data attributes since each person is unique. 4 Basic concept of OOP - Object-oriented programming has four basic concepts: encapsulation, abstraction, inheritance, and polymorphism. Even if these concepts seem incredibly complex, understanding the general framework of how they work will help you understand the basics of an OOP computer program. Below, we outline these four basic principles and what they entail: + Encapsulation + Abstraction + Inheritance + Polymorphism [ CITATION Kyl21 \l 1066 ] 1.

Encapsulation - The word, “encapsulate,” means to enclose something. Just like a pill "encapsulates" or contains the medication inside of its coating, the principle of encapsulation works in a similar way in OOP: by forming a protective barrier around the information contained within a class from the rest of the code. - In OOP, we encapsulate by binding the data and functions which operate on that data into a single unit, the class. By doing so, we can hide private details of a class from the outside world and only expose functionality that is important for interfacing with it.

When a class does not allow calling code access to its private data directly, we say that it is well encapsulated. - Example: Elaborating on the person class example from earlier, we might have private data in the class, such as "socialSecurityNumber," that should not be exposed to other objects in the program. By encapsulating this data member as a private variable in the class, outside code would not have direct access to it, and it would remain safe within that person’s object. - If a method is written in the person class to perform, say, a bank transaction called "bankTransaction()," that function could then access the "socialSecurityNumber" variable as necessary.

The person’s private data would be well encapsulated in such a class. - Often, it’s easier to reason and design a program when you can separate the interface of a class from its implementation, and focus on the interface. This is akin to treating a system as a “black box,” where it’s not important to understand the gory inner workings in order to reap the benefits of using it. - This process is called “abstraction” in OOP, because we are abstracting away the gory p , g y g y implementation details of a class and only presenting a clean and easy-to-use interface via the class’ member functions.

Carefully used, abstraction helps isolate the impact of changes made to the code, so that if something goes wrong, the change will only affect the implementation details of a class and not the outside code. - Example: Think of a stereo system as an object with a complex logic board on the inside. It has buttons on the outside to allow for interaction with the object. When you press any of the buttons, you're not thinking about what happens on the inside because you can't see it.

Even though you can't see the logic board completing these functions as a result of pressing a button, it's still performing them., albeit hidden to you. - This is the concept of abstraction, which is incredibly useful in all areas of engineering and also applied to great effect in object-oriented programming. - Example: In OOP, we might have a class defined to represent the human body. One might define some functions as part of its publicly facing interface such as “walk()” or “eatFood().” Calling code could call these functions and remain completely oblivious to the complex inner workings of the human body and its necessary functions to perform the act of walking or eating.

These details are completely hidden in the implementation of the walk() and eatFood() body functions and are, therefore, us abstracted away from the end user. In these cases, it’s not important for calling code to understand how the brain coordinates walking or how the stomach manages digesting the food, but rather simply that a human walked or ate. Inheritance - Object-oriented languages that support classes almost always support the notion of “inheritance.” Classes can be organized into hierarchies, where a class might have one or more parent or child classes. If a class has a parent class, we say it is derived or inherited from the parent class and it represents an “IS-A” type relationship.

That is to say, the child class “IS-A” type of the parent class. - Therefore, if a class inherits from another class, it automatically obtains a lot of the same functionality and properties from that class and can be extended to contain separate code and data. A nice feature of inheritance is that it often leads to good code reuse since a parent class’ functions don’t need to be re-defined in any of its child classes. - Consider two classes: one being the superclass—or parent—and the other being the subclass—or child.

The child class will inherit the properties of the parent class, possibly modifying or extending its behavior. Programmers applying the technique of inheritance arrange these classes into what is called an “IS-A” type of relationship. - Example: For instance, in the animal world, an insect could be represented by an Insect superclass. All insects share similar properties, such as having six legs and an exoskeleton.

Subclasses might be defined for grasshoppers and ants. Because they inherit or are derived from the Insect class, they automatically share all insect properties. Polymorphism - In OOP, polymorphism allows for the uniform treatment of classes in a hierarchy. Therefore, calling code only needs to be written to handle objects from the root of the hierarchy, and any object instantiated by any child class in the hierarchy will be handled in the same way.

- Because derived objects share the same interface as their parents, the calling code can call any function in that class’ interface. At run-time, the appropriate function will be called depending on the type of object passed leading to possibly different behaviors. - Example: Suppose we have a class called, “Animal” and two child classes, “Cat,” and “Dog.” If the Animal class has a method to make a noise, called, “makeNoise,” then, we can override the "makeNoise" function that is inherited by the sub-classes, "Cat" and "Dog," to be “meow” and “bark,” respectively. Another function can, then, be written that accepts any Animal object as a parameter and invokes its "makeNoise" member function.

The noise will be different: either a “meow” or a “bark” depending on the type of animal object that was actually passed to the function. Various Class Relationship - Classes are interrelated to each other in specific ways. In particular, relationships in class diagrams include different types of logical connections.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ