Learning Objective 3.1.A: Represent the design of a program by using natural language or creating diagrams that indicate the classes in the program and the data and procedural abstractions found in each class by including all attributes and behaviors.
- 3.1.A.1 Abstraction is the process of reducing complexity by focusing on the main idea. By hiding details irrelevant to the question at hand and bringing together related and useful details, abstraction reduces complexity and allows one to focus on the idea.
- 3.1.A.2 Data abstraction provides a separation between the abstract properties of a data type and the concrete details of its representation. Data abstraction manages complexity by giving data a name without referencing the specific details of the representation. Data can take the form of a single variable or a collection of data, such as in a class or a set of data.
- 3.1.A.3 An attribute is a type of data abstraction that is defined in a class outside any method or constructor. An instance variable is an attribute whose value is unique to each instance of the class. A class variable is an attribute shared by all instances of the class.
- 3.1.A.4 Procedural abstraction provides a name for a process and allows a method to be used only knowing what it does, not how it does it. Through method decomposition, a programmer breaks down larger behaviors of the class into smaller behaviors by creating methods to represent each individual smaller behavior. A procedural abstraction may extract shared features to generalize functionality instead of duplicating code. This allows for code reuse, which helps manage complexity.
- 3.1.A.5 Using parameters allows procedures to be generalized, enabling the procedures to be reused with a range of input values or arguments.
- 3.1.A.6 Using procedural abstraction in a program allows programmers to change the internals of a method (to make it faster, more efficient, use less storage, etc.) without needing to notify method users of the change as long as the method signature and what the method does is preserved.
- 3.1.A.7 Prior to implementing a class, it is helpful to take time to design each class including its attributes and behaviors. This design can be represented using natural language or diagrams.
Mục tiêu học tập 3.1.A: Biểu diễn thiết kế của một chương trình bằng ngôn ngữ tự nhiên hoặc tạo sơ đồ chỉ ra các lớp trong chương trình cũng như các trừu tượng về dữ liệu và thủ tục tìm thấy trong mỗi lớp bằng cách bao gồm tất cả các thuộc tính và hành vi.
- 3.1.A.1 Trừu tượng hóa là quá trình giảm độ phức tạp bằng cách tập trung vào ý tưởng chính. Bằng cách ẩn đi các chi tiết không liên quan đến vấn đề đang xét và gom nhóm các chi tiết liên quan, hữu ích, trừu tượng hóa giúp giảm độ phức tạp và cho phép người ta tập trung vào ý tưởng.
- 3.1.A.2 Trừu tượng hóa dữ liệu cung cấp sự phân tách giữa các thuộc tính trừu tượng của một kiểu dữ liệu và các chi tiết cụ thể của việc biểu diễn nó. Trừu tượng hóa dữ liệu quản lý độ phức tạp bằng cách gán tên cho dữ liệu mà không cần đề cập đến các chi tiết cụ thể của việc biểu diễn. Dữ liệu có thể dưới dạng một biến đơn lẻ hoặc một tập hợp dữ liệu, chẳng hạn như trong một lớp hoặc một tập dữ liệu.
- 3.1.A.3 Một thuộc tính là một loại trừu tượng hóa dữ liệu được định nghĩa trong một lớp bên ngoài bất kỳ phương thức hoặc constructor nào. Một biến thực thể (instance variable) là một thuộc tính có giá trị duy nhất đối với mỗi thực thể của lớp. Một biến lớp (class variable) là một thuộc tính được chia sẻ bởi tất cả các thực thể của lớp.
- 3.1.A.4 Trừu tượng hóa thủ tục cung cấp một tên cho một quy trình và cho phép một phương thức được sử dụng chỉ khi biết nó làm gì, chứ không cần biết nó làm như thế nào. Thông qua phân rã phương thức, một lập trình viên chia nhỏ các hành vi lớn hơn của lớp thành các hành vi nhỏ hơn bằng cách tạo ra các phương thức để đại diện cho mỗi hành vi nhỏ riêng lẻ. Một trừu tượng hóa thủ tục có thể trích xuất các đặc điểm chung để mở rộng chức năng thay vì sao chép mã. Điều này cho phép tái sử dụng mã, giúp quản lý độ phức tạp.
- 3.1.A.5 Sử dụng tham số cho phép các thủ tục được mở rộng, giúp các thủ tục có thể được tái sử dụng với một loạt các giá trị đầu vào hoặc đối số.
- 3.1.A.6 Sử dụng trừu tượng hóa thủ tục trong một chương trình cho phép các lập trình viên thay đổi nội bộ của một phương thức (để làm cho nó nhanh hơn, hiệu quả hơn, sử dụng ít bộ nhớ hơn, v.v.) mà không cần thông báo cho người sử dụng phương thức về sự thay đổi, miễn là ký hiệu phương thức và những gì phương thức làm vẫn được giữ nguyên.
- 3.1.A.7 Trước khi triển khai một lớp, việc dành thời gian để thiết kế từng lớp bao gồm các thuộc tính và hành vi của nó là rất hữu ích. Thiết kế này có thể được biểu diễn bằng ngôn ngữ tự nhiên hoặc sơ đồ.

