Hướng dẫn is java and python a good combo? - java và python có phải là một sự kết hợp tốt không?

Giới thiệu: Hy vọng cho một ngôn ngữ duy nhất

Thỉnh thoảng, một ngôn ngữ lập trình chung, mới nhận được sự chấp nhận rộng rãi. Một phản ứng tự nhiên, đặc biệt là khi ngôn ngữ nhận được nhiều sự chú ý của truyền thông như Java, là hy vọng rằng trong tương lai, tất cả các chương trình sẽ được viết bằng ngôn ngữ này.

Đúng, trong lịch sử điều này chưa bao giờ xảy ra. Nhớ PL/1? Hoặc C ++? Nhưng chúng tôi tiếp tục hy vọng, với niềm tin rằng có tiến bộ trong lĩnh vực thiết kế ngôn ngữ lập trình. Chi phí cao để học một số ngôn ngữ khác nhau, mỗi ngôn ngữ hữu ích chỉ cho một phần phổ của các nhiệm vụ lập trình, làm cho các nhà quản lý và lập trình viên hy vọng rằng ngôn ngữ tiếp theo này là một trong những.

Có lẽ chúng tôi đã sai, mặc dù. Có lẽ sẽ không bao giờ có một ngôn ngữ duy nhất bao gồm toàn bộ phổ lập trình. Rốt cuộc, quang phổ đó bao gồm các hoạt động đa dạng như tìm kiếm vé máy bay giá rẻ, dự đoán thời tiết và sản xuất hình ảnh động 3D của thằn lằn khổng lồ. (Không đề cập đến các hoạt động trần tục hơn, chẳng hạn như định dạng báo cáo chi phí hoặc tài liệu kiểm tra chính tả.)

Chúng tôi có thể sửa đổi những kỳ vọng của mình, hy vọng rằng trong tương lai, một lập trình viên duy nhất sẽ không bao giờ phải học nhiều hơn một ngôn ngữ. Trong thế giới siêu chuyên ngành của chúng ta, các lĩnh vực nhiệm vụ có thể sẽ rời rạc. Nếu bạn là một lập trình viên trò chơi trong tương lai, bạn sẽ sử dụng ngôn ngữ thời gian thực 3D 3D. Nếu bạn đang khoan cho dầu, bạn sẽ sử dụng ngôn ngữ phân tích địa chất. Nếu bạn đang viết một công cụ nhập dữ liệu, thì ngôn ngữ định nghĩa GUI sẽ là tất cả những gì bạn cần.

Chúng ta cần nhiều hơn một ngôn ngữ

Tôi có một tầm nhìn khác. Tôi không quá ngây thơ khi tin rằng tất cả chúng ta có thể là lập trình viên thời Phục hưng, có khả năng viết bất kỳ loại chương trình nào. Nhưng tôi tin tưởng mạnh mẽ rằng các nhiệm vụ của hầu hết các lập trình viên rất đa dạng đến nỗi một ngôn ngữ duy nhất không cắt nó.

Các nhà thiết kế của Unix biết điều này. Họ đã xây dựng hai ngôn ngữ vào hệ thống của họ ngay từ đầu: C là ngôn ngữ lập trình hệ thống để viết các ứng dụng và công cụ và shell cho kịch bản: một ngôn ngữ thông thường để dán các chương trình C đó lại với nhau. Gần đây, các ngôn ngữ mạnh mẽ hơn như Python, TCL và Perl đang thay thế vỏ, nhưng nguyên tắc vẫn giữ nguyên.

Microsoft biết điều đó. Họ cung cấp cho các nhà phát triển hai lựa chọn: C ++ và Visual Basic, và nhiều ứng dụng được viết thành hỗn hợp của cả hai. Ví dụ, các chương trình VB có quyền truy cập dễ dàng vào các điều khiển được viết bằng C ++.

John Ousterhout, cha của ngôn ngữ kịch bản TCL, biết điều đó. Một số ý tưởng ở đây được lấy từ kịch bản của bài viết của anh ấy: Lập trình cấp cao hơn cho thế kỷ 21.

Nói chung, chúng ta thấy ngày càng có nhiều ứng dụng thành công được viết trong sự kết hợp của ngôn ngữ lập trình hệ thống và ngôn ngữ kịch bản. Hai ngôn ngữ bổ sung cho nhau một cách độc đáo, để đối với một phần phụ điển hình, nó sẽ được cắt rõ ràng để sử dụng ngôn ngữ nào. Thêm một ngôn ngữ kịch bản cũng có thể cung cấp tùy chỉnh linh hoạt hơn nhiều của một ứng dụng.

Các ngôn ngữ kịch bản chung được sử dụng phổ biến nhất là Visual Basic, Perl, TCL và Python. . VB rõ ràng là ngôn ngữ kịch bản được lựa chọn cho C ++ trên Windows; Nó là dành riêng cho nền tảng và không thể dễ dàng hoàn thành vai trò tương tự trên các nền tảng khác. Perl và TCL được sử dụng thường xuyên nhất với C trên các nền tảng UNIX.

Theo truyền thống, Python được sử dụng với C và C ++, nhưng ít tập trung vào UNIX so với Perl hoặc TCL. Python có một lượng lớn người theo dõi trên Windows và được tích hợp đặc biệt với COM và kiến ​​trúc máy chủ kịch bản Microsoft trên nền tảng đó. .

Vậy, còn Java thì sao?

Trước hết: Tôi phân loại Java là ngôn ngữ lập trình hệ thống, không phải là ngôn ngữ kịch bản. Mặc dù được giải thích, phần lớn kiến ​​trúc JVM, rất giống với một CPU hiện đại điển hình-một ngăn chứa chứa các từ, con trỏ, các tác phẩm, các tác phẩm.

Java chủ yếu được gõ tĩnh, yêu cầu khai báo của tất cả các biến. Kiểu dữ liệu cấp cao nhất được hỗ trợ trực tiếp bởi ngôn ngữ là một chuỗi-trong khi đây là một cải tiến so với C ++, nhưng nó khác xa với các bảng băm tích hợp và các mảng flex làm cho ngôn ngữ kịch bản trở nên dễ chịu khi sử dụng.

Một chương trình Java điển hình sẽ ngắn hơn một chút so với chương trình C ++ giải quyết vấn đề tương tự. Điều này có liên quan đến thời gian phát triển: Tốt nhất, một lập trình viên Java có lẽ hiệu quả gấp đôi so với lập trình viên C ++ - khác nhau so với các yếu tố năng suất từ ​​5 đến 10 được quan sát nhiều lần đối với các ngôn ngữ kịch bản thực.

Nếu Java là ngôn ngữ lập trình hệ thống, nó cần một ngôn ngữ kịch bản đồng hành. Trong phần còn lại của bài viết này, I hèll lập luận rằng Python là một lựa chọn lý tưởng khi bạn đồng hành kịch bản Java, cũng như cho thấy một số ví dụ về tương tác Java-Python để sao lưu yêu cầu này.

Python là gì?

Python là một ngôn ngữ năng động, được giải thích, hướng đối tượng với cú pháp sạch đáng kể. Bạn có thể học đủ Python vào một buổi chiều để bắt đầu cảm thấy hiệu quả. Python đã xuất hiện từ đầu những năm 1990 và có một lượng người theo dõi rất tích cực (mặc dù chưa lớn như Perl hoặc TCL). Python miễn phí (nó được phát triển như một dự án nguồn mở) và việc triển khai của nó trong di động C chạy trên hầu hết mọi nền tảng có thể hiểu được.

Ở đây, một mẫu nhỏ của mã Python: một hàm để đảo ngược bảng.



def invert(table):
index = {} # empty dictionary
for key in table.keys():
value = table[key]
if not index.has_key(value):
index[value] = [] # empty list
index[value].append(key)
return index

Ở đây, một phiên Python tương tác đơn giản bằng cách sử dụng chức năng này:

>>> Động vật = {'Schapen': 'Sheep', 'Schaap': 'Sheep', 'Koe': 'Cow'} >>> Động vật (Động vật) {'Cow': ['Koe'], 'Sheep ': [' Schapen ',' Schaap ']} >>>
'koe': 'cow'}
>>> invert(animals)
{'cow': ['koe'], 'sheep': ['schapen', 'schaap']}
>>>

Lưu ý cái nhìn chung của mã Python. Python đã được gọi là mã giả thực thi: nó sạch sẽ, không có khai báo loại, sử dụng dấu hai chấm và thụt vào để bắt đầu một khối mới. Các khối được đóng lại bằng cách kết hợp cống hiến. Niềng răng xoăn biểu thị từ điển, một loại dữ liệu tích hợp mạnh mẽ giống như một mảng kết hợp; Khung vuông biểu thị danh sách (các mảng linh hoạt tích hợp). Từ điển có thể chứa danh sách (và ngược lại).

Để biết thêm thông tin chung về Python, hãy truy cập trang web Python, trong đó có tài liệu, tải xuống, tài liệu lưu trữ và nhiều hơn nữa, bao gồm so sánh giữa Python và các ngôn ngữ khác; Hoặc đọc Python Newsgroup, comp.lang.python - một cộng đồng trực tuyến rất hữu ích và sống động.

JPython - Ngôn ngữ kịch bản giết người

Python là một trận đấu tốt cho Java: nó hướng đối tượng từ đầu lên. Tương phản điều này với Perl, trong đó OO được ghép trên phiên bản 5 hoặc TCL, trong đó OO chỉ có sẵn dưới dạng tiện ích mở rộng (ITCL).

Nhưng nó không chỉ là một trận đấu tốt. Lý do giết người để chọn Python là người bạn đồng hành kịch bản Java, là Jpython, một thông dịch viên Python được viết bằng Java thuần túy 100%. Ví dụ: sử dụng JPython, bạn có thể viết các applet trong Python sẽ chạy trong bất kỳ trình duyệt web tuân thủ JDK-1.1 nào. (Nhưng jpython có thể được sử dụng cho nhiều thứ khác ngoài việc viết applet!) Vì JVM vẫn còn nhanh hơn, nên thậm chí còn hy vọng rằng cuối cùng nó sẽ vượt qua Cpython.

JPython có được tốc độ đáng chú ý của nó bằng cách dịch mã nguồn Python trực tiếp sang mã byte Java. Điều này trái ngược với JACL, việc tái tạo TCL 100% Java - nó là một thông dịch viên TCL thực tế được viết bằng Java, và như vậy nó chậm hơn nhiều. Các giải pháp kịch bản Java khác, có sẵn cho TCL (TCL Blend) và Perl (JPL), không phải là Java tinh khiết 100%: chúng gắn JVM vào việc triển khai C của TCL hoặc Perl. Điều này rõ ràng tạo ra các vấn đề về khả năng di động: Để sử dụng TCL Blend hoặc JPL trên một nền tảng cụ thể, bạn cần tìm việc triển khai TCL hoặc Perl và JVM sẽ nói chuyện với nhau. Jpython, mặt khác, chỉ cần một JVM.

Sự tích hợp của Jpython giữa Java và Python rất liền mạch. Một tập lệnh Python có thể nhập bất kỳ lớp Java nào mà có thể truy cập trên đường dẫn lớp. Python có thể gọi các phương thức tĩnh và thể hiện của các lớp Java, tạo các trường hợp và thậm chí tạo các lớp con của các lớp Java. Các trường hợp của các lớp con đó có thể được chuyển lại cho Java và các phương thức của chúng (được thực hiện trong Python) có thể được gọi bằng mã Java.

Ví dụ: ở đây, một applet jpython hiển thị chuỗi Hello Hello World thế giới:



from java.applet import Applet

class HelloWorld(Applet):
def paint(self, gc):
gc.drawString(“Hello world”, 20, 30)


Chương trình nhỏ này thể hiện nhiều tính năng chính của JPython, nó chạy trong bất kỳ trình duyệt nào (tuân thủ JDK-1.1), nó nhập một lớp Java và tạo một lớp con của nó và nó

Phương thức sẽ được gọi bằng mã Java của vòng lặp sự kiện AWT.

Ở đây, một ví dụ lớn hơn một chút: một applet thực hiện một máy tính đơn giản nhưng chức năng.



from java import awt
from pawt import swing

labels = [‘7’, ‘8’, ‘9’, ‘+’,
‘4’, ‘5’, ‘6’, ‘-‘,
‘1’, ‘2’, ‘3’, ‘*’,
‘0’, ‘.’, ‘=’, ‘/’ ]

keys = swing.JPanel(awt.GridLayout(4, 4))
display = swing.JTextField()

def push(event): # Callback for regular keys
display.replaceSelection(event.actionCommand)

def enter(event): # Callback for ‘=’ key
display.text = str(eval(display.text))
display.selectAll()

for label in labels:
key = swing.JButton(label)
if label == ‘=’:
key.actionPerformed = enter
else:
key.actionPerformed = push
keys.add(key)

panel = swing.JPanel(awt.BorderLayout())
panel.add(“North”, display)
panel.add(“Center”, keys)
swing.test(panel)


Người đọc quen thuộc với mã Java sẽ đánh giá cao sự đồng nhất của các ví dụ này, so với mã hoàn thành tương đương trong Java.

Thông báo đặc biệt là việc sử dụng

trong cuộc gọi lại. Hàm Python tích hợp có một chuỗi đại diện cho một biểu thức Python tùy ý, biên dịch nó vào mã byte Java, thực thi nó và trả về giá trị kết quả. Đây là một tính năng tiêu chuẩn của các ngôn ngữ kịch bản, không có trong các ngôn ngữ lập trình hệ thống điển hình, bao gồm Java: Thời gian chạy Java không có trình biên dịch Java xung quanh. callback. The built-in Python function takes a string representing an arbitrary Python expression, compiles it into Java bytecode, executes it and returns the resulting value. This is a standard feature of scripting languages, which is absent in typical system programming languages, including Java: the Java runtime doesn’t typically have the Java compiler around.

Làm thế nào bạn có thể sử dụng tốt nhất java và jpython cùng nhau?

Có một số cách tiếp cận.

Một tùy chọn là tạo nguyên mẫu cho toàn bộ ứng dụng trong JPython, thực hiện một số chu kỳ thử nghiệm/thiết kế lại/tái tạo và cuối cùng viết lại toàn bộ ứng dụng trong Java. Điều này thúc đẩy tính linh hoạt và tốc độ phát triển của một ngôn ngữ kịch bản trong các giai đoạn dự án ban đầu. Với chu kỳ thiết kế lại nhanh hơn nhiều, các thí nghiệm thiết kế ít tốn kém hơn nhiều và các sai lầm thiết kế dễ khắc phục hơn. Thiết kế cuối cùng, được thực hiện trong Java, sẽ kỹ lưỡng hơn nhiều so với khi lập trình đã bắt đầu ở Java. Vì jpython có quyền truy cập vào cùng một thư viện giao diện người dùng (AWT, swing) là Java, Java Rewrite sẽ gặp phải một vài điều ngạc nhiên.

Nếu bạn thử phương pháp này để xây dựng một hệ thống lớn, bạn sẽ thấy rằng các thành phần hoặc lớp khác nhau của nó thường có các chu kỳ phát triển độc lập. Thông thường các thành phần cấp cao nhất tiếp tục phát triển trong khi các lớp thấp hơn đã bị đóng băng. Điều này cho thấy một biến thể của phương pháp viết lại-in-java: viết lại các thành phần riêng lẻ trong Java khi thiết kế của chúng ổn định. Bây giờ, tích hợp java liền mạch của JPython là rất cần thiết: các giao diện có thể giữ nguyên trong khi việc thực hiện thay đổi từ JPython sang Java. .

Tùy chọn tiết kiệm thời gian tiếp theo chỉ là viết lại các thành phần đó trong Java mà hiệu suất là rất quan trọng. Các thành phần cấp cao thường vẫn có thể được viết bằng jpython. Đối với nhiều ứng dụng, điều này có thể có nghĩa là chỉ có một vài bộ phận cấp thấp cần được mã hóa lại trong Java. .

Khi các phần của phiên bản phát hành của một hệ thống được mã hóa trong JPython, con đường được mở để tùy chỉnh người dùng cuối thông qua các tập lệnh JPython. Python là một ngôn ngữ dễ học cho người dùng cuối và ứng dụng có thể dễ dàng gọi các tập lệnh người dùng tại các điểm quan trọng trong quá trình khởi tạo hoặc thực thi. Các chương trình JPython có thể được phân phối dưới dạng mã byte Java, do đó, có rất ít nguy hiểm mà người dùng cuối phiêu lưu sẽ viết lại các thành phần mà họ không thể chạm vào (và các biện pháp phòng ngừa tiêu chuẩn chống lại sự phân hủy hoặc kỹ thuật đảo ngược cũng có thể được thực hiện).

Cách tiếp cận này đã được chứng minh là rất thành công trong thế giới Cpython. Ví dụ, sản phẩm tìm kiếm trang web Ultraseek của Infoseek là một ứng dụng Python được xây dựng trên đầu công cụ tìm kiếm được mã hóa trong C; Nó có thể được tùy chỉnh thông qua các tập lệnh Python do người dùng cung cấp. Phiên bản 1.0 của sản phẩm được thiết kế và xây dựng trong vài tuần bởi một lập trình viên duy nhất phải học Python trước - và nó có nhiều tính năng hơn bất kỳ đối thủ nào của mình. Một ví dụ khác, vào năm 1995-1996, một công ty nhỏ có tên Eshop đã xây dựng một máy chủ mua sắm điện tử dựa trên web tại Python. Nó thành công đến mức công ty đã được Microsoft mua dựa trên sản phẩm này. Thời gian phát triển ngắn được thực hiện bằng cách sử dụng Python là chìa khóa thành công của họ so với các đối thủ cạnh tranh. (Sản phẩm hiện được gọi là Merchant Server 3.0 và đã dần dần được viết lại trong C ++.)

Những câu chuyện thành công tương tự đã xuất hiện đối với Jpython, nhưng còn quá sớm để báo cáo về các trường hợp cụ thể - JPython 1.0 chỉ được phát hành vào tháng 7 năm 1998 (sau chu kỳ thử nghiệm Alpha và Beta công khai bắt đầu vào cuối năm 1997).

Sự kết luận

Nhiều nỗ lực thực hiện được hưởng lợi từ sự kết hợp của ngôn ngữ lập trình hệ thống và ngôn ngữ kịch bản. Ngôn ngữ lập trình hệ thống Java cần một người bạn đồng hành. Jpython, một phương ngữ của Python ngôn ngữ kịch bản đa năng, là ứng cử viên lý tưởng: hướng đối tượng ngay từ đầu, tích hợp liền mạch và Java thuần túy 100%. Chúng tôi hy vọng rằng những câu chuyện thành công từ người dùng Python sẽ sớm được lặp lại cho JPython.

Guido Van Rossum đã tạo ra Python vào đầu những năm 1990 và vẫn quản lý sự phát triển của nó. Ông làm việc như một nhà nghiên cứu cho các sáng kiến ​​nghiên cứu quốc gia, nơi ông sử dụng Python để phát triển phần mềm cơ sở hạ tầng cho Internet của tương lai.

Python và Java có thể làm việc cùng nhau không?

Python là ngôn ngữ kịch bản hướng đối tượng, tự động biến nó thành một cặp tốt cho Java.Nhưng khi kết hợp với một thông dịch viên Python được viết hoàn toàn bằng Java, như Jython, bạn có thể làm những việc như viết toàn bộ applet trong Python.automatically makes it a good pair for Java. But when combined with a Python interpreter written entirely in Java, like Jython, you could do things like write entire applets in Python.

Có tốt không khi học Java và Python cùng nhau?

Đó là một ý kiến rất hay.Java sẽ buộc bạn sử dụng thiết kế hướng đối tượng và bạn có thể sử dụng kỹ năng này trong mã Python của mình.. Java will force you to use object oriented design and you can use this skill in your python code.

Cái nào là kết hợp tốt nhất với Python?

Ngôn ngữ hoàn hảo là sự kết hợp của Java và Python.