Tại sao python không phải là ngôn ngữ oop?

Python thường được so sánh với các ngôn ngữ thông dịch khác như Java, JavaScript, Perl, Tcl hoặc Smalltalk. So sánh với C++, Common Lisp và Scheme cũng có thể làm sáng tỏ. Trong phần này, tôi sẽ so sánh ngắn gọn Python với từng ngôn ngữ này. Những so sánh này chỉ tập trung vào vấn đề ngôn ngữ. Trong thực tế, việc lựa chọn ngôn ngữ lập trình thường được quyết định bởi các ràng buộc khác trong thế giới thực như chi phí, tính khả dụng, đào tạo và đầu tư trước đó hoặc thậm chí là tình cảm gắn bó. Vì những khía cạnh này rất hay thay đổi, nên có vẻ lãng phí thời gian khi xem xét chúng nhiều cho sự so sánh này

Java

Các chương trình Python thường chạy chậm hơn các chương trình Java, nhưng chúng cũng mất ít thời gian hơn để phát triển. Các chương trình Python thường ngắn hơn 3-5 lần so với các chương trình Java tương đương. Sự khác biệt này có thể là do các kiểu dữ liệu cấp cao tích hợp sẵn của Python và kiểu gõ động của nó. Ví dụ: một lập trình viên Python không lãng phí thời gian để khai báo các loại đối số hoặc biến và danh sách đa hình mạnh mẽ và các loại từ điển của Python, hỗ trợ cú pháp phong phú được tích hợp trực tiếp vào ngôn ngữ, được sử dụng trong hầu hết mọi chương trình Python. Vì gõ theo kiểu run-time nên Python runtime phải hoạt động nhiều hơn Java. Ví dụ, khi đánh giá biểu thức a+b, trước tiên nó phải kiểm tra các đối tượng a và b để tìm ra kiểu của chúng, điều này không được biết tại thời điểm biên dịch. Sau đó, nó gọi hoạt động bổ sung thích hợp, có thể là một phương thức do người dùng định nghĩa bị quá tải. Mặt khác, Java có thể thực hiện phép cộng số nguyên hoặc dấu phẩy động hiệu quả, nhưng yêu cầu khai báo biến cho a và b và không cho phép nạp chồng toán tử + đối với các thể hiện của lớp do người dùng định nghĩa

Vì những lý do này, Python phù hợp hơn nhiều với tư cách là ngôn ngữ "keo", trong khi Java được mô tả tốt hơn với tư cách là ngôn ngữ triển khai cấp thấp. Trên thực tế, cả hai cùng nhau tạo nên một sự kết hợp tuyệt vời. Các thành phần có thể được phát triển bằng Java và được kết hợp để tạo thành các ứng dụng bằng Python; . Để hỗ trợ kiểu phát triển này, một triển khai Python được viết bằng Java đang được phát triển, cho phép gọi mã Python từ Java và ngược lại. Trong triển khai này, mã nguồn Python được dịch sang mã byte Java (với sự trợ giúp từ thư viện thời gian chạy để hỗ trợ ngữ nghĩa động của Python)

Javascript

Tập hợp con "dựa trên đối tượng" của Python gần tương đương với JavaScript. Giống như JavaScript (và không giống như Java), Python hỗ trợ phong cách lập trình sử dụng các hàm và biến đơn giản mà không cần tham gia vào các định nghĩa lớp. Tuy nhiên, đối với JavaScript, đó là tất cả. Mặt khác, Python hỗ trợ viết các chương trình lớn hơn nhiều và tái sử dụng mã tốt hơn thông qua phong cách lập trình hướng đối tượng thực sự, trong đó các lớp và tính kế thừa đóng vai trò quan trọng

perl

Python và Perl đến từ một nền tảng tương tự (tập lệnh Unix, cả hai đều đã phát triển vượt bậc từ lâu) và có nhiều tính năng tương tự, nhưng có một triết lý khác. Perl nhấn mạnh hỗ trợ cho các tác vụ hướng ứng dụng phổ biến, e. g. bằng cách tích hợp sẵn các biểu thức chính quy, tính năng quét tệp và tạo báo cáo. Python nhấn mạnh hỗ trợ cho các phương pháp lập trình phổ biến như thiết kế cấu trúc dữ liệu và lập trình hướng đối tượng, đồng thời khuyến khích các lập trình viên viết mã có thể đọc được (và do đó có thể bảo trì) bằng cách cung cấp một ký hiệu tao nhã nhưng không quá khó hiểu. Kết quả là Python tiến gần đến Perl nhưng hiếm khi đánh bại nó trong miền ứng dụng ban đầu của nó;

tcl

Giống như Python, Tcl có thể được sử dụng làm ngôn ngữ mở rộng ứng dụng cũng như ngôn ngữ lập trình độc lập. Tuy nhiên, Tcl, theo truyền thống lưu trữ tất cả dữ liệu dưới dạng chuỗi, yếu về cấu trúc dữ liệu và thực thi mã thông thường chậm hơn nhiều so với Python. Tcl cũng thiếu các tính năng cần thiết để viết các chương trình lớn, chẳng hạn như không gian tên mô-đun. Do đó, trong khi một ứng dụng lớn "điển hình" sử dụng Tcl thường chứa các phần mở rộng Tcl được viết bằng C hoặc C++ dành riêng cho ứng dụng đó, thì một ứng dụng Python tương đương thường có thể được viết bằng "Python thuần túy". Tất nhiên, phát triển Python thuần túy nhanh hơn nhiều so với việc phải viết và gỡ lỗi một thành phần C hoặc C++. Người ta nói rằng phẩm chất đáng giá của Tcl là bộ công cụ Tk. Python đã sử dụng một giao diện cho Tk làm thư viện thành phần GUI tiêu chuẩn của nó

Tcl 8. 0 giải quyết vấn đề tốc độ bằng cách cung cấp trình biên dịch mã byte với hỗ trợ loại dữ liệu hạn chế và thêm không gian tên. Tuy nhiên, nó vẫn là một ngôn ngữ lập trình cồng kềnh hơn nhiều

nói nhỏ

Có lẽ sự khác biệt lớn nhất giữa Python và Smalltalk là cú pháp "chính thống" hơn của Python, giúp nó hỗ trợ đào tạo lập trình viên. Giống như Smalltalk, Python có kiểu gõ động và ràng buộc, và mọi thứ trong Python đều là đối tượng. Tuy nhiên, Python phân biệt các loại đối tượng dựng sẵn với các lớp do người dùng định nghĩa và hiện không cho phép kế thừa từ các loại dựng sẵn. Thư viện tiêu chuẩn của Smalltalk về các loại dữ liệu thu thập được tinh chỉnh hơn, trong khi thư viện của Python có nhiều phương tiện hơn để xử lý các thực tế Internet và WWW như email, HTML và FTP

Python có một triết lý khác về môi trường phát triển và phân phối mã. Trong khi Smalltalk theo truyền thống có một "hình ảnh hệ thống" nguyên khối bao gồm cả môi trường và chương trình của người dùng, Python lưu trữ cả mô-đun tiêu chuẩn và mô-đun người dùng trong các tệp riêng lẻ có thể dễ dàng sắp xếp lại hoặc phân phối bên ngoài hệ thống. Một hậu quả là có nhiều tùy chọn để gắn Giao diện người dùng đồ họa (GUI) vào chương trình Python, vì GUI không được tích hợp vào hệ thống

C++

Hầu như mọi thứ nói về Java cũng áp dụng cho C++, hơn thế nữa. trong đó mã Python thường ngắn hơn 3-5 lần so với mã Java tương đương, nó thường ngắn hơn 5-10 lần so với mã C++ tương đương. Bằng chứng giai thoại cho thấy rằng một lập trình viên Python có thể hoàn thành trong hai tháng mà hai lập trình viên C ++ không thể hoàn thành trong một năm. Python tỏa sáng như một ngôn ngữ kết dính, dùng để kết hợp các thành phần được viết bằng C++

Sơ đồ và Lisp thông thường

Các ngôn ngữ này gần giống với Python về mặt ngữ nghĩa động, nhưng lại quá khác biệt về cách tiếp cận cú pháp khiến việc so sánh gần như trở thành một cuộc tranh luận tôn giáo. việc thiếu cú ​​pháp của Lisp là một lợi thế hay bất lợi? . Thông thường, các thuộc tính trong thế giới thực là quyết định. Lisp thông thường là lớn (theo mọi nghĩa) và thế giới Scheme bị phân mảnh giữa nhiều phiên bản không tương thích, trong đó Python có một triển khai nhỏ gọn, miễn phí, duy nhất

Tại sao Python không phải là đối tượng

Python hỗ trợ tất cả khái niệm "lập trình hướng đối tượng" nhưng nó KHÔNG hoàn toàn hướng đối tượng bởi vì - Mã trong Python cũng có thể được viết mà không cần tạo lớp.

Python có phải là ngôn ngữ OOP hay không?

Python, giống như mọi ngôn ngữ hướng đối tượng khác, cho phép bạn định nghĩa các lớp để tạo đối tượng. Các lớp Python dựng sẵn là các kiểu dữ liệu phổ biến nhất trong Python, chẳng hạn như chuỗi, danh sách, từ điển, v.v. Một lớp là một tập hợp các biến thể hiện và các phương thức liên quan xác định một loại đối tượng cụ thể.

Ngôn ngữ nào là 100% oops?

Java được tạo ra dưới dạng ngôn ngữ “viết một lần, chạy mọi nơi”, giúp nó hoạt động với rất nhiều ứng dụng. Và với Java 100% trên tàu với các khái niệm và nguyên tắc đằng sau OOP, có thể hiểu tại sao nó lại đứng đầu danh sách này.

Tại sao Python không hỗ trợ đóng gói?

Ví dụ đóng gói . Thay vào đó, nó dựa vào quy ước. một biến lớp không nên được truy cập trực tiếp nên được thêm tiền tố bằng dấu gạch dưới. Python does not have the private keyword, unlike some other object oriented languages, but encapsulation can be done. Instead, it relies on the convention: a class variable that should not directly be accessed should be prefixed with an underscore.