Lập trình hướng đối tượng: Tại sao lại hướng về hướng đi?


14

Tôi hầu hết các cách thông qua mức độ lập trình trò chơi của tôi. Đây không phải là bằng cấp về khoa học máy tính, vì vậy rất nhiều lý thuyết được sử dụng để xây dựng danh mục đầu tư thực tế và những gì tôi thấy là học JIT, điều này rõ ràng quan trọng hơn trong ngành công nghiệp trò chơi. Chủ đề đầu tiên là "Giới thiệu về lập trình hướng đối tượng".

Cụm từ đó không làm phiền tôi cho đến khi tôi biết về các mô hình lập trình khác nhau (Tôi nhận được danh sách này từ https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms ):

  • Bắt buộc
  • Chức năng
  • Thủ tục
  • Cấu trúc
  • Sự kiện hướng
  • Hướng đối tượng
  • Tuyên bố
  • Dựa trên tự động

Tôi hiểu rằng đây không phải là một danh sách đầy đủ và không phải tất cả các khái niệm này đều giống nhau và hầu hết chúng đều không độc quyền, nhưng tôi không hiểu tại sao hầu hết chúng chỉ nhận được một từ - bắt buộc; chức năng; khai báo - nhưng khi chúng ta nói về lập trình với các đối tượng, chúng ta phải làm rõ rằng chúng ta được định hướng xung quanh các đối tượng đó. Chúng ta không thể sử dụng các đối tượng? Chúng ta không thể đồ vật sao? Tại sao họ phải định hướng chúng ta, như ngôi sao dẫn đường của chúng ta?

Nhìn vào đây ( https://en.wikipedia.org/wiki/Object-oriented_programming ), không nơi nào sử dụng thuật ngữ "định hướng" được gọi là thuật ngữ riêng của nó. Chỉ có "đối tượng" được giải thích.

Ngoài ra, tôi có thể thấy vì những lý do thực tế tại sao Event-Driven được sử dụng, bởi vì Lập trình sự kiện đã là một việc bạn làm khi bạn đang điều hành một hội nghị và Lập trình Automata làm cho nó giống như bạn đang thiết lập một dây chuyền sản xuất robot, Vì vậy, nó giúp để có thêm từ làm rõ ở đó.

Điều gì làm cho Lập trình đối tượng, như một cụm từ, không đủ để mô tả những gì chúng ta làm khi chúng ta sử dụng các đối tượng trong lập trình của mình?

Rõ ràng từ giọng điệu của tôi, tôi không quá thích từ "định hướng". Nó làm tôi nhớ đến thời gian làm phóng viên tòa án, lắng nghe luật sư sau khi luật sư sử dụng cụm từ "liên quan đến" như một loại đánh dấu bằng lời nói. Nó không có nghĩa gì cả; đó chỉ là một thuật ngữ mà họ dùng để lấp đầy không khí trong khi họ cố gắng nghĩ xem nên nói gì tiếp theo. Tuy nhiên, tôi không cố gắng ủng hộ việc thay đổi ngôn ngữ, tôi chỉ hỏi tại sao nó lại như vậy. Nếu ai đó biết lý do tại sao nó được biết đến theo cách đó vì lý do thuần túy lịch sử, lịch sử, thì đó là câu trả lời. Sẽ là đạn dược nếu tôi quyết định lãng phí thời gian của mình để ủng hộ việc thay đổi ngôn ngữ.

Mặt khác, nếu có thực sự là một lý do rất hữu ích cho lý do tại sao một ngôn ngữ hoặc đoạn mã phải chỉ đối với các đối tượng, để loại trừ tất cả các hướng khác, như trái ngược với chỉ có chúng trong toolbelt của nó, như công cụ , tôi sẽ thực sự được quan tâm để tìm hiểu về nó. Tôi thích học những điều hữu ích.


11
Tôi đoán "Khách quan" hoặc "Phản đối" sẽ không mang lại ấn tượng đúng về ý nghĩa thực sự của nó ;-)
Doc Brown

Tôi đã xem xét "Mục tiêu", nhưng quyết định rằng nó cũng có thể tạo ra những rung cảm sai.
Tuyệt vời


1
Tôi nghĩ "đối tượng" là sai lầm, không "định hướng". Cái mà chúng ta gọi là hướng đối tượng thường là hướng lớp.
Steve314

1
Bất kỳ người hâm mộ Phoenix Wright nào cũng muốn gọi nó là "NGHE !! Lập trình"?
Katana314

Câu trả lời:


24

Tôi tin rằng bạn đang đọc cách quá nhiều vào một cấu trúc ngữ pháp đơn giản. Hãy xem danh sách các mô hình của bạn, được sắp xếp khác nhau vì một lý do mà chúng tôi sẽ đến ngay sau đây:

  • Bắt buộc
  • Chức năng
  • Thủ tục
  • Cấu trúc
  • Tuyên bố
  • Sự kiện hướng
  • Dựa trên tự động
  • Hướng đối tượng

Những từ này có điểm gì chung? Chúng đều là tính từ vì chúng có ý định sửa đổi từ "lập trình". Hơn nữa, ngoại trừ "mệnh lệnh", tất cả chúng không phải là tính từ "tự nhiên", mà là danh từ "tính từ" - danh từ thực sự mô tả cốt lõi của mô hình: hàm, cấu trúc, automata và đối tượng.

Và có hai cách khác nhau trong đó các danh từ được tính từ: thông qua một hậu tố như -al hoặc -ed hoặc thông qua việc tạo một từ tổng hợp bằng cách sử dụng dấu gạch nối. Bây giờ, như Doc Brown đã chỉ ra, các hậu tố có thể được sử dụng để tính từ "đối tượng" dẫn đến một ý nghĩa khác. Lá nào thành phần.

Và tôi trình bày rằng đó là sự trùng hợp hoặc hương vị thuần túy mà Alan Kay đã chọn sử dụng "định hướng" cho tính từ tổng hợp "hướng đối tượng" của mình. Nó cũng có thể là "hướng đối tượng" hoặc "dựa trên đối tượng" và bạn cũng có thể đọc quá nhiều vào những điều đó. Không "lái" nghe có vẻ như một nỗi ám ảnh không lành mạnh?


1
Điểm tuyệt vời (mặc dù tôi nghĩ bạn có nghĩa là tính từ, không phải trạng từ - "lập trình" trong ngữ cảnh này là một danh từ).
JW01

@ JW01: Rất tiếc, bạn đã đúng
Michael Borgwardt

Đây thực sự là một điểm rất tốt - từ "định hướng" mang lại cho cụm từ ý nghĩa khác với "lập trình đối tượng", bởi vì từ "đối tượng" tự nó không phải là một tính từ. Trên thực tế, tôi muốn nói lý do "định hướng" được chọn hơn các từ khác là để ám chỉ. Ngoài ra, tôi đã không đọc bất cứ điều gì về nó, tôi đã phóng đại để đưa ra quan điểm rằng từ "định hướng" này nằm ở đó hoàn toàn không giải thích được và không bị nghi ngờ trong tài liệu, khiến tôi tự hỏi liệu nó có thực sự làm bất cứ điều gì để kiếm được điểm của nó không . : P
Tuyệt vời

Tự hỏi tại sao anh ta không chọn đối tượng bị ám ảnh ... oh yeah, đó chỉ là những kẻ quá khích không biết khi nào nên dừng lại. ;-)
Ded repeatator

Có một cuốn sách của một tác giả người Ba Lan, Jerzy Grębosz, được gọi là "Symfonia C ++" ("Bản giao hưởng trong C ++"), trong đó tác giả cố gắng hiểu ý nghĩa của cụm từ đó theo một cách thú vị: Ông nói rằng nó được gọi là " hướng đối tượng "vì thực tế là mã có thể" tự định hướng "theo đối tượng mà nó hiện đang làm việc (hành vi đa hình). Ông phân biệt điều này với các ngôn ngữ trong đó chỉ có một khái niệm đơn thuần về "đối tượng" là những mẩu dữ liệu. Không có bằng chứng lịch sử nào cho thấy đây là ý nghĩa ban đầu, nhưng nó hoàn toàn giải thích ngay cả khi là một lời giải thích sau thực tế.
BarbaraKwarc

18

nhưng khi chúng ta nói về lập trình với các đối tượng, chúng ta phải làm rõ rằng chúng ta được định hướng xung quanh các đối tượng đó. Chúng ta không thể sử dụng các đối tượng? Chúng ta không thể có đồ vật sao?

Thành thật mà nói, đó là một sự nắm giữ của lịch sử. Lập trình hàm là lập trình hướng thực sự chức năng, lập trình khai báo là lập trình hướng khai báo thực sự ... sau tất cả chúng ta không sử dụng hàm? Chúng ta không thể có chức năng?

"Hướng đối tượng" lăn lưỡi tốt hơn, và đã ăn sâu vào lịch sử.

"Định hướng" xuất hiện bởi vì chúng ta không nói về lập trình mà là thiết kế. Chỉ vì chúng tôi sử dụng các đối tượng, hoặc sử dụng các hàm hoặc sử dụng các sự kiện không có nghĩa là phương pháp thiết kế của chúng tôi được thực hiện bằng cách mô hình hóa cả ba. Bằng cách chỉ định định hướng của phương pháp thiết kế, nó giúp truyền đạt cho các lập trình viên cách họ diễn giải và mở rộng thiết kế đó - cách mô hình tập trung tô màu cho việc thực hiện.


Vì vậy, có vẻ như bạn đang nói rằng "hướng đối tượng" là một loại tuyên bố chính sách với các cụm từ dư thừa, giống như "pro-active" về cơ bản có cùng ý nghĩa với "hoạt động", nó chỉ có một tiền tố dự phòng được đính kèm để thực hiện chắc chắn người nghe không bỏ lỡ ý nghĩa.
Excrubulent

1
Tôi nghĩ rằng bạn thực sự nhấn mạnh vào điều đó: Chúng tôi thực hiện thiết kế hướng đối tượng và đó là lý do tại sao các ngôn ngữ hướng đối tượng - để cho phép chúng tôi thể hiện thiết kế này.
K.Steff 16/03/13

1
@Excrubulent Không, việc thêm "định hướng" làm cho nó cụ thể hơn. "Hướng đối tượng" có nghĩa là chúng ta không thảo luận cụ thể về các đối tượng lập trình, mà thay vào đó là cách thiết kế chương trình để họ sử dụng các đối tượng theo cách có ý nghĩa. "Lập trình đối tượng", "lập trình hàm" hoặc "lập trình khai báo" sẽ đề cập đến việc nói cụ thể về việc thực hiện khái niệm cụ thể đó thay vì các nguyên tắc thiết kế. "Chức năng" và "khai báo" là những từ có hậu tố cố gắng truyền đạt cùng một nghĩa, nhưng đối với các đối tượng "khách quan" hoặc "khách quan" sẽ không có ý nghĩa nhiều.
Ilari Kajaste

Và như Michael Borgwardt đã trả lời , từ "định hướng" không có gì đặc biệt. Nó cũng có thể được "điều khiển" hoặc "dựa". Điểm quan trọng là nó không thể là "lập trình đối tượng". (Vâng laguange phải lúc nào cũng chất lỏng, vì vậy nó có thể , nhưng nó chỉ woudn't được như mô tả.)
Ilari Kajaste

Tôi đã chuyển câu trả lời vì câu trả lời của Michael Borgwardt thực sự giải thích ý nghĩa của từ và cách nó sửa đổi cụm từ.
Tuyệt vời

2

Gọi nó giúp giải thích rằng các đối tượng là một phần rất quan trọng của mô hình.

Lập trình hướng đối tượng có nguồn gốc từ Simula , về cơ bản là ALGOL cộng với một số tính năng lập trình đối tượng mới. Và để phù hợp với lịch sử đó, ngay cả ngày nay, hoàn toàn có thể bằng nhiều ngôn ngữ (thậm chí là "ngôn ngữ OO thuần túy") để mã hóa một cái gì đó về cơ bản chỉ là một chương trình thủ tục với một số đối tượng trong đó. Nhưng đây được coi là phong cách xấu của các nhà phát triển có kinh nghiệm hơn.

Thực tế làm một cái gì đó "cách hướng đối tượng" rất khác với "cách thủ tục". Khái niệm quan trọng nhất là việc sử dụng tính kế thừa và đa hình. Khi bạn thực sự hiểu và nội tâm hóa cách các lớp và phương thức ảo hoạt động, đó là một trải nghiệm mở mắt thay đổi cách bạn viết mã trong rất nhiều trường hợp, một sự thay đổi mô hình thực sự. .

Chúng tôi gọi đó là lập trình hướng đối tượng vì một chương trình được viết theo kiểu OO không chỉ chứa các đối tượng; cấu trúc của toàn bộ chương trình dựa trên chúng và xung quanh cách chúng hoạt động.


Đây là một câu trả lời tương tự như của Telastyn, ngoại trừ bạn dường như ngụ ý rằng "lập trình hướng đối tượng" như một thuật ngữ thực sự khác biệt với "lập trình đối tượng". Bạn có thể giải thích làm thế nào họ có thể khác nhau? Ý tôi là, đối với tôi, dường như OOP là một thuật ngữ đủ lỏng để OP cũng phục vụ cùng chức năng.
Tuyệt vời

2
Nhiều sinh viên ngày nay đi thẳng vào Java hoặc C # như một ngôn ngữ đầu tiên và IMO họ bỏ lỡ việc thực sự hiểu được lợi ích của OO bằng cách làm như vậy. - Trên thực tế, tôi đã bắt đầu sử dụng C ++ và trong bài tập đầu tiên của mình, tôi đã sử dụng kết hợp các đối tượng và hàm, nhưng được đánh dấu để sử dụng các hàm. Một số chức năng đó hoàn toàn là chức năng và hoàn toàn không được hưởng lợi từ việc đóng gói trong một đối tượng, nhưng một số chức năng khác đã đưa con trỏ đến các biến để hoạt động (ví dụ: thông tin trạng thái đã sửa đổi), trở nên dễ dàng hơn nhiều khi thực hiện và gọi trong một vật thể, vì vậy tôi đã nhìn thấy cả hai mặt của nó.
Tuyệt vời
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.