Objective-C đến từ đâu? C ++ hay C?


8

Tôi rất bối rối về ngôn ngữ lập trình này, Objective-C, mà tôi nghe nói được sử dụng để phát triển các ứng dụng iOS.

Tôi biết rằng nó sử dụng các nguyên tắc của OOP. Sẽ dễ học hơn nếu tôi đã biết C ++? Tên của nó là gì? nó có phải là sự kết hợp giữa ngôn ngữ lập trình C và các nguyên tắc OOP mà tôi sử dụng trong C ++ không?

Câu trả lời:


12

Brad Cox và bạn bè đã thêm một lớp Smalltalk mỏng lên trên C.

Do đó, Objective-C có nhiều điểm tương đồng với phong cách gửi tin nhắn rất năng động của Smalltalk so với C ++.

Một điểm khác biệt chính là trong Objective-C, bạn không quá lo lắng về thứ gì đó là gì: bạn quan tâm đến những thông điệp gì đó hiểu. Bạn có thể có các đối tượng thay đổi tập hợp các thông điệp mà họ hiểu, trong thời gian chạy.

Phải nói rằng hai ngôn ngữ có những ý tưởng rất khác nhau về OO là gì, nhiều ý tưởng / nguyên tắc vẫn được chia sẻ: kế thừa, ủy quyền, đa hình, v.v. Bạn sẽ dễ dàng tìm thấy nhiều ví dụ về các mẫu OO khác nhau trong mã được viết bằng một trong hai ngôn ngữ.


2

Những người khác đã chỉ ra rằng Objective-C là một lớp OO kiểu SmallTalk được thêm vào C, tôi sẽ thêm rằng C ++ bắt đầu như một lớp OO kiểu Simula được thêm vào C (và sau đó các mẫu được thêm vào để tạo ra một thước đo tốt).


1

Từ miệng ngựa :

Objective-C là ngôn ngữ lập trình lai [[]] được hình thành bằng cách ghép kiểu lập trình hướng đối tượng Smalltalk-80 lên gốc ghép ngôn ngữ C. Objective-C thêm chính xác một loại dữ liệu mới, đối tượng, cho những C đã cung cấp và chính xác một thao tác mới, biểu thức thông báo. Giống như Smalltalk-80, Objective-C không phân biệt thời gian biên dịch giữa các loại (các lớp) đối tượng khác nhau.

Để giải quyết "Sẽ dễ học hơn nếu tôi đã biết C ++?" Tôi không nghĩ vậy, nhưng tôi cũng không nghĩ nó sẽ đau. Bạn có thể thoải mái hơn với các khái niệm như các lớp và các đối tượng nếu bạn đã biết C ++, nhưng sẽ thấy rằng Objective-C thực hiện các lớp theo một cách rất khác với C ++. Để mượn một số thuật ngữ từ Stroustrup, tất cả các thông báo ObjC là "ảo" và có thể được xác định lại bởi các lớp con hoặc thậm chí các triển khai của chúng được hoán đổi trên lớp định nghĩa. Điều này và các phần tinh tế khác có thể hủy bỏ một số bước đầu bạn sẽ nhận được từ việc biết C ++.


Các phương thức của Objective-C ảo hơn nhiều ("chỉ tồn tại rõ ràng") so với C ++ virtual: Một đối tượng thậm chí không cần hiểu một thông điệp để xử lý nó. Nó có thể lặng lẽ chuyển tiếp tin nhắn đến một số đối tượng nội bộ có thể hiểu tin nhắn, cho phép ủy quyền minh bạch để hỗ trợ, giả sử, lười tải một thể hiện từ cơ sở dữ liệu.
Frank Shearar

Thật vậy, tôi đã mượn thuật ngữ để làm cho ý tưởng quen thuộc. C ++ sử dụng vtables để gửi các phương thức ảo, mà ObjC chỉ mới được thêm gần đây dưới dạng tối ưu hóa hiệu suất.

0

Mục tiêu-C là C, với một lớp Smalltalk.

Theo Wikipedia :

Objective-C là ngôn ngữ lập trình hướng đối tượng, phản chiếu, thêm thông điệp kiểu Smalltalk vào ngôn ngữ lập trình C.

Nó là hướng đối tượng, nhưng không phải từ C ++ trực tiếp.

Vì vậy, có, đó là C với một số khả năng OO của Smalltalk .


5
cũng không hẳn là từ C ++. C ++ mượn mô hình lớp của nó từ Simula và hai ngôn ngữ đang được làm việc cùng một lúc.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.