Các điều kiện lịch sử đã dẫn đến lập trình hướng đối tượng trở thành một mô hình lập trình chính là gì?


14

Một số yếu tố kinh tế (và lịch sử khác) dẫn đến ngôn ngữ lập trình hướng đối tượng trở nên có ảnh hưởng là gì? Tôi biết rằng Simula bắt đầu mọi thứ, nhưng việc áp dụng ngôn ngữ OOP có phải là do nhu cầu kinh doanh ngày càng tăng? Hoặc, việc áp dụng có phải là do những điều mới có thể được thực hiện với các ngôn ngữ OOP không?

Chỉnh sửa Tôi thực sự quan tâm nhất đến việc liệu có một số yếu tố bên ngoài đối với chính ngôn ngữ cho phép họ nắm giữ.


Điều đó có ý nghĩa, nhưng tôi đoán rằng tôi đã quan tâm nhiều hơn đến các tình huống bên ngoài đang diễn ra trong quá trình phát triển. Rất có thể các yếu tố bên ngoài có ảnh hưởng hạn chế.

Tôi đảm bảo với bạn rằng ngay cả đối với một câu hỏi liên quan đến các yếu tố bên ngoài, lập trình viên.stackexchange là một địa điểm tốt hơn. Nó có rất nhiều người tích cực làm việc trong ngành và nhiều người đã làm việc kể từ khi ngành này cất cánh. Bạn sẽ có nhiều khả năng tìm thấy một người ở đó có câu trả lời tuyệt vời cho câu hỏi của bạn hơn ở đây.
Chọn tham gia

2
Smalltalk đã không bắt đầu nó. Simula đã tạo ra các khái niệm cơ bản về định hướng đối tượng. Những gì Smalltalk đã làm là lấy những ý tưởng đó và biến chúng thành một mô hình rất khác biệt và phù hợp với tên gọi. Nhưng điều đáng chú ý là không có ngôn ngữ nào theo mô hình Smalltalk của OO thực sự đã rất thành công khi xây dựng các chương trình. (Ngoại trừ Objective-C, một trường hợp đặc biệt: Apple đẩy nó xuống, mọi người đứng về phía họ, nhưng không ai ngoài hệ sinh thái Apple sử dụng nó.) vv, sử dụng mô hình Simula.
Mason Wheeler

1
Gạch đồ chơi Lego có thể phù hợp như một ảnh hưởng bên ngoài ...
Jamie F

1
@Mason: không chắc chắn điều gì phân chia mô hình Simula và Smalltalk. Bạn sẽ đặt Ruby ở đâu? LUA? Con trăn? Javascript?
kevin cline

Câu trả lời:


10

Câu trả lời ngắn

Tôi nghĩ rằng đó là khởi đầu của các dự án phần mềm trước ngày OO. OO đã giúp đỡ bằng cách thêm khái niệm cơ bản quan trọng - Mô hình thế giới thực .


Ngôn ngữ lập trình hướng đối tượng đầu tiên là Simula trở lại vào năm 1967. Tuy nhiên, vào thời điểm đó, việc phát triển phần mềm vẫn còn nhiều trong phòng thí nghiệm và hầu hết các mô hình vẫn gần với trường hợp phần cứng hơn .

Trong một thập kỷ phát triển phần mềm cho các ứng dụng doanh nghiệp, các ứng dụng thương mại khác đã phát triển và sự phát triển phần mềm đã tăng lên trong toàn bộ thập niên 1970. Các ngôn ngữ vẫn còn tồn tại đến ngày nay ở độ tuổi đó (trước năm 1980) là C, Cobol, Fortran và các ngôn ngữ tương tự khác. Hầu hết các ngôn ngữ này là thủ tục. Lisp cũng tồn tại kể từ ngày đó - tuy nhiên, tôi không chắc đó có phải là ngôn ngữ mục đích chung nổi bật để phát triển thương mại hay không. Thuật ngữ thác nước nổi tiếng cũng được đặt ra vào đầu những năm 1970.

Trong hầu hết các môi trường thương mại, yếu tố quan trọng nhất xuất hiện trong phát triển phần mềm là quản lý dự án. Có một nhu cầu rất lớn về ngân sách chặt chẽ và ít nhất là có thể dự đoán và các yêu cầu quản lý để đóng băng để đảm bảo rằng dự án đạt đến đích hoàn thành một cách tôn trọng. Trong thời kỳ này cũng là một trong những Manmonths huyền thoại trở lại vào năm 1975.

Tôi đoán cuối năm 70 người đã bị đốt cháy - vì các ngôn ngữ thủ tục không theo kịp những lời hứa đó. Và một mô hình đối tượng mới được định hướng từ thời đó đã làm cho nó trở nên lớn. Mặc dù mọi người có thể không đồng ý, tôi nghĩ rằng C ++ giúp làm quen và trải nghiệm đã được chứng minh và về C, và hướng Promise of Object (ban đầu với tên C với Classes) vào năm 1983 là nền tảng cho sự thành công của lập trình hướng đối tượng.

Một số tài liệu tham khảo để có thêm góc nhìn - http://journal.thedacs.com/su/43/88

Vậy tại sao OO?

Tôi nghĩ những ngày đó (nếu bạn nhìn vào quan điểm thành công của dự án) - điều đó có ý nghĩa rằng những gì bạn có thể hiểu rõ hơn sẽ được quản lý tốt hơn. Phương pháp hướng đối tượng với một lời hứa ".. mọi thứ trong cuộc sống là một đối tượng" có vẻ giống như là hợp lý ngay cả trước khi nó được chứng minh là có ý nghĩa. Thành công thực tế của yếu tố này là khái niệm đủ mô hình hóa thế giới thực và vấn đề trong tay trước khi nhảy súng - điều mà tôi nghĩ rằng một điều cơ bản mới mà OO đưa ra mà không có mô hình nào khác đưa ra cho đến ngày đó. Và chắc chắn rằng mô hình này buộc bạn phải suy nghĩ phần nào trước khi bạn viết mã nhiều hơn các ngôn ngữ thủ tục, nó cho thấy sự thành công rõ rệt trên các dự án phần mềm được sử dụng và kể từ đó họ bắt kịp!

EDIT
Tôi cũng sẽ nói thêm rằng các ngôn ngữ lập trình phát triển đồng thời song song với các khái niệm cơ bản như vậy (mô hình OO, khía cạnh, máy ảo,) Mỗi ​​khái niệm mới và tư duy mới xuất hiện chỉ khi một ngôn ngữ lập trình mới làm chủ nó cốt lõi! Đồng thời - những khái niệm mới và ngôn ngữ mới chỉ xuất hiện vì những vấn đề kinh doanh mới. Những năm 1980 - OO cho phần mềm quy mô lớn, 1990 Java trong thời đại Internet, PHP / ASP và nhiều phần mềm khác cho web. Sự đổi mới trong ngôn ngữ lập trình cũng được thúc đẩy chủ yếu bởi nhu cầu thị trường không liên tục.

Tóm lại, đầu thập niên 80 là thời đại mà phần mềm thương mại quy mô lớn hơn cất cánh - trong khi các dự án với ngôn ngữ thủ tục có vấn đề, OO cho thấy ánh sáng tốt hơn và giúp các dự án thành công hơn.


Các vi khuẩn của sự thay đổi và đi đâu? Hết những năm 70. Những gì các nhà phát triển giả mạo hiểu rằng đó là thời gian để đi? Mệt mỏi vì thủ tục, có, nhưng phải có người anh em thay thế?
Độc lập

@Jonas - ok - sửa đổi câu trả lời.
Dipan Mehta

Theo như thành công lịch sử, chúng tôi đang đánh giá - chúng tôi chắc chắn có thể nói rằng sự quen thuộc đóng một số vai trò. C (là sự kế thừa của B), C ++ là một C tốt hơn mặc dù OO được cho là một sự thay đổi mô hình. Ngay cả Java cũng là một bước nhảy sẵn sàng từ C ++ (giống như C ++ hơn mà không có vấn đề về C ++. Bộ nhớ và tính di động). Hầu hết các ngôn ngữ này vượt qua các kẽ hở bằng cách có được không gian hiện có hiệu quả hơn mặc dù chúng có một cái gì đó cơ bản hơn trong đó. Hơn nữa, bởi vì mọi ngôn ngữ sẽ có được một số lập trình viên đã biết một số ngôn ngữ lập trình khác. NHƯNG điều này có thể không phải luôn luôn đúng!
Dipan Mehta

1
Tôi cũng sẽ nói thêm rằng các ngôn ngữ lập trình phát triển đồng thời song song với các khái niệm cơ bản như vậy (mô hình OO, khía cạnh, máy ảo) ! Đồng thời - những khái niệm mới và ngôn ngữ mới chỉ xuất hiện vì những vấn đề kinh doanh mới. Những năm 1980 - OO cho phần mềm quy mô lớn, 1990 Java trong thời đại internet, PHP / ASP và nhiều phần mềm khác cho web. Sự đổi mới trong ngôn ngữ lập trình cũng được thúc đẩy chủ yếu bởi nhu cầu thị trường không liên tục.
Dipan Mehta

1
"Mô hình thế giới thực" nghe có vẻ kết luận, nhưng trong hầu hết các trường hợp, điều đó không xảy ra. Các Customerlớp học không có phương pháp như eatLunch, goToWorkhoặc sleep, mặc dù đây là những gì khách hàng làm trong thế giới thực . Các Productlớp có một số phương pháp, mặc dù hầu hết các sản phẩm có chính xác không có hành vi ở tất cả trong thế giới thực . Do đó, tôi cho rằng mô hình OO chỉ tương ứng (ít nhiều) về mặt các thuộc tính, nhưng hoàn toàn không phải về mặt hành vi, với thế giới thực. Nhưng bạn không cần OO để có một mô hình dữ liệu tương ứng với các đối tượng trong thế giới thực. Các loại bản ghi là tất cả những gì nó cần.
dùng281377

6

Tôi nghĩ lý do lớn nhất là sự thành công của các giao diện người dùng đồ họa như X và Windows. GUI bao gồm một số đối tượng có hành vi riêng, một cái gì đó mà OO có thể đại diện chặt chẽ.

Mặt khác, giao diện người dùng cơ sở văn bản (không cố gắng giống với GUI) thường chỉ đơn giản là tuân theo mẫu phản hồi lệnh, có thể dễ dàng thực hiện bằng ngôn ngữ thủ tục. Các quy tắc kinh doanh và các công cụ tương tự đã được thực hiện với các ngôn ngữ thủ tục trong nhiều thập kỷ, không có quá nhiều vấn đề và ngày nay, nhiều chương trình OO cho các ứng dụng kinh doanh khá thủ tục; với các đối tượng ngu ngốc chứa dữ liệu và các đối tượng không trạng thái có chứa các quy tắc kinh doanh; đầu tiên có thể là các bản ghi trong một ngôn ngữ thủ tục, sau đó có thể là các thủ tục.


4

Tôi thấy OOP là một bước tiến hóa tự nhiên từ mã thủ tục:

  1. Mã thủ tục: Yêu cầu máy làm A, sau đó bảo nó làm B.
  2. OOP: Đóng gói các hướng dẫn thủ tục thành các phần rất có thể tái sử dụng, bằng cách xác định giao diện / đầu vào / đầu ra. (Cảnh báo: đơn giản hóa.)

Tôi chắc rằng ai đó có tầm nhìn rộng hơn sẽ kêu vang, nhưng có vẻ như đây là một tiến bộ tự nhiên khi chỉ đơn giản là cho phép các lập trình viên tạo mã nhanh hơn: tức là cho phép tái sử dụng mã lớn hơn.

Theo quan điểm này, yếu tố bên ngoài lớn nhất là giảm chi phí mã lực của bộ xử lý (so với chi phí lao động của nhà phát triển để tạo ra các chương trình điển hình): chi phí điện toán trong việc sử dụng các lớp OOP trở nên ít quan tâm hơn so với tiết kiệm thời gian của nhà phát triển. (Chính sự đánh đổi này về chi phí CPU so với chi phí lập trình viên đã ảnh hưởng đến nhiều khía cạnh khác của lập trình.)


2

Ban đầu có lập trình bắt buộc (nếu bạn có thể gọi nó như vậy). Các hướng dẫn đơn giản đã nói với máy tính lớn những gì và cách tính toán. Những ngôn ngữ lập trình đó đã sử dụng các bước nhảy vô điều kiện và các hướng dẫn "không cấu trúc" khác, hầu hết chúng đều kỳ lạ theo tiêu chuẩn ngày nay.

Sau đó, một số người đã đưa ra các cấu trúc để lập trình. Trong khi, trong khi, làm trong khi và foreach chúng ta biết ngày hôm nay. Đó là một sự đổi mới lớn vì bây giờ các ứng dụng với dòng chảy tương đối phức tạp có thể được viết và hiểu một cách dễ dàng. Do đó lập trình có cấu trúc đã ra đời.

Sau đó, một số người khác nói rằng bạn cần lặp lại rất nhiều mã ở đây và đó là một cơn ác mộng để duy trì vì vậy nên sử dụng lại cách sử dụng mã. Mọi người đã đưa ra các thủ tục và chức năng để phân định các đoạn mã có thể tái sử dụng. Điều này cũng đã sinh ra các nguyên tắc đóng gói và trách nhiệm duy nhất.

Sau đó, một số học giả nói rằng chức năng nên được kết hợp chặt chẽ với dữ liệu mà nó đang làm việc. Sau đó, họ đã thêm các khái niệm kế thừa để tái sử dụng mã và đa hình để phù hợp với cách phân loại logic hoạt động trong cuộc sống thực. Do đó, ngôn ngữ lập trình thế hệ thứ ba và OOP đã ra đờ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.