Object trên Smalltal k Thuộc tính thường và thuộc tính indexe d Các thành phần cho đối tượng và thành phần cho lớp

Một phần của tài liệu thực hành ngôn ngữ lập trình (Trang 77 - 79)

phần cho đối tượng và thành phần cho lớp

Một đối tượng trên ngôn ngữ Smalltalk cũng bao gồm các thành phần là các thuộc tính và các phương thức. Các thuộc tính của một đối tượng có thể chia thành hai loại: các thuộc tính thường, là các thuộc tính được đặt tên và truy xuất thông qua tên, và các thuộc tính indexed, tức là các thuộc tính được truy xuất qua chỉ số. Mỗi đối tượng sẽ có một danh sách các thuộc tính indexed, tuy nhiên danh sách này được mặc định là rỗng. Chỉ có các lớp thuộc lớp con của lớp Collection mới được cung cấp các phương thức đểđiều khiển hữu hiệu các thuộc tính indexed. Các thuộc tính indexed không có tên vì được truy xuất qua chỉ số, và chỉ có ý nghĩa khi chương trình thực thi vì ban đầu chúng luôn được khởi động là một danh sách rỗng, vì vậy chúng không xuất hiện trong cửa sổ con hiển thị các thuộc tính của các lớp.

Trên ngôn ngữ Smalltalk, các thành phần của một đối tượng có thể chia thành hai phần: thành phần dành cho các đối tượng (instance member) và thành phần dành cho cả lớp (class member).

Các thành phần dành cho mỗi đối tượng là độc lập. Mỗi đối tượng sẽ có các giá trị thuộc tính riêng, và sẽ có các phương thức riêng. Các phương thức riêng này sẽđược gọi mỗi khi đối tượng nhận được thông điệp tương ứng.

Trong khi đo, các thuộc tính lớp được dùng chung cho tòan bộ các đối tượng thuộc cùng một lớp. Khi một thuộc tính lớp của một đối tượng bị thay đổi, thì thành phần tương ứng này trên tất cả các đối tượng thuộc cùng lớp với đối tượng đó sẽ bị thay đổi theo ngay lập tức.

Các phương thức lớp là các phương thức nhằm trả lời cho các thông điệp gửi đến cho cả lớp. Khi một thông điệp được truyền đến không phải cho một đối tượng nào, mà cho cả một lớp, thì phương thức lớp tương ứng sẽđược gọi để trả lời thông điệp này. (Xem hình 1)

Ví dụ: Float pi.

Ở đây nhận thông điệp là một lớp (Float) thay vì là một số thực bất kỳ nào đó, và do lớp Float được xây dựng một phương thức lớp mang tên pi, phương thức này sẽđược thực thi và trả lại kết quả (3.141593)

2. Các literal - object: Integer, Float, Character, Boolean, Array, String, Context

Literal là các hằng theo ký tự, trong đó giá trị của hằng phụ thuộc vào các ký tựđã tạo nên tên hằng.

Đối với Smalltalk, các đối tượng hằng theo ký tự là các đối tượng được định danh bằng chính các hằng đó, trong đó lớp của đối tượng và giá trị các thành phần của đối tượng phụ thuộc vào dạng thức của hằng.

Các hằng theo ký tựđược định nghĩa sẳn bởi ngôn ngữ:

Integer: Các đối tượng thuộc lớp Integer đại diện cho các số nguyên, và có một giá trị tương ứng với một số nguyên. Mỗi chuỗi ký hiệu số (1, 23, 456…) đại diện cho một đối tượng thuộc lớp này và có giá trị bằng đúng với số tương ứng với chuỗi ký hiệu đó.

Float: Các đối tượng thuộc lớp Float đại diện cho các số thực, và có một giá trị tương ứng với một số thực. Mỗi chuỗi ký hiệu số thực (1.5, 2.31, 456.0000…) đại diện cho một đối tượng thuộc lớp này và có giá trị bằng đúng với số tương ứng với chuỗi ký hiệu đó.

Character: Các đối tượng thuộc lớp Character đại diện cho một ký tự trong bảng ascii. Mỗi chuỗi ký hiệu mởđầu bằng ký tự $ và một ký tự bất kỳ đại diện cho một đối tượng thuộc lớp Character và có giá trị bằng với ký tựđứng sau ký tự $. Ví dụ: $a, $b, $e.

Lớp Character có định nghĩa một phương thức lớp có tên whiteSpace, kết quả sẽ trả về ký tự trống (blank).

Boolean: Các đối tượng thuộc lớp Boolean đại diện cho các giá trị luận lý true và false, đại diện bởi các hằng ‘true’ và ‘false’.

Array: Các đối tượng thuộc lớp Array đại diện cho các danh sách, trong đó mỗi phần tử của danh sách là một đối tượng thuộc một lớp bất kỳ. Các phần tử của danh sách sẽ tương ứng với thuộc tính indexed của đối tượng.

Một đối tượng thuộc lớp Array có thể biểu diễn dưới dạng một hằng bao gồm chuỗi ký tự sau: mởđầu là ký tự #, sau đó là các hằng tương ứng với các phần tử của danh sách được đặt giữa cặp ký hiệu đóng mở ngoặc.

Ví dụ: #(2 3 4 5)

Lưu ý: Biểu diễn Array dưới dạng hằng như trên chỉ có thể sử dụng với các array mà mỗi phần tử của nó có thể biểu diễn bằng một hằng khác.

String: Có thể coi String như một array đặc biệt, trong đó mỗi phần tử của array này là ký tự. Một hằng thuộc lớp string có thể biểu diễn dưới dạng một chuỗi ký tựđặt giữa cặp ký tự nháy đơn (‘), trong đó mỗi ký tự của chuỗi ký hiệu này lần lượt tương ứng với mỗi ký tự trong dãy phần tử của đối tượng.

Ví dụ: ‘abcd’ ‘a’ ‘’

Context:

Smalltalk đưa ra khái niệm về một lớp đặc biệt gọi là Context. Một đối tượng thuộc về lớp này là một đoạn lệnh nằm giữa cặp ký hiệu [,], gần giống như khái niệm về khối hoặc phát biểu ghép trên các ngôn ngữ có cấu trúc. Tuy nhiên một đoạn lệnh như vậy không đơn thuần là một phát biểu ghép mà là một đối tượng thuộc về lớp Context này.

Ví dụ:

[a:=2. b:= a+ b. ‘sd’ at: b.]

Các đối tượng thuộc lớp Context này có thể có đối số, có thể coi như các biến cục bộ của khối. Đối sốđược khai báo bằng ký hiệu ‘:’, tên đối số và ký hiệu ‘|’ ngay sau ký tự ‘[‘. Ví dụ:

[:i :j | a:= i + j]

MetaClass: Bất kỳ một chuỗi danh hiệu nào trùng với tên một lớp đều là một hằng tương ứng với một đối tượng thuộc lớp MetaClass đại diện cho lớp cùng tên. Khái niệm về MetaClass sẽđược giải thích sau.

nil: Chuỗi ký hiệu nil đại diện cho một giá trị rỗng, không có giá trị.

Một phần của tài liệu thực hành ngôn ngữ lập trình (Trang 77 - 79)

Tải bản đầy đủ (PDF)

(103 trang)