Nói cách khác, đối tượng là một thực thể có trạng thái và hành vi. Ở đây, trạng thái có nghĩa là dữ liệu và hành vi có nghĩa là chức năng
Đối tượng là một thực thể thời gian chạy, nó được tạo trong thời gian chạy
Đối tượng là một thể hiện của một lớp. Tất cả các thành viên của lớp có thể được truy cập thông qua đối tượng
Hãy xem một ví dụ để tạo đối tượng của lớp sinh viên sử dụng s1 làm biến tham chiếu
Trong ví dụ này, Student là kiểu và s1 là biến tham chiếu đề cập đến thể hiện của lớp Student
Trong C++, lớp là một nhóm các đối tượng giống nhau. Nó là một khuôn mẫu mà từ đó các đối tượng được tạo ra. Nó có thể có các trường, phương thức, hàm tạo, v.v.
Hãy xem một ví dụ về lớp C++ chỉ có ba trường
Ví dụ đối tượng và lớp C++
Hãy xem một ví dụ về lớp có hai trường. id và tên. Nó tạo thể hiện của lớp, khởi tạo đối tượng và in giá trị đối tượng
đầu ra
Ví dụ lớp C++. Khởi tạo và hiển thị dữ liệu thông qua phương thức
Hãy xem một ví dụ khác về lớp C++ nơi chúng tôi đang lưu trữ và hiển thị thông tin nhân viên bằng phương thức
Mục đích chính của ngôn ngữ lập trình Objective-C là thêm hướng đối tượng vào ngôn ngữ lập trình C và các lớp là tính năng trung tâm của Objective-C hỗ trợ lập trình hướng đối tượng và thường được gọi là các loại do người dùng định nghĩa
Một lớp được sử dụng để chỉ định hình thức của một đối tượng và nó kết hợp biểu diễn dữ liệu và các phương thức để thao tác dữ liệu đó thành một gói gọn gàng. Dữ liệu và phương thức trong một lớp được gọi là thành viên của lớp
Đặc điểm mục tiêu-C
Lớp được định nghĩa trong hai phần khác nhau là @interface và @implementation
Hầu hết mọi thứ đều ở dạng đối tượng
Các đối tượng nhận thông điệp và các đối tượng thường được gọi là người nhận
Các đối tượng chứa các biến thể hiện
Đối tượng và biến thể hiện có phạm vi
Các lớp ẩn việc triển khai đối tượng
Các thuộc tính được sử dụng để cung cấp quyền truy cập vào các biến thể hiện của lớp trong các lớp khác
Định nghĩa lớp khách quan-C
Khi bạn xác định một lớp, bạn xác định một kế hoạch chi tiết cho một kiểu dữ liệu. Điều này không thực sự xác định bất kỳ dữ liệu nào, nhưng nó xác định ý nghĩa của tên lớp, tức là đối tượng của lớp sẽ bao gồm những gì và những hoạt động nào có thể được thực hiện trên một đối tượng như vậy
Định nghĩa lớp bắt đầu bằng từ khóa @interface theo sau là tên giao diện [lớp]; . Trong Objective-C, tất cả các lớp đều bắt nguồn từ lớp cơ sở gọi là NSObject. Nó là siêu lớp của tất cả các lớp Objective-C. Nó cung cấp các phương thức cơ bản như cấp phát bộ nhớ và khởi tạo. Ví dụ: chúng tôi đã xác định kiểu dữ liệu Hộp bằng cách sử dụng lớp từ khóa như sau -
@interface Box:NSObject { //Instance variables double length; // Length of a box double breadth; // Breadth of a box } @property[nonatomic, readwrite] double height; // Property @end
Các biến thể hiện là riêng tư và chỉ có thể truy cập được bên trong triển khai lớp
Cấp phát và khởi tạo đối tượng Objective-C
Một lớp cung cấp các bản thiết kế cho các đối tượng, vì vậy về cơ bản một đối tượng được tạo ra từ một lớp. Chúng ta khai báo các đối tượng của một lớp với chính xác kiểu khai báo mà chúng ta khai báo các biến kiểu cơ bản. Các câu lệnh sau khai báo hai đối tượng của lớp Box −
Box box1 = [[Box alloc]init]; // Create box1 object of type Box Box box2 = [[Box alloc]init]; // Create box2 object of type Box
Cả hai đối tượng box1 và box2 sẽ có bản sao thành viên dữ liệu riêng
Truy cập các thành viên dữ liệu
Các thuộc tính của các đối tượng của một lớp có thể được truy cập bằng cách sử dụng toán tử truy cập thành viên trực tiếp [. ]. Hãy để chúng tôi thử ví dụ sau để làm rõ mọi thứ -
#import @interface Box:NSObject { double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box } @property[nonatomic, readwrite] double height; // Property -[double] volume; @end @implementation Box @synthesize height; -[id]init { self = [super init]; length = 1.0; breadth = 1.0; return self; } -[double] volume { return length*breadth*height; } @end int main[] { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Box *box1 = [[Box alloc]init]; // Create box1 object of type Box Box *box2 = [[Box alloc]init]; // Create box2 object of type Box double volume = 0.0; // Store the volume of a box here // box 1 specification box1.height = 5.0; // box 2 specification box2.height = 10.0; // volume of box 1 volume = [box1 volume]; NSLog[@"Volume of Box1 : %f", volume]; // volume of box 2 volume = [box2 volume]; NSLog[@"Volume of Box2 : %f", volume]; [pool drain]; return 0; }
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau -
2013-09-22 21:25:33.314 ClassAndObjects[387:303] Volume of Box1 : 5.000000 2013-09-22 21:25:33.316 ClassAndObjects[387:303] Volume of Box2 : 10.000000
Tính chất
Các thuộc tính được giới thiệu trong Objective-C để đảm bảo rằng biến thể hiện của lớp có thể được truy cập bên ngoài lớp
Các phần khác nhau là khai báo thuộc tính như sauCác thuộc tính bắt đầu bằng @property, là một từ khóa
Nó được theo sau bởi các từ xác định quyền truy cập, là nonatomic hoặc Atomic, readwrite hoặc readonly và Strong,Unsafe_unretained hoặcYếu. Điều này thay đổi dựa trên loại biến. Đối với bất kỳ loại con trỏ nào, chúng ta có thể sử dụng Strong, __unsafe_unretained hoặc Weak. Tương tự như vậy đối với các loại khác, chúng ta có thể sử dụng readwrite hoặc readonly
Tiếp theo là kiểu dữ liệu của biến
Cuối cùng, chúng ta có tên thuộc tính được kết thúc bằng dấu chấm phẩy
Chúng ta có thể thêm câu lệnh tổng hợp trong lớp triển khai. Nhưng trong XCode mới nhất, phần tổng hợp được XCode đảm nhận và bạn không cần đưa vào câu lệnh tổng hợp
Chỉ có thể với các thuộc tính chúng ta có thể truy cập các biến thể hiện của lớp. Trên thực tế, các phương thức getter và setter nội bộ được tạo cho các thuộc tính
Ví dụ: giả sử chúng ta có thuộc tính @property [không nguyên tử, chỉ đọc] BOOL isDone. Dưới mui xe, có setters và getters được tạo như hình bên dưới