Skip to content · ⁨Bỏ qua nội dung⁩

Class Creation · ⁨Tạo lớp⁩

AP Computer Science A · ⁨AP Khoa học máy tính A⁩ · Topic 3 · ⁨Chủ đề 3⁩

Video lesson for this topic · ⁨Bài học video cho chủ đề này⁩ Open the video page · ⁨Mở trang video⁩
7:26

Tạo lớp

Đây là một học sinh, được lưu trữ dưới dạng ba biến rời rạc: tên, năm và điểm số. Điều đó hoạt động. Bây giờ thêm một nghìn học sinh. Bạn cần ba nghìn biến…

English narration · English + 中文 subtitles burned in · ⁨Giọng đọc tiếng Anh · phụ đề tiếng Anh + 中文 được ghi trực tiếp⁩

3.1

Abstraction and Program Design · ⁨Trừu tượng hóa và Thiết kế Chương trình⁩

Syllabus · ⁨Chương trình⁩
English

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.
Tiếng Việt

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ơ đồ.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

Abstraction 抽象 means hiding detail behind a simple interface – you use a String without knowing how it stores characters. Good design breaks a problem into classes, each responsible for one idea. This topic is about writing your own classes.

Tiếng Việt
Một ghép hình đang được hoàn thiện: các lớp và phương thức là những mảnh mô-đun của thiết kế chương trình lớn hơn
Một ghép hình đang được hoàn thiện: các lớp và phương thức là những mảnh mô-đun của thiết kế chương trình lớn hơn

Trừ抽象 hóa có nghĩa là ẩn đi chi tiết phía sau một giao diện đơn giản – bạn sử dụng một String mà không cần biết nó lưu trữ ký tự như thế nào. Thiết kế tốt chia nhỏ vấn đề thành các lớp, mỗi lớp chịu trách nhiệm cho một ý tưởng. Chủ đề này tập trung vào việc viết các lớp của riêng bạn.

Phân rã một chương trình thành các mô-đun và mô-đun con
Phân rã một chương trình thành các module và sub-modules
3.2

The Impact of Program Design · ⁨Tác động của Thiết kế Chương trình⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 3.2.A: Explain the social and ethical implications of computing systems.

  • 3.2.A.1 System reliability refers to the program being able to perform its tasks as expected under stated conditions without failure. Programmers should make an effort to maximize system reliability by testing the program with a variety of conditions.
  • 3.2.A.2 The creation of programs has impacts on society, the economy, and culture. These impacts can be both beneficial and harmful. Programs meant to fill a need or solve a problem can have unintended harmful effects beyond their intended use.
  • 3.2.A.3 Legal issues and intellectual property concerns arise when creating programs. Programmers often reuse code written by others and published as open source and free to use. Incorporation of code that is not published as open source requires the programmer to obtain permission and often purchase the code before integrating it into their program.
Tiếng Việt

Mục tiêu học tập 3.2.A: Giải thích các hệ quả xã hội và đạo đức của các hệ thống máy tính.

  • 3.2.A.1 Độ tin cậy của hệ thống đề cập đến khả năng của chương trình thực hiện các tác vụ như mong đợi trong các điều kiện đã nêu mà không gặp sự cố. Các lập trình viên nên nỗ lực tối đa hóa độ tin cậy của hệ thống bằng cách thử nghiệm chương trình với nhiều điều kiện khác nhau.
  • 3.2.A.2 Việc tạo ra các chương trình có tác động đến xã hội, nền kinh tế và văn hóa. Những tác động này có thể vừa mang tính tích cực vừa tiêu cực. Các chương trình nhằm đáp ứng nhu cầu hoặc giải quyết vấn đề có thể gây ra những hậu quả không mong muốn beyond mục đích ban đầu của chúng.
  • 3.2.A.3 Các vấn đề pháp lý và quan tâm về sở hữu trí tuệ phát sinh khi tạo ra các chương trình. Các lập trình viên thường tái sử dụng mã nguồn do người khác viết và công bố dưới dạng mã nguồn mở và miễn phí sử dụng. Việc tích hợp mã nguồn không được công bố là mã nguồn mở yêu cầu lập trình viên phải xin phép và thường mua mã nguồn trước khi đưa nó vào chương trình của mình.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

Design choices affect whether code is correct, readable, and reusable. Encapsulation 封装 – keeping data private and exposing it only through methods – protects an object's state from misuse and lets you change the inside without breaking users of the class. Thoughtful naming, single-purpose methods, and testing reduce bugs.

Design also carries responsibility beyond the code. System reliability 系统可靠性 - a program performing its tasks as expected, without failure - is something programmers should maximise through careful design and testing. Programs have real impacts on society, the economy, and culture that can be both beneficial and harmful. And creating programs raises legal and intellectual-property 知识产权 concerns: programmers often reuse code published as open source 开源 and free to use, but must respect its licence and give credit rather than copy others' work as their own.

Tiếng Việt

Các lựa chọn thiết kế ảnh hưởng đến tính đúng đắn, khả năng đọc hiểu và tính tái sử dụng của mã nguồn. Đóng gói (Encapsulation) – giữ dữ liệu riêng tư và chỉ expose chúng thông qua các phương thức – bảo vệ trạng thái của đối tượng khỏi bị lạm dụng và cho phép bạn thay đổi bên trong mà không làm hỏng người dùng lớp. Đặt tên cẩn thận, các phương thức đơn mục đích và kiểm thử giúp giảm thiểu lỗi.

Thiết kế cũng mang lại trách nhiệm vượt ra ngoài mã nguồn. Độ tin cậy của hệ thống - một chương trình thực hiện các tác vụ như mong đợi, không có sự cố - là thứ các lập trình viên nên tối đa hóa thông qua thiết kế và kiểm thử cẩn thận. Các chương trình có tác động thực tế đến xã hội, kinh tế và văn hóa mà có thể vừa có lợi vừa gây hại. Và việc tạo ra các chương trình đặt ra những lo ngại về pháp lý và sở hữu trí tuệ: các lập trình viên thường tái sử dụng mã nguồn được công bố dưới dạng nguồn mở và miễn phí sử dụng, nhưng phải tôn trọng giấy phép và ghi nhận nguồn gốc thay vì sao chép công việc của người khác thành của mình.

Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
English Tiếng Việt
Abstraction/əbˈstrækʃn/ Trừ抽象 hóa
Encapsulation/ɪnˌkæpsjʊˈleɪʃn/ Đóng gói
System reliability/ˈsɪstəm rɪˌlaɪəˈbɪlɪti/ Độ tin cậy của hệ thống
legal and intellectual-property/ˈliːɡl ænd ˌɪntəˈlektʃuːəl ˈprɒpəti/ luật pháp và sở hữu trí tuệ
open source/ˈəʊpən sɔːs/ mã nguồn mở
3.3

The Anatomy of a Class · ⁨Giải phẫu của một Lớp⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 3.3.A: Develop code to designate access and visibility constraints to classes, data, constructors, and methods.

  • 3.3.A.1 Data encapsulation is a technique in which the implementation details of a class are kept hidden from external classes. The keywords public and private affect the access of classes, data, constructors, and methods. The keyword private restricts access to the declaring class, while the keyword public allows access from classes outside the declaring class.
  • 3.3.A.2 In this course, classes are always designated public and are declared with the keyword class.
  • 3.3.A.3 In this course, constructors are always designated public.
  • 3.3.A.4 Instance variables belong to the object, and each object has its own copy of the variable.
  • 3.3.A.5 Access to attributes should be kept internal to the class in order to accomplish encapsulation. Therefore, it is good programming practice to designate the instance variables for these attributes as private unless the class specification states otherwise.
  • 3.3.A.6 Access to behaviors can be internal or external to the class. Methods designated as public can be accessed internally or externally to a class, whereas methods designated as private can only be accessed internally to the class.
Tiếng Việt

Mục tiêu học tập 3.3.A: Phát triển mã để chỉ định các ràng buộc truy cập và khả năng hiển thị cho các lớp, dữ liệu, khởi tạo (constructor) và phương thức.

  • 3.3.A.1 Đóng gói dữ liệu là kỹ thuật trong đó các chi tiết triển khai của một lớp được giữ bí mật khỏi các lớp bên ngoài. Các từ khóa public và private ảnh hưởng đến quyền truy cập của các lớp, dữ liệu, khởi tạo và phương thức. Từ khóa private giới hạn quyền truy cập vào lớp khai báo, trong khi từ khóa public cho phép truy cập từ các lớp bên ngoài lớp khai báo.
  • 3.3.A.2 Trong khóa học này, các lớp luôn được chỉ định public và được khai báo với từ khóa class.
  • 3.3.A.3 Trong khóa học này, các khởi tạo (constructors) luôn được chỉ định public.
  • 3.3.A.4 Biến instance thuộc về đối tượng, và mỗi đối tượng đều có bản sao riêng của biến đó.
  • 3.3.A.5 Quyền truy cập vào các thuộc tính nên được giữ bên trong lớp để đạt được sự đóng gói. Do đó, thực hành lập trình tốt là chỉ định các biến instance cho các thuộc tính này là private trừ khi tài liệu mô tả lớp quy định khác.
  • 3.3.A.6 Quyền truy cập vào các hành vi có thể là nội bộ hoặc ngoại bộ đối với lớp. Các phương thức được chỉ định là public có thể được truy cập cả nội bộ lẫn ngoại bộ so với một lớp, trong khi các phương thức được chỉ định là private chỉ có thể được truy cập nội bộ so với lớp.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

A class has three parts: instance variables 实例变量 (fields – the object's data), constructors (build objects), and methods (behavior). Fields are usually private; methods are usually public:

Tiếng Việt

Một lớp có ba phần: biến实例 (instance variables) (trường – dữ liệu của đối tượng), hàm khởi tạo (constructors) (tạo đối tượng), và phương thức (methods) (hành vi). Trường thường là private; phương thức thường là public:

Sơ đồ lớp: thuộc tính riêng tư và phương thức công khai
Sơ đồ lớp: thuộc tính riêng tư và phương thức công khai
public class Student {
    private String name;      // instance variable
    private int score;

    public Student(String n, int s) {   // constructor
        name = n;
        score = s;
    }
    public int getScore() { return score; }   // accessor
}
Một bản thiết kế kỹ thuật: một lớp là mẫu để xác định cách các đối tượng của loại đó được xây dựng
Một bản thiết kế kỹ thuật: một lớp là mẫu để xác định cách các đối tượng của loại đó được xây dựng
Explore · ⁨Khám phá⁩

See an object's fields as boxes · ⁨Xem các trường của đối tượng như những chiếc hộp⁩

A class groups related data (its fields) and methods. Each object gets its own set of field boxes; assigning to one changes that object only. · ⁨Một lớp nhóm dữ liệu liên quan (các trường) và phương thức. Mỗi đối tượng có riêng một tập hợp các hộp trường; gán cho một cái sẽ chỉ thay đổi đối tượng đó.⁩

Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
English Tiếng Việt
instance variables/ˈɪnstəns ˈveərɪəblz/ biến thuộc tính
constructor/kənˈstrʌktə/ constructor
overloading/ˌəʊvəˈləʊdɪŋ/ tải lại
accessor (getter)/əkˈsesə/ accessor (getter)
3.4

Constructors · ⁨Hàm Khởi Tạo⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 3.4.A: Develop code to declare instance variables for the attributes to be initialized in the body of the constructors of a class.

  • 3.4.A.1 An object's state refers to its attributes and their values at a given time and is defined by instance variables belonging to the object. This defines a has-a relationship between the object and its instance variables.
  • 3.4.A.2 A constructor is used to set the initial state of an object, which should include initial values for all instance variables. When a constructor is called, memory is allocated for the object and the associated object reference is returned. Constructor parameters, if specified, provide data to initialize instance variables.
  • 3.4.A.3 When a mutable object is a constructor parameter, the instance variable should be initialized with a copy of the referenced object. In this way, the instance variable does not hold a reference to the original object, and methods are prevented from modifying the state of the original object.
  • 3.4.A.4 When no constructor is written, Java provides a no-parameter constructor, and the instance variables are set to default values according to the data type of the attribute. This constructor is called the default constructor.
  • 3.4.A.5 The default value for an attribute of type int is 0. The default value of an attribute of type double is 0.0. The default value of an attribute of type boolean is false. The default value of a reference type is null.
Tiếng Việt

Mục tiêu học tập 3.4.A: Phát triển mã để khai báo các biến instance cho các thuộc tính sẽ được khởi tạo trong thân của các khởi tạo (constructors) của một lớp.

  • 3.4.A.1 Trạng thái của một đối tượng đề cập đến các thuộc tính và giá trị của chúng tại một thời điểm nhất định và được xác định bởi các biến instance thuộc về đối tượng. Điều này tạo ra mối quan hệ có-là giữa đối tượng và các biến instance của nó.
  • 3.4.A.2 Một khởi tạo (constructor) được sử dụng để thiết lập trạng thái ban đầu của một đối tượng, điều này nên bao gồm các giá trị ban đầu cho tất cả các biến instance. Khi một khởi tạo (constructor) được gọi, bộ nhớ được phân bổ cho đối tượng và tham chiếu đến đối tượng tương ứng được trả về. Các tham số khởi tạo (constructor), nếu được chỉ định, cung cấp dữ liệu để khởi tạo các biến instance.
  • 3.4.A.3 Khi một đối tượng có thể thay đổi (mutable) là một tham số khởi tạo (constructor), biến instance nên được khởi tạo bằng một bản sao của đối tượng được tham chiếu. Bằng cách này, biến instance không giữ tham chiếu đến đối tượng gốc, và các phương thức bị ngăn chặn việc thay đổi trạng thái của đối tượng gốc.
  • 3.4.A.4 Khi không có khởi tạo (constructor) nào được viết, Java cung cấp một khởi tạo (constructor) không tham số, và các biến instance được đặt thành các giá trị mặc định theo kiểu dữ liệu của thuộc tính. Khởi tạo (constructor) này được gọi là khởi tạo (constructor) mặc định.
  • 3.4.A.5 Giá trị mặc định cho một thuộc tính có kiểu int là 0. Giá trị mặc định của một thuộc tính có kiểu double là 0.0. Giá trị mặc định của một thuộc tính có kiểu boolean là false. Giá trị mặc định của một kiểu tham chiếu là null.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

A constructor 构造函数 has the same name as the class and no return type. It runs when you write new, and its job is to initialize the fields. A class can have several constructors with different parameter lists (overloading 重载); a no-argument constructor sets defaults.

Tiếng Việt

Một hàm khởi tạo có cùng tên với lớp và không có kiểu trả về. Nó chạy khi bạn viết new, và nhiệm vụ của nó là khởi tạo các trường. Một lớp có thể có nhiều hàm khởi tạo với danh sách tham số khác nhau (quá tải overload); một hàm khởi tạo không tham số sẽ đặt các giá trị mặc định.

3.5

Methods: How to Write Them · ⁨Phương thức: Cách Viết⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 3.5.A: Develop code to define behaviors of an object through methods written in a class using primitive values and determine the result of calling these methods.

  • 3.5.A.1 A void method does not return a value. Its header contains the keyword void before the method name.
  • 3.5.A.2 A non-void method returns a single value. Its header includes the return type in place of the keyword void.
  • 3.5.A.3 In non-void methods, a return expression compatible with the return type is evaluated, and the value is returned. This is referred to as return by value.
  • 3.5.A.4 The return keyword is used to return the flow of control to the point where the method or constructor was called. Any code that is sequentially after a return statement will never be executed. Executing a return statement inside a selection or iteration statement will halt the statement and exit the method or constructor.
  • 3.5.A.5 An accessor method allows objects of other classes to obtain a copy of the value of instance variables or class variables. An accessor method is a non-void method.
  • 3.5.A.6 A mutator (modifier) method is a method that changes the values of the instance variables or class variables. A mutator method is often a void method.
  • 3.5.A.7 Methods with parameters receive values through those parameters and use those values in accomplishing the method's task.
  • 3.5.A.8 When an argument is a primitive value, the parameter is initialized with a copy of that value. Changes to the parameter have no effect on the corresponding argument.
Tiếng Việt

Mục tiêu học tập 3.5.A: Phát triển mã để xác định hành vi của một đối tượng thông qua các phương thức được viết trong một lớp sử dụng các giá trị nguyên thủy và xác định kết quả của việc gọi các phương thức này.

  • 3.5.A.1 Một phương thức void không trả về giá trị. Header của nó chứa từ khóa void trước tên phương thức.
  • 3.5.A.2 Một phương thức không void trả về một giá trị duy nhất. Header của nó bao gồm kiểu trả về ở vị trí của từ khóa void.
  • 3.5.A.3 Trong các phương thức không void, một biểu thức trả về tương thích với kiểu trả về được đánh giá, và giá trị đó được trả về. Điều này được gọi là trả về theo giá trị.
  • 3.5.A.4 Từ khóa return được sử dụng để trả dòng điều khiển về điểm nơi phương thức hoặc khởi tạo (constructor) được gọi. Bất kỳ mã nào nằm tuần tự sau câu lệnh return sẽ không bao giờ được thực thi. Thực thi một câu lệnh return bên trong câu lệnh lựa chọn hoặc lặp sẽ dừng câu lệnh đó và thoát khỏi phương thức hoặc khởi tạo (constructor).
  • 3.5.A.5 Một phương thức truy cập (accessor method) cho phép các đối tượng của các lớp khác lấy một bản sao của giá trị các biến instance hoặc biến lớp. Một phương thức truy cập là một phương thức không void.
  • 3.5.A.6 Một phương thức thay đổi (mutator method) là một phương thức thay đổi giá trị của các biến instance hoặc biến lớp. Một phương thức thay đổi thường là một phương thức void.
  • 3.5.A.7 Các phương thức có tham số nhận giá trị thông qua các tham số đó và sử dụng các giá trị đó để hoàn thành nhiệm vụ của phương thức.
  • 3.5.A.8 Khi một đối số (argument) là một giá trị nguyên thủy, tham số được khởi tạo bằng một bản sao của giá trị đó. Sự thay đổi đối với tham số không có hiệu lực lên đối số tương ứng.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

A method has a signature, a return type, and a body. An accessor (getter) 访问器 returns information without changing the object; a mutator (setter) 修改器 changes a field. A method returning a value must have a return of the right type on every path; a void method returns nothing.

Tiếng Việt

Một phương thức có signature, kiểu trả về và thân. Một accessor (getter) trả về thông tin mà không thay đổi đối tượng; một mutator (setter) thay đổi một trường. Một phương thức trả về giá trị phải có một return đúng kiểu trên mọi đường dẫn; một void method trả về không gì cả.

public void setScore(int s) { score = s; }   // mutator
public String toString() { return name + ": " + score; }
Explore · ⁨Khám phá⁩

Follow a method call and its return · ⁨Theo dõi gọi phương thức và giá trị trả về⁩

Calling a method pushes a frame with its parameters; when it hits return, the frame pops and the value goes back to the caller. · ⁨Gọi một phương thức đẩy một khung với các tham số của nó; khi nó gặp return, khung bị loại bỏ và giá trị quay lại người gọi.⁩

Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
English Tiếng Việt
mutator (setter)/mjuːˈteɪtə/ mutator (setter)
static (class) variable/ˈstætɪk ˈveərɪəbl/ biến tĩnh (lớp)
3.6

Passing and Returning References of an Object · ⁨Truyền và Trả về Tham chiếu của một Đối tượng⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 3.6.A: Develop code to define behaviors of an object through methods written in a class using object references and determine the result of calling these methods.

  • 3.6.A.1 When an argument is an object reference, the parameter is initialized with a copy of that reference; it does not create a new independent copy of the object. If the parameter refers to a mutable object, the method or constructor can use this reference to alter the state of the object. It is good programming practice to not modify mutable objects that are passed as parameters unless required in the specification.
  • 3.6.A.2 When the return expression evaluates to an object reference, the reference is returned, not a reference to a new copy of the object.
  • 3.6.A.3 Methods cannot access the private data and methods of a parameter that holds a reference to an object unless the parameter is the same type as the method's enclosing class.
Tiếng Việt

Mục tiêu học tập 3.6.A: Phát triển mã để xác định hành vi của một đối tượng thông qua các phương thức được viết trong một lớp sử dụng các tham chiếu đối tượng và xác định kết quả của việc gọi các phương thức này.

  • 3.6.A.1 Khi một đối số là tham chiếu đến đối tượng, tham số được khởi tạo bằng một bản sao của tham chiếu đó; nó không tạo ra một bản sao độc lập mới của đối tượng. Nếu tham số trỏ đến một đối tượng có thể thay đổi, phương thức hoặc hàm khởi tạo có thể sử dụng tham chiếu này để thay đổi trạng thái của đối tượng. Đây là thực hành lập trình tốt nên không sửa đổi các đối tượng có thể thay đổi được truyền vào làm tham số trừ khi yêu cầu trong tài liệu mô tả.
  • 3.6.A.2 Khi biểu thức trả về đánh giá ra một tham chiếu đến đối tượng, thì tham chiếu đó sẽ được trả về, chứ không phải là tham chiếu đến một bản sao mới của đối tượng.
  • 3.6.A.3 Các phương thức không thể truy cập dữ liệu riêng tư và các phương thức riêng tư của một tham số chứa tham chiếu đến đối tượng, trừ khi tham số đó có cùng kiểu với lớp bao bọc phương thức.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English
= copies the reference, not the object

When you pass an object to a method, Java copies the reference, so the method acts on the same object – changes to its fields are visible to the caller. (Primitives are copied by value, so changes to them are not.) A method can also return a reference to an object. Because a String is immutable, passing one is safe; passing a mutable object lets a method change it.

Exam skill: know that mutating an object's fields inside a method affects the original, but reassigning the parameter (param = new...) does not affect the caller.

Worked example. Suppose s is a Student with score 50, and we call tweak(s):

Line (1) changes the object s points to, so the caller now sees 100. Line (2) makes the method's own copy of the reference point at a fresh object – the caller's s is untouched – and line (3) affects only that new object. After the call, s.getScore() is 100: the mutation stuck, the reassignment did not.

Tiếng Việt
= sao chép tham chiếu, không phải đối tượng

Khi bạn truyền một đối tượng vào phương thức, Java sao chép tham chiếu, nên phương thức tác động lên cùng một đối tượng – những thay đổi đối với các trường của nó sẽ hiển thị cho người gọi. (Kiểu nguyên sinh được sao chép theo giá trị, nên những thay đổi đối với chúng thì không.) Một phương thức cũng có thể trả về một tham chiếu đến một đối tượng. Vì một String là bất biến, nên việc truyền nó là an toàn; việc truyền một đối tượng có thể thay đổi được cho phép phương thức thay đổi nó.

Java truyền theo giá trị: phương thức nhận được một bản sao; truyền theo tham chiếu thực sự, mà Java thiếu, sẽ cho phép nó gán lại biến của người gọi
Java luôn truyền theo giá trị (bên trái): phương thức nhận được một bản sao của tham chiếu. Truyền theo tham chiếu thực sự (bên phải) — mà Java không có — sẽ cho phép một phương thức gán lại biến của chính người gọi.

Kỹ năng thi: hãy biết rằng việc thay đổi các trường của đối tượng bên trong một phương thức sẽ ảnh hưởng đến đối tượng gốc, nhưng gán lại tham số (param = new...) không ảnh hưởng đến người gọi.

Ví dụ minh họa. Giả sử s là một Student với điểm số 50, và chúng ta gọi tweak(s):

public static void tweak(Student a) {
    a.setScore(100);          // (1) mutates the shared object
    a = new Student("Z", 0);  // (2) repoints the local copy only
    a.setScore(5);            // (3) changes only the new local object
}

Dòng (1) thay đổi đối tượng mà s trỏ tới, nên người gọi giờ thấy 100. Dòng (2) khiến bản sao riêng của phương thức trỏ tới một đối tượng mới – s của người gọi không bị chạm vào – và dòng (3) chỉ ảnh hưởng đến đối tượng mới đó. Sau khi gọi, s.getScore() là 100: sự thay đổi đã gắn kết, sự gán lại thì không.

3.7

Class Variables and Class Methods · ⁨Biến Lớp và Phương thức Lớp⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 3.7.A: Develop code to define behaviors of a class through class methods.

  • 3.7.A.1 Class methods cannot access or change the values of instance variables or call instance methods without being passed an instance of the class via a parameter.
  • 3.7.A.2 Class methods can access or change the values of class variables and can call other class methods.

Learning Objective 3.7.B: Develop code to declare the class variables that belong to the class.

  • 3.7.B.1 Class variables belong to the class, with all objects of a class sharing a single copy of the class variable. Class variables are designated with the static keyword before the variable type.
  • 3.7.B.2 Class variables that are designated public are accessed outside of the class by using the class name and the dot operator, since they are associated with a class, not objects of a class.
  • 3.7.B.3 When a variable is declared final, its value cannot be modified.
Tiếng Việt

Mục tiêu học tập 3.7.A: Viết mã để xác định hành vi của một lớp thông qua các phương thức lớp.

  • 3.7.A.1 Các phương thức lớp không thể truy cập hoặc thay đổi giá trị của biến instance (biến thuộc tính) hoặc gọi các phương thức instance nếu không được truyền vào một đối tượng instance của lớp thông qua một tham số.
  • 3.7.A.2 Các phương thức lớp có thể truy cập hoặc thay đổi giá trị của biến lớp và có thể gọi các phương thức lớp khác.

Mục tiêu học tập 3.7.B: Viết mã để khai báo các biến lớp thuộc về lớp.

  • 3.7.B.1 Biến lớp thuộc về lớp, với tất cả các đối tượng của lớp chia sẻ một bản sao duy nhất của biến lớp. Biến lớp được chỉ định bằng từ khóa static trước kiểu biến.
  • 3.7.B.2 Biến lớp được chỉ định public được truy cập bên ngoài lớp bằng cách sử dụng tên lớp và toán tử chấm, vì chúng liên quan đến một lớp, không phải các đối tượng của lớp.
  • 3.7.B.3 Khi một biến được khai báo final, giá trị của nó không thể bị thay đổi.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English
static vs instance fields

A static (class) variable 类变量, marked static, is shared by all objects of the class – one copy total (e.g. a counter of how many objects exist). A static method belongs to the class and cannot use instance fields directly. Access them by class name: Student.getCount().

Tiếng Việt
trường tĩnh so với trường instance

Một biến tĩnh (lớp), được đánh dấu static, được chia sẻ bởi tất cả các đối tượng của lớp – chỉ có một bản sao duy nhất (ví dụ: bộ đếm số lượng đối tượng tồn tại). Một phương thức tĩnh thuộc về lớp và không thể sử dụng trực tiếp các trường instance. Truy cập chúng bằng tên lớp: Student.getCount().

3.8

Scope and Access · ⁨Phạm vi và Quyền truy cập⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 3.8.A: Explain where variables can be used in the code.

  • 3.8.A.1 Local variables are variables declared in the headers or bodies of blocks of code. Local variables can only be accessed in the block in which they are declared. Since constructors and methods are blocks of code, parameters to constructors or methods are also considered local variables. These variables may only be used within the constructor or method and cannot be declared to be public or private.
  • 3.8.A.2 When there is a local variable or parameter with the same name as an instance variable, the variable name will refer to the local variable instead of the instance variable within the body of the constructor or method.
Tiếng Việt

Mục tiêu học tập 3.8.A: Giải thích nơi các biến có thể được sử dụng trong mã nguồn.

  • 3.8.A.1 Biến cục bộ là các biến được khai báo trong phần đầu hoặc thân của các khối mã. Biến cục bộ chỉ có thể được truy cập trong khối mà nó được khai báo. Vì hàm khởi tạo và phương thức là các khối mã, các tham số của hàm khởi tạo hoặc phương thức cũng được coi là biến cục bộ. Những biến này chỉ có thể được sử dụng bên trong hàm khởi tạo hoặc phương thức và không thể được khai báo là public hay private.
  • 3.8.A.2 Khi có một biến cục bộ hoặc tham số có cùng tên với một biến instance, tên biến sẽ trỏ đến biến cục bộ thay vì biến instance bên trong thân của hàm khởi tạo hoặc phương thức.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

Scope 作用域 is where a name is visible. A local variable declared in a method exists only inside it; a parameter exists only in its method; an instance variable is visible throughout the object. Access modifiers control visibility across classes: private (this class only) versus public (anywhere). Local variables shadow fields of the same name – a source of bugs.

Tiếng Việt

Phạm vi (Scope) là nơi một tên có thể nhìn thấy. Một biến cục bộ được khai báo trong một phương thức chỉ tồn tại bên trong nó; một tham số chỉ tồn tại trong phương thức của nó; một biến instance có thể nhìn thấy khắp nơi trong đối tượng. Các bộ điều chỉnh quyền truy cập kiểm soát khả năng nhìn thấy xuyên suốt các lớp: private (chỉ lớp này) so với public (bất cứ đâu). Biến cục bộ che khuất (shadow) các trường có cùng tên – đây là nguồn gốc của lỗi.

Biến toàn cục có thể nhìn thấy ở mọi nơi; biến cục bộ chỉ bên trong khối của nó
Biến toàn cục có thể nhìn thấy ở mọi nơi; biến cục bộ chỉ bên trong khối của nó
Vocabulary · ⁨Từ vựng⁩ Train · ⁨Luyện tập⁩
English Tiếng Việt
Scope/skəʊp/ Phạm vi
3.9

The this Keyword · ⁨Từ khóa this⁩

Syllabus · ⁨Chương trình⁩
English

Learning Objective 3.9.A: Develop code for expressions that are self-referencing and determine the result of these expressions.

  • 3.9.A.1 Within an instance method or a constructor, the keyword this acts as a special variable that holds a reference to the current object—the object whose method or constructor is being called.
  • 3.9.A.2 The keyword this can be used to pass the current object as an argument in a method call.
  • 3.9.A.3 Class methods do not have a this reference.
Tiếng Việt

Mục tiêu học tập 3.9.A: Viết mã cho các biểu thức tự tham chiếu và xác định kết quả của các biểu thức này.

  • 3.9.A.1 Bên trong một phương thức instance hoặc hàm khởi tạo, từ khóa this hoạt động như một biến đặc biệt chứa tham chiếu đến đối tượng hiện tại—đó là đối tượng mà phương thức hoặc hàm khởi tạo đang được gọi.
  • 3.9.A.2 Từ khóa this có thể được dùng để truyền đối tượng hiện tại dưới dạng đối số trong một lời gọi phương thức.
  • 3.9.A.3 Các phương thức lớp không có tham chiếu this.

Source: College Board AP Course and Exam Description · ⁨Nguồn: Mô tả Khóa học và Bài thi College Board AP⁩

English

this is a reference to the current object. Use it to tell a field apart from a parameter with the same name, or to call another method of the same object:

Exam skill: when a constructor or setter's parameter has the same name as a field, you must write this.field = param – without this, the assignment does nothing useful.

Tiếng Việt

this là tham chiếu đến đối tượng hiện tại. Sử dụng nó để phân biệt một trường dữ liệu với tham số có cùng tên, hoặc để gọi một phương thức khác của cùng đối tượng:

public Student(String name, int score) {
    this.name = name;      // this.name is the field; name is the parameter
    this.score = score;
}

Kỹ năng làm bài thi: khi tham số của constructor hoặc setter có cùng tên với một trường dữ liệu, bạn bắt buộc phải viết this.field = param – nếu không có this, phép gán sẽ không thực hiện được tác dụng gì.

3.9

Exam tips · ⁨Mẹo làm bài thi⁩

English
  • Design with methods and classes: encapsulate data as private fields and expose behaviour through public methods.
  • Know the difference between an object and its class, and that objects are passed by value — the parameter gets a copy of the reference, so a method can change the object's state, but reassigning the parameter does not affect the caller (Java has no pass-by-reference).
  • Traverse arrays and ArrayLists safely — size is length vs .size(), and removing during a loop shifts indices.
  • Trace a recursive method to determine its result: find the base case first, then follow each recursive call to its return value (writing recursive code is outside the exam's scope).
  • Recognise inheritance vocabulary — superclass, subclass, method overriding, and that every class is a subclass of Object (designing and implementing inheritance is outside the exam's scope).
Tiếng Việt
  • Thiết kế với các phương thức và lớp: đóng gói dữ liệu thành các trường private và cung cấp hành vi thông qua các phương thức công khai.
  • Phân biệt giữa đối tượng và lớp của nó, và hiểu rằng đối tượng được truyền theo giá trị – tham số nhận được một bản sao của tham chiếu, vì vậy một phương thức có thể thay đổi trạng thái của đối tượng, nhưng việc gán lại cho tham số sẽ không ảnh hưởng đến hàm gọi (Java không có truyền theo tham chiếu).
  • Duyệt qua mảng và ArrayList an toàn — kích thước là length so với .size(), và việc xóa phần tử trong vòng lặp sẽ làm dịch chuyển chỉ mục.
  • Theo dõi một phương thức đệ quy để xác định kết quả của nó: tìm trường hợp cơ sở trước, sau đó đi theo từng lời gọi đệ quy đến giá trị trả về (viết mã đệ quy nằm ngoài phạm vi đề thi).
  • Nhận biết từ vựng về kế thừa — lớp cha, lớp con, ghi đè phương thức, và mọi lớp đều là lớp con của Object (thiết kế và triển khai kế thừa nằm ngoài phạm vi đề thi).

Interactive lessons on this topic · ⁨Bài học tương tác về chủ đề này⁩

Work through it step by step, with instant-check exercises. · ⁨Làm theo từng bước, kèm theo bài tập kiểm tra ngay lập tức.⁩

Past Papers · ⁨Đề thi cũ⁩

More topics in AP Computer Science A · ⁨AP Khoa học máy tính A⁩ · ⁨Nhiều chủ đề hơn trong AP Computer Science A · ⁨AP Khoa học máy tính A⁩⁩

Log in or create account · ⁨Đăng nhập hoặc tạo tài khoản⁩

IGCSE, A-Level & AP