Mô hình hướng đối tượng
Mô hình hướng đối tượng (OO) hình thành từ khái niệm ban đầu về cách tiếp cận lập trình mới, trong khi sự quan tâm đến các phương pháp thiết kế và phân tích đến sau này. Mô hình phân tích và thiết kế OO là kết quả hợp lý của việc áp dụng rộng rãi các ngôn ngữ lập trình OO.
Ngôn ngữ hướng đối tượng đầu tiên là Simula (Mô phỏng các hệ thống thực) được phát triển vào năm 1960 bởi các nhà nghiên cứu tại Trung tâm Máy tính Na Uy.
Năm 1970, Alan Kay và nhóm nghiên cứu của ông tại Xerox PARC đã tạo ra một máy tính cá nhân có tên Dynabook và ngôn ngữ lập trình hướng đối tượng thuần túy đầu tiên (OOPL) - Smalltalk, để lập trình Dynabook.
Trong những năm 1980, Grady Boochđã xuất bản một bài báo có tiêu đề Thiết kế hướng đối tượng chủ yếu trình bày một thiết kế cho ngôn ngữ lập trình, Ada. Trong các ấn bản tiếp theo, ông đã mở rộng ý tưởng của mình thành một phương pháp thiết kế hướng đối tượng hoàn chỉnh.
Trong những năm 1990, Coad kết hợp các ý tưởng hành vi với các phương pháp hướng đối tượng.
Những đổi mới quan trọng khác là Kỹ thuật tạo mô hình đối tượng (OMT) của James Rum Baugh và Kỹ thuật phần mềm hướng đối tượng (OOSE) bởi Ivar Jacobson.
Giới thiệu về OO Paradigm
Mô hình OO là một phương pháp luận quan trọng cho sự phát triển của bất kỳ phần mềm nào. Hầu hết các kiểu hoặc mẫu kiến trúc như đường ống và bộ lọc, kho lưu trữ dữ liệu và dựa trên thành phần có thể được triển khai bằng cách sử dụng mô hình này.
Các khái niệm và thuật ngữ cơ bản của hệ thống hướng đối tượng -
Vật
Đối tượng là một phần tử trong thế giới thực trong môi trường hướng đối tượng có thể tồn tại vật chất hoặc khái niệm. Mỗi đối tượng có -
Nhận dạng phân biệt nó với các đối tượng khác trong hệ thống.
Trạng thái xác định các thuộc tính đặc trưng của một đối tượng cũng như các giá trị của các thuộc tính mà đối tượng đó nắm giữ.
Hành vi thể hiện các hoạt động có thể nhìn thấy bên ngoài được thực hiện bởi một đối tượng trong điều kiện thay đổi trạng thái của nó.
Các đối tượng có thể được mô hình hóa theo nhu cầu của ứng dụng. Một đối tượng có thể tồn tại vật chất, chẳng hạn như khách hàng, ô tô, v.v.; hoặc một tồn tại khái niệm vô hình, như một dự án, một quy trình, v.v.
Lớp học
Một lớp đại diện cho một tập hợp các đối tượng có cùng các thuộc tính đặc trưng thể hiện hành vi chung. Nó cung cấp bản thiết kế hoặc mô tả các đối tượng có thể được tạo ra từ nó. Việc tạo một đối tượng với tư cách là một thành viên của một lớp được gọi là khởi tạo. Vì vậy, một đối tượng là mộtinstance của một lớp.
Các thành phần của một lớp là -
Một tập hợp các thuộc tính cho các đối tượng sẽ được khởi tạo từ lớp. Nói chung, các đối tượng khác nhau của một lớp có một số khác biệt về giá trị của các thuộc tính. Các thuộc tính thường được gọi là dữ liệu lớp.
Một tập hợp các hoạt động mô tả hành vi của các đối tượng của lớp. Các hoạt động cũng được gọi là chức năng hoặc phương thức.
Example
Chúng ta hãy xem xét một lớp đơn giản, Circle, đại diện cho hình tròn hình học trong không gian hai chiều. Các thuộc tính của lớp này có thể được xác định như sau:
- x – coord, để biểu thị tọa độ x của tâm
- y – coord, để biểu thị tọa độ y của tâm
- a, để biểu thị bán kính của hình tròn
Một số hoạt động của nó có thể được định nghĩa như sau:
- findArea (), một phương thức để tính diện tích
- findCircumference (), một phương pháp để tính chu vi
- scale (), một phương pháp để tăng hoặc giảm bán kính
Đóng gói
Đóng gói là quá trình liên kết cả hai thuộc tính và phương thức với nhau trong một lớp. Thông qua tính năng đóng gói, các chi tiết bên trong của một lớp có thể được ẩn từ bên ngoài. Nó cho phép các phần tử của lớp chỉ được truy cập từ bên ngoài thông qua giao diện do lớp cung cấp.
Tính đa hình
Đa hình nguyên gốc là một từ Hy Lạp có nghĩa là khả năng có nhiều dạng. Trong mô hình hướng đối tượng, tính đa hình ngụ ý sử dụng các hoạt động theo những cách khác nhau, tùy thuộc vào các trường hợp mà chúng đang hoạt động. Tính đa hình cho phép các đối tượng có cấu trúc bên trong khác nhau có một giao diện bên ngoài chung. Tính đa hình đặc biệt hiệu quả trong khi thực hiện kế thừa.
Example
Chúng ta hãy xem xét hai lớp, Circle và Square, mỗi lớp có một phương thức findArea (). Mặc dù tên và mục đích của các phương thức trong các lớp là giống nhau, nhưng việc triển khai bên trong, tức là thủ tục tính diện tích là khác nhau đối với mỗi lớp. Khi một đối tượng của lớp Circle gọi phương thức findArea () của nó, phép toán tìm diện tích của hình tròn mà không có bất kỳ xung đột nào với phương thức findArea () của lớp Square.
Relationships
Để mô tả một hệ thống, cả đặc tả động (hành vi) và tĩnh (logic) của hệ thống phải được cung cấp. Đặc tả động mô tả các mối quan hệ giữa các đối tượng, ví dụ truyền thông điệp. Và đặc tả tĩnh mô tả các mối quan hệ giữa các lớp, ví dụ như tập hợp, liên kết và kế thừa.
Thông qua
Bất kỳ ứng dụng nào cũng yêu cầu một số đối tượng tương tác một cách hài hòa. Các đối tượng trong một hệ thống có thể giao tiếp với nhau bằng cách sử dụng truyền thông điệp. Giả sử một hệ thống có hai đối tượng - obj1 và obj2. Đối tượng obj1 gửi thông báo đến đối tượng obj2, nếu obj1 muốn obj2 thực thi một trong các phương thức của nó.
Thành phần hoặc Tổng hợp
Tập hợp hoặc thành phần là mối quan hệ giữa các lớp mà một lớp có thể được tạo thành từ bất kỳ sự kết hợp nào của các đối tượng của các lớp khác. Nó cho phép các đối tượng được đặt trực tiếp trong phần thân của các lớp khác. Tổng hợp được gọi là mối quan hệ “part – of” hoặc “has – a”, với khả năng điều hướng từ tổng thể sang các bộ phận của nó. Đối tượng tổng hợp là đối tượng được cấu tạo bởi một hoặc nhiều đối tượng khác.
Hiệp hội
Liên kết là một nhóm liên kết có cấu trúc chung và hành vi chung. Mối quan hệ mô tả mối quan hệ giữa các đối tượng của một hoặc nhiều lớp. Một liên kết có thể được định nghĩa là một thể hiện của một liên kết. Mức độ của một liên kết biểu thị số lượng các lớp tham gia vào một kết nối. Mức độ có thể là một bậc, nhị phân hoặc bậc ba.
- Mối quan hệ một ngôi kết nối các đối tượng của cùng một lớp.
- Một mối quan hệ nhị phân kết nối các đối tượng của hai lớp.
- Mối quan hệ bậc ba kết nối các đối tượng của ba lớp trở lên.
Di sản
Nó là một cơ chế cho phép các lớp mới được tạo ra từ các lớp hiện có bằng cách mở rộng và tinh chỉnh các khả năng của nó. Các lớp hiện có được gọi là lớp cơ sở / lớp cha / lớp siêu và các lớp mới được gọi là lớp dẫn xuất / lớp con / lớp con.
Lớp con có thể kế thừa hoặc dẫn xuất các thuộc tính và phương thức của (các) lớp siêu với điều kiện lớp siêu cho phép như vậy. Bên cạnh đó, lớp con có thể thêm các thuộc tính và phương thức của riêng nó và có thể sửa đổi bất kỳ phương thức siêu lớp nào. Kế thừa xác định mối quan hệ “là - một”.
Example
Từ một lớp Động vật có vú, một số lớp có thể được suy ra như Người, Mèo, Chó, Bò, ... Con người, mèo, chó và bò đều có những đặc điểm riêng biệt của động vật có vú. Ngoài ra, mỗi loại đều có những đặc điểm riêng. Có thể nói bò “là - một loài động vật có vú”.
Phân tích OO
Trong giai đoạn phân tích hướng đối tượng của phát triển phần mềm, các yêu cầu hệ thống được xác định, các lớp được xác định và mối quan hệ giữa các lớp được thừa nhận. Mục đích của phân tích OO là để hiểu miền ứng dụng và các yêu cầu cụ thể của hệ thống. Kết quả của giai đoạn này là đặc tả yêu cầu và phân tích ban đầu về cấu trúc logic và tính khả thi của hệ thống.
Ba kỹ thuật phân tích được sử dụng kết hợp với nhau để phân tích hướng đối tượng là mô hình hóa đối tượng, mô hình động và mô hình chức năng.
Mô hình hóa đối tượng
Mô hình hóa đối tượng phát triển cấu trúc tĩnh của hệ thống phần mềm về các đối tượng. Nó xác định các đối tượng, các lớp mà các đối tượng có thể được nhóm vào và mối quan hệ giữa các đối tượng. Nó cũng xác định các thuộc tính và hoạt động chính đặc trưng cho mỗi lớp.
Quá trình mô hình hóa đối tượng có thể được hình dung theo các bước sau:
- Xác định các đối tượng và nhóm thành các lớp
- Xác định mối quan hệ giữa các lớp
- Tạo sơ đồ mô hình đối tượng người dùng
- Xác định thuộc tính đối tượng người dùng
- Xác định các hoạt động sẽ được thực hiện trên các lớp
Mô hình động
Sau khi hành vi tĩnh của hệ thống được phân tích, hành vi của nó đối với thời gian và các thay đổi bên ngoài cần được kiểm tra. Đây là mục đích của mô hình động.
Mô hình động có thể được định nghĩa là “một cách mô tả cách một đối tượng riêng lẻ phản ứng với các sự kiện, các sự kiện bên trong do các đối tượng khác kích hoạt hoặc các sự kiện bên ngoài do thế giới bên ngoài kích hoạt”.
Quá trình mô hình hóa động có thể được hình dung theo các bước sau:
- Xác định trạng thái của từng đối tượng
- Xác định các sự kiện và phân tích khả năng áp dụng của các hành động
- Xây dựng một sơ đồ mô hình động, bao gồm các sơ đồ chuyển đổi trạng thái
- Thể hiện từng trạng thái dưới dạng thuộc tính đối tượng
- Xác thực các sơ đồ chuyển đổi trạng thái đã vẽ
Mô hình hóa chức năng
Mô hình hóa chức năng là thành phần cuối cùng của phân tích hướng đối tượng. Mô hình chức năng hiển thị các quy trình được thực hiện trong một đối tượng và dữ liệu thay đổi như thế nào khi nó di chuyển giữa các phương thức. Nó chỉ rõ ý nghĩa của các hoạt động của một mô hình đối tượng và các hành động của một mô hình động. Mô hình chức năng tương ứng với sơ đồ luồng dữ liệu của phân tích có cấu trúc truyền thống.
Quá trình mô hình hóa chức năng có thể được hình dung theo các bước sau:
- Xác định tất cả các đầu vào và đầu ra
- Xây dựng sơ đồ luồng dữ liệu hiển thị các phụ thuộc chức năng
- Nêu mục đích của từng chức năng
- Xác định các ràng buộc
- Chỉ định tiêu chí tối ưu hóa
Thiết kế hướng đối tượng
Sau giai đoạn phân tích, mô hình khái niệm được phát triển thêm thành mô hình hướng đối tượng sử dụng thiết kế hướng đối tượng (OOD). Trong OOD, các khái niệm độc lập về công nghệ trong mô hình phân tích được ánh xạ vào các lớp thực thi, các ràng buộc được xác định và các giao diện được thiết kế, dẫn đến mô hình cho miền giải pháp. Mục đích chính của thiết kế OO là phát triển kiến trúc cấu trúc của một hệ thống.
Các giai đoạn cho thiết kế hướng đối tượng có thể được xác định là:
- Xác định bối cảnh của hệ thống
- Thiết kế kiến trúc hệ thống
- Nhận dạng các đối tượng trong hệ thống
- Xây dựng mô hình thiết kế
- Đặc điểm kỹ thuật của giao diện đối tượng
OO Design có thể được chia thành hai giai đoạn - Thiết kế ý tưởng và Thiết kế chi tiết.
Conceptual design
Trong giai đoạn này, tất cả các lớp được xác định cần thiết để xây dựng hệ thống. Hơn nữa, trách nhiệm cụ thể được giao cho từng lớp. Biểu đồ lớp được sử dụng để làm rõ mối quan hệ giữa các lớp và biểu đồ tương tác được sử dụng để hiển thị luồng sự kiện. Nó còn được gọi làhigh-level design.
Detailed design
Trong giai đoạn này, các thuộc tính và hoạt động được gán cho mỗi lớp dựa trên sơ đồ tương tác của chúng. Sơ đồ máy trạng thái được phát triển để mô tả các chi tiết hơn nữa của thiết kế. Nó còn được gọi làlow-level design.
Nguyên tắc thiết kế
Sau đây là các nguyên tắc thiết kế chính:
Principle of Decoupling
Rất khó để duy trì một hệ thống với một tập hợp các lớp phụ thuộc lẫn nhau cao, vì việc sửa đổi trong một lớp có thể dẫn đến cập nhật theo tầng của các lớp khác. Trong thiết kế OO, có thể loại bỏ sự kết hợp chặt chẽ bằng cách đưa vào các lớp mới hoặc kế thừa.
Ensuring Cohesion
Một lớp gắn kết thực hiện một tập hợp các chức năng có liên quan chặt chẽ với nhau. Sự thiếu gắn kết có nghĩa là - một lớp thực hiện các chức năng không liên quan, mặc dù nó không ảnh hưởng đến hoạt động của toàn hệ thống. Nó làm cho toàn bộ cấu trúc của phần mềm khó quản lý, mở rộng, bảo trì và thay đổi.
Open-closed Principle
Theo nguyên tắc này, một hệ thống phải có thể mở rộng để đáp ứng các yêu cầu mới. Việc triển khai hiện có và mã của hệ thống không được sửa đổi do mở rộng hệ thống. Ngoài ra, các nguyên tắc sau đây phải được tuân thủ theo nguyên tắc đóng mở -
Đối với mỗi lớp cụ thể, giao diện và triển khai riêng biệt phải được duy trì.
Trong môi trường đa luồng, hãy giữ các thuộc tính ở chế độ riêng tư.
Giảm thiểu việc sử dụng các biến toàn cục và biến lớp.