Một phương thức thể hiện đặc biệt trong một lớp là gì?

Các mệnh đề khác ngoài val và phương thức có thể được sử dụng trong khai báo lớp. chúng tôi sẽ giới thiệu chúng khi cần thiết

Ví dụ lớp học đầu tiên của chúng tôi
Chúng tôi bắt đầu với điểm lớp không thể tránh khỏi
  • các trường dữ liệu x và y chứa tọa độ của điểm,
  • hai phương pháp cung cấp quyền truy cập vào các trường dữ liệu (get_x và get_y),
  • hai phương pháp dịch chuyển (moveto. chuyển vị tuyệt đối) và (rmoveto. chuyển vị tương đối),
  • một phương thức trình bày dữ liệu dưới dạng một chuỗi (to_string),
  • một phương pháp tính toán khoảng cách đến điểm từ điểm gốc (khoảng cách)

# class point (x_init,y_init) =
object
val mutable x = x_init
val mutable y = y_init
method get_x = x
method get_y = y
method moveto (a,b) = x <- a ; y <- b
method rmoveto (dx,dy) = x <- x + dx ; y <- y + dy
method to_string () =
"( " ^ (string_of_int x) ^ ", " ^ (string_of_int y) ^")"
method distance () = sqrt (float(x*x + y*y))
end ;;
Lưu ý rằng một số phương thức không cần tham số; . Chúng ta thường truy cập các biến thể hiện bằng các phương thức không tham số

Sau khi chúng ta khai báo điểm lớp, hệ thống in ra văn bản sau

class point :
int * int ->
object
val mutable x : int
val mutable y : int
method distance : unit -> float
method get_x : int
method get_y : int
method moveto : int * int -> unit
method rmoveto : int * int -> unit
method to_string : unit -> string
end

Văn bản này chứa hai mẩu thông tin. Đầu tiên, loại cho các đối tượng của lớp; . Loại đối tượng là danh sách tên và loại phương thức trong lớp của nó. Trong ví dụ của chúng tôi, điểm là viết tắt của

  
< distance : unit -> unit; get_x : int; get_y : int;
moveto : int * int -> unit; rmoveto : int * int -> unit;
to_string : unit -> unit >
Tiếp theo, chúng ta có một hàm tạo cho các thể hiện của điểm lớp, có kiểu là int*int -> oint. Hàm tạo cho phép chúng ta xây dựng các đối tượng điểm (chúng ta sẽ chỉ nói ngắn gọn là ``điểm'') từ các giá trị ban đầu được cung cấp làm đối số. Trong trường hợp này, chúng tôi xây dựng một điểm từ một cặp số nguyên (có nghĩa là vị trí ban đầu). Điểm xây dựng được sử dụng với từ khóa mới

Có thể định nghĩa các loại lớp


# type simple_point = < get_x : int; get_y : int; to_string : unit -> unit > ;;
type simple_point = < get_x : int; get_y : int; to_string : unit -> unit >

Ghi chú


Điểm loại không lặp lại tất cả các thông tin được hiển thị sau khi khai báo lớp. Biến thể hiện không được hiển thị trong loại. Chỉ các phương thức mới có quyền truy cập vào các biến thể hiện này

Cảnh báo


Khai báo lớp là khai báo kiểu. Do đó, nó không thể chứa biến kiểu tự do

Chúng ta sẽ quay lại điểm này sau khi xử lý các ràng buộc kiểu (page ) và các lớp được tham số hóa (page )

Một ký hiệu đồ họa cho các lớp học

Chúng tôi điều chỉnh ký hiệu UML cho cú pháp của các loại CAML khách quan. Các lớp được biểu thị bằng một hình chữ nhật có ba phần
  • phần trên cùng hiển thị tên của lớp,
  • phần giữa liệt kê các thuộc tính (trường dữ liệu) của một thể hiện lớp,
  • phần dưới cùng hiển thị các phương thức của một thể hiện của lớp
Hình 15. 1 đưa ra một ví dụ về biểu diễn đồ họa cho lớp caml

Một phương thức thể hiện đặc biệt trong một lớp là gì?

Hình 15. 1. Biểu diễn đồ họa của một lớp


Nhập thông tin cho các trường và phương thức của một lớp có thể được thêm vào

Tạo phiên bản

Một đối tượng là một giá trị của một lớp, được gọi là một thể hiện của lớp. Các thể hiện được tạo với cấu trúc chung nguyên thủy mới, lấy lớp và giá trị khởi tạo làm đối số

cú pháp


tên mới expr1. exprn
Ví dụ sau tạo một số phiên bản của điểm lớp, từ các giá trị ban đầu khác nhau.

# let p1 = new point (0,0);;
val p1 : point =
# let p2 = new point (3,4);;
val p2 : point =
# let coord = (3,0);;
val coord : int * int = 3, 0
# let p3 = new point coord;;
val p3 : point =

Trong CAML mục tiêu, hàm tạo của một lớp là duy nhất, nhưng bạn có thể xác định hàm make_point cụ thể của riêng mình để tạo điểm


# let make_point x = new point (x,x) ;;
val make_point : int -> point =
# make_point 1 ;;
- : point =

gửi tin nhắn

Ký hiệu # được sử dụng để gửi tin nhắn đến một đối tượng. 2

cú pháp


obj1#tên p1. pn
Thông báo có tên phương thức ``name'' được gửi đến đối tượng obj. Các đối số p1,. , pn như mong đợi bởi tên phương thức. Phương thức phải được định nghĩa bởi lớp của đối tượng, tôi. e. có thể nhìn thấy trong loại. Các loại đối số phải phù hợp với các loại tham số hình thức. Ví dụ sau đây cho thấy một số truy vấn được thực hiện trên các đối tượng từ điểm lớp.

# p1#get_x;;
- : int = 0
# p2#get_y;;
- : int = 4
# p1#to_string();;
- : string = "( 0, 0)"
# p2#to_string();;
- : string = "( 3, 4)"
# if (p1#distance()) = (p2#distance())
then print_string ("That's just chance\n")
else print_string ("We could bet on it\n");;
We could bet on it
- : unit = ()

Từ quan điểm loại, các đối tượng của điểm loại có thể được sử dụng bởi các hàm đa hình của CAML Mục tiêu, giống như bất kỳ giá trị nào khác trong ngôn ngữ

Một thể hiện cụ thể của một lớp là gì?

Một thể hiện của một lớp là một đối tượng. Nó còn được gọi là một đối tượng lớp hoặc thể hiện của lớp. Như vậy, khởi tạo có thể được gọi là xây dựng. Bất cứ khi nào giá trị thay đổi từ đối tượng này sang đối tượng khác, chúng được gọi là biến thể hiện . Các biến này là cụ thể cho một trường hợp cụ thể.

Phương thức nào sau đây là phương thức thể hiện đặc biệt của một lớp?

Hàm khởi tạo là một phương thức thể hiện đặc biệt trong một lớp.

Phương pháp đặc biệt là gì?

Tất cả các kiểu dữ liệu tích hợp đều triển khai một tập hợp các phương thức đối tượng đặc biệt . Tên của các phương thức đặc biệt luôn được đặt trước và theo sau bởi dấu gạch dưới kép (__). Các phương thức này được trình thông dịch kích hoạt tự động khi chương trình thực thi.

Các phương pháp thể hiện là gì?

Phương thức thể hiện là các phương thức yêu cầu phải tạo một đối tượng thuộc lớp của nó trước khi có thể gọi nó . Để gọi một phương thức thể hiện, chúng ta phải tạo một Đối tượng của lớp mà phương thức đó được định nghĩa.