Thắc mắc trong hướng đối tượng (Đối tượng và lớp)
Chào các ae, mình đang thắc mắc ở chỗ :
- Biến local
- Biến instance
- Biến class
không biết phân biệt giữa các biến, nếu các ae có thể giúp thì xin cho mình thêm cái ví dụ, mình cảm ơn
Trích từ bài viết :
Biến Local: Các biến được định nghĩa bên trong các phương thức, constructor hoặc block code được gọi là biến Local. Biến này sẽ được khai báo và khởi tạo bên trong phương thức và biến này sẽ bị hủy khi phương thức đã hoàn thành.
Biến Instance: Các biến instance là các biến trong một lớp nhưng ở bên ngoài bất kỳ phương thức nào. Những biến này được khởi tạo khi lớp này được tải. Các biến instance có thể được truy cập từ bên trong bất kỳ phương thức, constructor hoặc khối nào của lớp cụ thể đó.
Biến Class: Các biến class là các biến được khai báo với một lớp, bên ngoài bất kỳ phương thức nào, với từ khóa static.
Giả sử mình có 1 class Student
Ví dụ mỗi đối tượng của class Student có một ID, name riêng thì ID, name chính là Instance variables,
Nhiều đói tượng của class Student có thể dùng chung 1 ClassID nên ClassID phải set stactic nên gọi là Class variable (biến lớp).
Còn trong phương thức showAge() có sử dụng 1 biến là age, biến náy sẽ bị hủy khi đối tượng hoàn thành phưong thức đó nên gọi là biến local
Oops! Mấy khái niệm này dịch sang tiếng Việt mình đúng là không phải dễ hiểu. Tôi đọc cuốn sách “Object Oriented Thought Process,3rd Edition by Matt Weisfeld”, ở chương 3 “Advanced Object-Oriented Concepts”, phần “The Concept of Scope”, thấy tác giả giải thích khá rõ về mấy khái niệm bạn vừa thắc mắc nên đề xuất bạn nên đọc thử.
Đây là bản tóm tắt của tôi:
The Concept of Scope
Multiple objects can be instantiated from a single class. Each of these objects has a unique identify and state and is allocated its own separated memory. Methods represent the behaviors of an object; the state of the object is represented by attributes.
Local attributes are owned by a specific method.
The compiler will concern the above situation as “method1.count” and “method2.count” in order to know removing the corresponding “count” when the method is terminated.
Object attributes are shared for their own methods but are not shared between different objects.
There is only one copy of “count” and both assignments operate in “method1” and “method2” on the same copy in memory.
There are actually three separate instances of “count”.
Class attributes are allocated a single piece of memory for all objects instantiated from the class.
All objects of the class “Number” use the same memory location for “count”.