bài giảng môn nguyên lý các ngôn ngữ lập trình C8

39 500 0
bài giảng môn nguyên lý các ngôn ngữ lập trình C8

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trần Văn Dũng BM Khoa học máy tính TỔNG QUAN BÀI oạAn toàn bảo mật thông itn Bài 4: Mã khối đại 8: TÍNH CHUYỂN MANG VÀ AN TOÀN - JAVA 13 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Ngôn ngữ lập trình Java thiết kế James Golsling người khác Sun Microsystems Ngôn ngữ, phát sinh từ dự án 1990, gọi Oak dành cho việc sử dụng thiết bị gọi set-top-box Set-top-box chủ định thiết bị tính toán nhỏ, gắn với mạng dạng đặt bên tivi Có nhiều chức khác mà set-top-box cung cấp Bạn tưởng tượng trình duyệt Web hiển thị tivi thay bàn phím bạn sử dụng nút ấn phím điều khiển từ xa Bạn chọn chương trình tivi phim download mô máy tính nhỏ mà thực thiết bị tính toán hiển thị hình bạn Quảng cáo oto cho phép bạn tải chuyến du lịch tương tác ảo oto cho người xem cảm giác mô riêng thẻ lái Dù kịch xuất nào, môi trường tính toán bao gồm đồ họa, thực thi chương trình đơn giản trao đổi thông tin site từ xa chương trình thực thi chỗ Trong trình phát triển Oak kỹ sư quản trị Sun Microsystems nhận thấy cần ngôn ngữ lập trình cho trình duyệt Internet, mà sử dụng để viết ứng dụng nhỏ truyền mạng thực thi kiểm soát trình duyệt web chuẩn tảng chuẩn Gosling đến kết luận: ngôn ngữ hỗ trợ dự án C++ trở nên gần chuẩn lập trình viên xây dựng ứng dụng mà tốc độ đóng vai trò quan trọng Nhưng C++ không đủ tin cậy Nó nhanh, giao diện không tương thích, chương trình hay bị ngắt Tuy nhiên, thiết bị dân dụng, tính tin cậy quan trọng nhiều tốc độ Gosling nhận định, cần có ngôn ngữ lập trình Với nhiều lý khác nhau, kể nỗ lực quảng cáo Sun Microsystem, Java trở nên thành công sau thời gian ngắn đời ngôn ngữ truyền thông Internet vào 1995 Các phần hệ thống Java bao gồm : 14 • Ngôn ngữ lập trình Java • Chương trình dịch Java hệ thống thời gian chạy Java (máy ảo Java) • Thư viện mở rộng, bao gồm công cụ gia diện đồ họa ứng dụng khác Java Java applets An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính 2.1 Tổng quan ngôn ngữ Java 2.1.1 Các mục tiêu Java Bài 4: Mã khối đại Ngôn ngữ lập trình Java môi trường thực thi thiết kế với mục tiêu sau : 2.1.2 • Portability – Tính chuyển mang: cần dễ dàng truyền chương trình qua mạng nhận chúng chạy đắn môi trường nhận, không phụ thuộc vào phần cứng, hệ điều hành trình duyệt Web sử dụng • Reliability – Tính tin cậy: chương trình chạy từ xa người sử dụng, người không viết code, thông báo lỗi cố chương trình cần đảm bảo loại bỏ tối đa tốt • Safety – Tính an toàn: môi trường tính toán nhận chương trình cần bảo vệ khỏi lỗi người lập trình chương trình có hại • Dynamic link – Liên kết động: chương trình phân tán thành phần, với phần riêng biệt tải vào môi trường thời gian chạy Java tùy theo yêu cầu • Multithreaded Execution: để chương trình song song chạy phần cứng hệ điều hành khác nhau, ngôn ngữ lập trình cần gồm phần hỗ trợ tường minh giao diện chuẩn cho lập trình song song • Simplicity and Familliatity – Tính đơn giản quen thuộc: ngôn ngữ có cảm giác người thiết kế website bạn bình thường với người lập trình C với người quen C/C++ • Efficiency – Tính hiệu quả: điều quan trọng thứ yếu so với yêu cầu khác Các định thiết kế Một số mục tiêu thiết kế định thiết kế liệt kê Bảng 8.1 Ở dấu + định có hỗ trợ mục tiêu +/- có ưu điểm nhược điểm định Một số ô vuông để trống, định thiết kế có tác động đến mục tiêu Chúng ta thấy tính quan trọng tương đối tính hiệu trình thiết kế Java cách xem cột bên phải Nó nghĩa tính hiệu không ưu tiên mà tương đối so với mục tiêu khác, tính hiệu mục tiêu quan trọng Hỗ trợ song song Java có mô hình song song dựa luồng, mà tiến trình song song độc lập Đây phần quan trọng ngôn ngữ, hai thiết kế có ý nghĩa lớn quan trọng có yếu tố song song chuẩn thành phần ngôn ngữ Java Rõ ràng, chương trình Java dựa hệ điều hành dành cho chế song song, chương trình chuyển mang tảng hệ điều hành khác oạAn toàn bảo mật thông itn 15 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Tính đơn giản Mặc dù Java phát triển theo năm, đặc trưng tính phản xạ lớp không cho cảm giác đơn giản, ngôn ngữ đủ nhỏ đơn giản thiết kế so với hầu hết ngôn ngữ lập trình đa dụng chất lượng cao khác Một cách đơn giản để nhìn thấy đơn giản tương đối Java liệt kê đặc trưng C++ mà không xuất Java Nó bao gồm đặc trưng sau: • Structures and unions: cấu trúc mà gom lại đối tượng mà số sử dụng tập hợp thay lớp chia sẻ lớp cha chung • Các hàm thay phương thức tĩnh • Kế thừa bội phức tạp hầu hết trường hợp loại bỏ khái niệm giao diện đơn giản sử dụng • Lệnh Goto không cần thiết • Tải đè toán tử phức tạp cho không cần thiết; hàm Java tải đè • Chuyển kiểu tự động phức tạp cho không cần thiết • Con trỏ mặc định cho đối tượng không cần thiết cho kiểu khác Kéo theo kiểu trỏ riêng biệt không cần thiết Một số đặc tính xuất C++ tính chất bản, mục tiêu thiết kế C++ tương thích ngược với C Các đặc tính khác bỏ qua Java sau bàn luận, định phức tạp đảm bảo đáng kể nhiều so với tính mà đem lại Việc bỏ qua quan trọng kế thừ bội, chuyển kiểu tự động, tải đè toán tử phép toán trỏ số dạng có C C++ 2.2 Các lớp Java kế thừa 2.2.1 Các lớp đối tượng Java viết cú pháp giống C++ cho lập trình dễ dàng lập trình viên C C++ Điều làm cho lớp điểm chiều sử dụng chương trước trông giống chuyển sang Java Đây phiên viết rút gọn lớp bỏ qua chi tiết phương thức: Giống ngôn ngữ dựa lớp khác, lớp Java khai báo liệu chức gắn kết với đối tượng tạo lớp Khi đối tượng Java 16 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại tạo, không gian cấp để lưu giữ trường liệu đối tượng hàm tạo lớp gọi để khởi tạo trường liệu Như C++, hàm tạo có tên lớp Cũng C++, lớp Point có thành phần public, private protected Mặc dù public, private, protected từ khóa Java, đặc tả tính nhìn thấy nghĩa xác hai ngôn ngữ, giải thích mục 8.2.2 Thuật ngữ Java khác chút so với C++ Sau tóm tắt ngắn gọn thuật ngữ quan trọng nói Java: • Class object có nghĩa như ngôn ngữ hướng đối tượng dựa lớp khác, field thành phần liệu (data member) • Method hàm thành phần (member function); this: giống this C++, định danh this thân của phương thức Java tham chiếu đến đối tượng mà phương thức triệu gọi • Native method: phương thức viết ngôn ngữ khác chẳng hạn C • Package: tập lớp không gian tên chung • Chúng ta xét vài đặc trưng lớp đối tượng Java, bao gồm trường phương thức tĩnh, tải đè, phương thức finalize, phương thức main, phương thức toString sử dụng để biểu diễn in đối tượng khả định nghĩa phương thức native Chúng ta bàn biểu diễn đối tượng thời gian chạy Java cài đặt phương thức lookup 8.3 kết nối với khía cạnh khác kiến trúc thời gian chạy Initialization Java đảm bảo hàm tạo gọi lúc đối tượng tạo Vì có số vấn đề thú vị liên quan đến kế thừa, nên điều xét mục 8.2.3 Các phương thức trường tĩnh Nếu trường khai báo static, trường toàn lớp, thay đối tượng Nếu phương thức khai báo static, phương thức gọi mà không sử dụng đối tượng lớp Cụ thể, phương thức static gọi trước có đối tượng lớp tạo Các phương thức static truy cập đến trường tĩnh phương thức tĩnh khác lớp Chúng tham chiếu đến this chúng phần đối tượng cụ thể lớp Bên lớp, thành phần tĩnh thường truy cập với tên lớp, class_name_static_method(agrs), thay thông qua tham chiếu đối tượng Các trường tĩnh khởi tạo với biểu thức initialization static initialization block Cả hai thể đoạn code sau: oạAn toàn bảo mật thông itn 17 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Như phần ghi chương trình, khối khởi tạo tĩnh Java thực lần, lớp tải Tải lớp bàn đến 8.3 liên kết với máy ảo Java JVM Ở có qui tắc riêng điều khiển thứ tự khởi tạo tĩnh, lớp chứa hai biểu thức khởi tạo khối khởi tạo tĩnh Cũng có hạn chế dạng khối khởi tạo tĩnh Chẳng hạn, khối tĩnh không xử lý ngoại lệ, không chắn phần điều khiển tương ứng khởi tạo thời gian tải lớp Overloading – tải đè Tải đè Java dựa dấu hiệu phương thức, mà bao gồm tên phương thức, số tham số kiểu tham số Nếu hai phương thức lớp lớp (khi hai khai báo lớp hai kế thừa khai báo, kế thừa), có tên có dấu hiệu khác nhau, tên phương thức tải đè Như ngôn ngữ khác, tải đè hóa giải thời gian dịch Thu gom rác finalize Vì Java ngôn ngữ tự gom rác, không cần thiết phải giải phóng tường minh đối tượng Thêm vào đó, lập trình viên không cần quan tâm tham chiếu treo tạo giải phóng đối tượng Tuy nhiên, việc thu gom rác thu hồi không gian sử dụng đối tượng Nếu đối tượng giữ truy cập đến nguồn tài nguyên đó, khóa tài nguyên chia sẻ đó, cần giải phóng đối tượng không truy cập Với lý này, đối tượng Java có phương thức finalize, mà gọi hai điều kiện: garbage collector trước không gian thu hồi máy ảo máy ảo tồn Qui ước có ích phương thức finalize gọi super.finalize, mô tả sau đây, cho code kết thúc mà gắn kết với superclass thực hiện: 18 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Ở có tương tác thú vị phương thức finalize chế ngoại lệ Java Mọi ngoại lệ không nắm bắt xảy phương thức finalize thực bỏ qua Vấn đề lập trình gắn kết với phương thức finalize lập trình viên kiểm soát tường minh việc phương thức finalize gọi Quyết định dành cho hệ thống thời gian chạy Nó tạo vấn đề đối tượng khóa đối tượng chia sẻ, chẳng hạn khóa không giải phóng thu gom rác xác định chương trình cần thêm không gian Một giải pháp đặt thao tác giải phóng khóa tài nguyên khác phương thức mà gọi tường minh chương trình Điều làm việc tốt, người sử dụng lớp biết tên phương thức nhớ gọi phương thức đối tượng không cần Một số khía cạnh khác thú vị đối tượng lớp Java phương thức main sử dụng để bắt đầu chương trình, phương thức Tostring sử dụng để tạo in biểu diễn đối tượng khả định nghĩa phương thức native: 2.2.2 • main: Ứng dụng Java triệu gọi với tên lớp mà khởi động ứng dụng Lớp cần có phương thức main, mà cần phải public, static, cần trả void cần nhận đối số kiểu string[] Phương thức main gọi với đối số chương trình dạng mảng xâu Lớp với phương thức main triệu gọi trực tiếp chương trình ứng dụng stand-alone mà có ích dùng để kiểm chứng • toString: lớp định nghĩa phương thức toString, mà gọi việc chuyển sang dạng xâu cần thiết, in đối tượng • native methods: phương thức native phương thức viết ngôn ngữ khác, chẳng hạn C Tính chuyển mang an toàn qui với phương thức native: native code chuyển mạng theo yêu cầu, điều khiển tương tác với JVM hiệu phương thức không dịch máy ảo Lý sử dụng phương thức native là: tính hiệu mã đối tượng native việc truy cập đến công cụ chương trình mà viết ngôn ngữ khác Các gói tính nhìn thấy Java có bốn khác tính nhìn thấy trường phương thức, ba tương ứng với mức nhìn thấy C++ thứ tư xuất phát từ gói Các gói Java chế đóng gói tương tự không gian tên C++ mà cho phép khai báo liên quan nhóm lại nhau, với số khai báo ẩn giấu gói khác Trong chương trình Java, trường phương thức thuộc lớp cụ thể lớp phần gói nêu hình 8.1 Lớp cần oạAn toàn bảo mật thông itn 19 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại phải thuộc gói mặc định tên gói khác file chứa lớp Hình 8.1: Gói Java tính nhìn thấy lớp Các định nghĩa Java sau: • public: truy cập nơi mà lớp nhìn thấy • protected: truy cập đến phương thức lớp lớp đến lớp khác gói • private: truy cập thân lớp • package: truy cập đến code gói, không nhìn thấy lớp gói khác Các thành viên khai báo không sửa quyền truy cập có tính nhìn thấy gói Nói cách khác, phương thức tham chiếu đến thành viên private lớp mà thuộc về, thành viên non private lớp gói, thành viên protected lớp cha (bao gồm lớp cha gói khác) thành viên public lớp gói nhìn thấy Các tên khai báo gói khác truy cập với import, mà đưa vào khai báo từ gói khác với tên qui chuẩn dạng sau, mà gói chứa tên tường minh: 20 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính 2.2.3 Bài 4: Mã khối đại Kế thừa Trong thuật ngữ Java, lớp kế thừa từ lớp cha Cơ chế kế thừa Java giống với C++ ngôn ngữ lập trình hướng đối tượng dựa lớp khác Cú pháp liên kết với kế thừa tương tự C++ với thừ khóa extends, ví dụ lớp ColorPoint extends lớp Point 8.2.1: Ghi đè giấu trường Như ngôn ngữ lập trình khác, lớp kế thừa trường phương thức từ lớp cha, trừ trường phương thức có tên mô tả lớp Khi tên phương thức lớp trùng với tên phương thức lớp cha, định nghĩa lớp ghi đè phương thức lớp cha với dấu hiệu Một phương thức ghi đè không xung đột với định nghĩa mà ghi đè cách có kiểu trả khác Một phương thức bị ghi đè lớp cha cần phải truy cập với từ khóa super Đối với trường, khai báo trường lớp che giấu trường lớp cha có tên Trường che giấu truy cập việc sử dụng tên đầy đủ (nếu tĩnh) việc sử dụng biểu thức truy cập trường mà chứa việc chuyển đến kiểu superclass từ khóa super Constructor Java đảm bảo hàm tạo gọi đối tượng tạo Trong dịch hàm tạo lớp con, chương trình dịch kiểm tra để tin tưởng rằng, hàm tạo lớp cha triệu gọi Điều làm theo cách chuyên biệt mà người lập trình nói chung muốn suy xét Cụ thể, lệnh đầu hàm tạo lớp không lời gọi đến lớp cha, lời gọi super() tự động chèn chương trình dịch Điều lúc làm việc tốt, lớp cha hàm tạo mà tham số, lời gọi super() không sánh với hàm tạo khai báo, chương trình dịch báo lỗi Ngoại lệ cho việc kiểm tra xảy hàm tạo gọi hàm Trong trường hợp này, hàm tạo đầu không cần gọi hàm tạo lớp cha, hàm tạo thứ hai oạAn toàn bảo mật thông itn 21 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại cần Chẳng hạn, khai báo hàm tạo ColorPoint(){ColorPoint(0,blue)} bổ sung cho lớp ColorPoint trước, hàm tạo dịch mà không chèn thêm lời gọi đến hàm tạo lớp cha Point Một khác biệt nhỏ Java qui tắc kế thừa cho finalize khác với qui tắc cho hàm tạo Cho dù lời gọi đến lớp cha yêu cầu hàm tạo, chương trình dịch không bắt buộc gọi đến phương thức finalize lớp cha phương thức finalize lớp Phương thức lớp Final Java chức chế thú vị để hạn chế lớp lớp: phương thức toàn lớp khai báo final Nếu phương thức khai báo final, phương thức không bị ghi đè lớp Nếu lớp khai báo final lớp có lớp Lý đặc trưng lập trình viên muốn định nghĩa hành vi đối tượng kiểu Vì lớp tạo kiểu bàn 8.3, điều yêu cầu hạn chế lớp Một ví dụ đặc biệt singleton pattern thiết kế lớp mà có đối tượng tạo Mẫu che giấu hàm tạo lớp cho public hàm mà gọi hàm tạo lần thực chương trình Mẫu giải vấn đề hạn chế số đối tượng đối tượng lớp, lớp ghi đè phương thức public phương thức mà tạo nhiều đối tượng Nếu lập trình viên thực muốn ép buộc singleton pattern, cần có cách giữ cho lập trình viên khác không định nghĩa lớp singleton class Lớp java.lang.System ví dụ khác lớp final Lớp final cho lập trình viên ghi đè phương thức hệ thống Theo nghĩa không chặt java final ngược lại với virtual C++: phương thức Java ghi đè trừ khai báo final, hàm thành viên C++ ghi đè chúng virtual Sự tương đồng không thật xác, hàm thành viên C++ virtual lớp mà lại nonvirtual lớp sở lớp suy diễn, vi phạm yêu cầu vtables lớp sở lớp suy diễn cần phải có cách trình bày Class Object Về nguyên tắc, lớp khai báo chương trình Java mở rộng lớp khác, lớp lớp superclass tường minh dịch subclass lớp Object Lớp Object lớp mà lớp cha Lớp Object có phương thức sau mà ghi đè lớp suy diễn: 22 • GetClass, mà trả đối tượng Class biểu diễn lớp đối tượng Nó sử dụng để khám phá tên đầy đủ lớp, thành viên lớp cha trung gian giao diện mà cài đặt • ToString, mà trả biểu diễn String đối tượng • Equals, mà định nghĩa khái niệm đối tượng mà dựa giá trị, tham chiếu so sánh An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Quá trình liên kết bao gồm việc tạo nên trường tĩnh lớp giao diện khởi gán chúng giá trị mặc định (thông thường 0) Các tên hóa giải, bao gồm việc kiểm tra tham chiếu ký hiệu thay chúng tham chiếu trực tiếp mà xử lý hiệu tham chiếu sử dụng thường xuyên Các lớp mà không tải tường minh Nếu khởi tạo lớp đạt được, lớp loại bỏ phần việc gom rác 2.4.4 Thông dịch bytecode tìm kiếm phương thức Thông dịch bytecode thực Java bytecode thực kiểm tra thời gian chạy kiểm tra biên mảng để tin tưởng truy cập mảng nằm biên khai báo mảng Kiến trúc thời gian chạy trình biên dịch Java la tương tự với kiến trúc máy tính đơn giản nêu chương với program counter, instruction area, stack heap Chương trình Java chạy gồm nhiều luồng Khi luồng tạo, cấp program counter stack Program counter rõ lệnh cần thực Java stack bao gồm ghi kích hoạt, lưu trữ biến cục bộ, tham số, giá trị trả giá trị trung gian việc triệu gọi phương thức Java Máy ảo Java JVM registers để giữ giá trị trung gian mà lưu Java stack Cách tiếp cận định người thiết kế Java để giữ tập lệnh Java chặt làm cài đặt dễ dàng nhiều kiến trúc máy tính Khi đối tượng mảng tạo, lưu heap Mọi luồng chạy máy ảo Java chia sẻ heap Bản ghi kích hoạt có ba phần: vùng biến cục bộ, ngăn xếp toán hạng vùng liệu Kích thước vùng biến cục ngăn xếp toán hạng, mà đo words, phụ thuộc vào cần thiết phương thức xác định thời gian dịch Vùng biến cục ghi kích hoạt Java tổ chức mảng từ, với kiểu liệu khác chiếm số từ khác Ngăn xếp toán hạng dùng cho tính toán trung gian truyền tham số cho phương thức khác Thay truy cập liệu nhớ địa ô nhớ, hầu hết lệnh bytecode Java thao tác đẩy, kéo, thay giá trị từ đỉnh ngăn xếp ngăn xếp Chỉ lệnh cộng với hai toán hạng, chẳng hạn, kéo hai toán hạng khỏi ngăn xếp toán hạng đẩy tổng vào ngăn xếp toán hạng Kiểu kiến trúc dẫn đến mã lệnh ngắn hơn, lệnh với số toán hạng cần để xác định toán hạng, không cần địa số ghi cho toán hạng, toán hạng số liệu đỉnh ngăn xếp toán hạng Vùng liệu ghi kích hoạt lưu liệu sử dụng để hỗ trợ hóa giải constant pool (mà bàn phần sau), trả phương thức bình thường rẽ nhánh ngoại lệ Các lệnh bytecode Java dịch lưu trữ dạng file mà bao gồm cấu trúc liệu gọi constant pool Đó bảng tên ký hiệu tên lớp, tên trường tên phương oạAn toàn bảo mật thông itn 37 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại thức Khi lệnh bytecode tham chiếu đến trường , chẳng hạn, tham chiếu thực tế số biểu diễn số đến constant pool Để nhận trường, chẳng hạn, lệnh chứa số 27, tên ký hiệu thứ 27 constant pool Cách tiếp cận lưu tên ký hiệu từ mã nguồn file bytecode, dành không gian để lưu tên ký hiệu lần Khi thực chương trình, trình thông dịch bytecode làm kiểm tra thời gian chạy sau để ngăn lỗi kiểu giữ tính toàn vẹn hệ thống thời gian chạy: • Mọi chuyển kiểu kiểm tra để đảm bảo chúng an toàn kiểu • Mọi tham chiếu mảng kiểm tra để đảm bảo số mảng nằm biên mảng • Các tham chiếu kiểm tra để tin tưởng chúng không null trước tìm địa Thêm vào đó, việc số học trỏ việc sử dụng gom rác tự động hỗ trợ cho việc thực thi an toàn chương trình Java Khi lệnh mà truy cập đến trường phương thức thực hiện, thường phải tìm kiếm vị trí thích hợp object template bảng tìm kiếm phương thức (method lookup table), việc sử dụng tên ký hiệu trường phương thức constant pool Điều không hiệu truy cập qua constant pool thường xuyên Tìm kiếm qua constant pool nút cổ chai thực thi chương trình song song, điều yêu cầu khóa constant pool việc khóa constant pool hạn chế thực thi luồng khác Việc cài đặt JVM tối ưu tìm kiếm trường phương thức đối tượng việc điều chỉnh bytecode thực thi chương trình Cụ thể, lệnh bytecode mà tham chiếu đến constant pool thành quick bytecode tương đương, mà tham chiếu đến địa tuyệt đối trường phương thức Chẳng hạn, lệnh bytecode đẩy giá trị trường đối tượng vào ngăn xếp toán hạng (Đối tượng mà trường truy vấn đối tượng đỉnh ngăn xếp toán hạng trước thao tác thực hiện) Khi lệnh getfield thực hiện, tiến hành tìm kiếm tên ký hiệu trường mà sánh với xâu vị trí #18 constant pool Nếu trường tìm thấy, định vị byte vị trí đối tượng, lệnh thay phiên nhanh sau 38 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại mà sử dụng offset tính toán trường từ đỉnh đối tượng Nếu chương trình truyền qua lệnh nữa, lệnh xuất vòng lặp, lệnh nhanh thực thi Bạn không cần hiểu phần lệnh getfield, vấn đề quan trọng cách mà thay đổi lệnh bytecode lần đầu thực để làm cho chương trình chạy nhanh lệnh sử dụng lại Tìm phương thức ảo lớp Có bốn loại bytecode khác để triệu gọi phương thức: • invokevirtual: sử dụng lớp cha đối tượng biết thời gian dịch • invokeinterface: sử dụng giao diện đối tượng biết thời gian dịch • invokestatic: sử dụng để triệu gọi phương thức tĩnh • invokespecial: sử dụng số trường hợp đặc biệt mà không bàn Trong thuật ngữ đơn giản nhất, invokevirtual sử dụng tình mà hàm ảo giống C++ gọi, Java ngôn ngữ lập trình kiểu tĩnh mà lớp lớp cài đặt với thứ tự bảng phương thức (vtable), invokeinterface tương tự tìm kiếm phương thức Smalltalk, giao diện cài đặt lớp đối tượng không xác định vị trí tương đối phương thức bảng phương thức xem invokevirtual trước xét tính chất invokeinterface Giống getfield, invokevirtual bao gồm việc tìm kiếm tên ký hiệu lệnh thực lần đầu Cụ thể, giả sử ta có mã nguồn Java khai báo tham chiếu đối tượng x triệu gọi phương thức x: Để đảm bảo tính đắn, điều ảnh hưởng đến cách mã dịch, ta giả thiết x biến cục khối Lời gọi x.equal(‘‘test’’) dịch vào dãy bytecode sau, câu bên phải ; thích oạAn toàn bảo mật thông itn 39 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Xâu java/lang/Object/equals(Ljava/lang/Object;)Z gọi đặc tả phương thức Xâu không lưu theo nghĩa đen bytecode, mà lưu constant pool mô tả trước Khi invokevirtual thực hiện, máy ảo tìm đặc tả phương thức thông tin liên quan file class xác định phương thức yêu cầu đối số Đối với phương thức equals ví dụ cúa có đối số Đối số tham chiếu đối tượng, trường hợp số rõ biến cục phạm vị tại, kéo khỏi ngăn xếp toán hạng Sử dụng thông tin lưu tham chiếu đối tượng (biến cục x) máy ảo java truy vấn lớp java cho đối tượng, tìm danh sách phương thức định nghĩa bới lớp sau lớp cha nó, tìm kiếm phương thức mà sánh với đặc tả phương thức Khi định vị phương thức đúng, phương thức gọi theo cách với lời gọi hàm thực hầu hết ngôn ngữ lập trình cấu trúc khối Bytecode Rewriting for invokevirtual Mặc dù trình tìm kiếm phương thức tìm gọi phương thức, tính ưu việt thông tin kiểu tĩnh tính chương trình dịch Java thời gian dịch Cụ thể, chương trình dịch Java xếp bảng phương thức lớp theo cách bảng lớp cha chương trình dịch C++ làm Bằng cách vậy, chương trình dịch đảm bảo phương thức định vị vị trí tương đối bảng phương thức gắn kết với lớp lớp Do khi, tìm kiếm phương thức sử dụng để tìm phương thức bảng phương thức, offset phương thức lần thực tương lai lệnh Hình 8.5 rõ bytecode điều chỉnh lần thực sau lệnh invokevirtual, phương thức đắn tìm thấy bảng phương thức đối tượng (được gọi mtable) 40 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Hình 8.5 Tối ưu invokevirtual cách viết lại bytecode Phần Hình 8.5 đường đứt nét lệnh invokevirtual dòng lệnh nối tiếp bới trỏ đến đặc tả phương thức constant pool Sau phương thức tìm thấy, dòng lệnh chỉnh sửa nêu đường đứt nét Trong dòng lệnh hiệu chỉnh, invokevirtual thay phiên nhanh invokevirtual_quick trỏ đặc tả phương thức thay offset phương thức bảng phương thức Khi invokevirtual_quick thực hiện, máy ảo sử dụng tham chiếu đối tượng ngăn xếp toán hạng để định vị lớp bảng phương thức sau dùng mtable offset dòng lệnh để tìm phương thức thích hợp mà không cần tìm kiếm Quan trọng để thực việc triệu gọi phương thức vòng lặp, chẳng hạn, đối tượng khác ngăn xếp toán hạng cho việc thực khác lời gọi phương thức Như kết quả, lớp đối tượng thay đổi từ lần gọi đến lần Tuy nhiên, offset phương thức bảng phương thức lời gọi, lớp lớp kiểu tĩnh tham chiếu đối tượng mã nguồn Java Tìm phương thức ảo giao diện Tình tương tự tìm phương thức giao diện biết thời gian dịch Điểm khác tối ưu dùng invokevirtual_quick không làm việc Do kỹ thuật khác sử dụng Giả sử chương trình dịch Java chứa khai báo phương thức oạAn toàn bảo mật thông itn 41 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Trong incrementable giao diện đảm bảo đối số x có phương thức inc add2 gọi thời gian chạy Ở có số lớp cài đặt giao diện incrementable Chẳng hạn có lớp IntCounter FloatCounter dạng sau: Vì lớp cài đặt incrementable khai báo gói khác nhau, không tham chiếu đến khác, lý để tin phương thức inc định vị offset giống hai bảng phương thức (Trên thực tế không khó xây dựng tập giao diện lớp mà chúng cách để làm cho lớp mà cài đặt giao diện tương đồng với theo cách vậy) Khi phương thức add2 dịch, chương trình dịch Java sinh code dạng sau (với đặc tả phương thức từ constant pool vieesrt cho rõ ràng) Khi invokeinterface thực hiện, lớp đối tượng tìm thấy bảng phương thức cho lớp tìm kiếm để xác định phương thức với đặc tả cho Khi phương thức định vị, phương thức gọi invokevirtual Vì offset phương thức bảng phương thức khác lần thực thi lệnh, nên không viết lại invokeinterface thành invokevirtual_quick Tuy nhiên, có khả lần thực thi lệnh dùng cho đối tượng lớp đó, nên có cảm tưởng lãng phí bỏ qua offset thông tin khác Hình 8.6 việc điều chỉnh bytecode sử dụng cho invokeinterface 42 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Hình 8.6: Tối ưu invokeinterface cách viết lại bytecode Phần đường gạch chấm Hình 8.6 dãy lệnh ban đầu, với lệnh invokeinterface tiếp nối trỏ đến đặc tả phương thức constant pool vị trí trống chưa sử dụng Sau thực invokeinterface, lệnh thay invokeinterface_quick trỏ đến lớp phương thức lưu bên đặc tả phương thức Khi invokeinterface_quick thực lần duyệt khác lệnh này, lớp toán hạng đối tượng so sánh với lớp cached Nếu đối tượng từ lớp đó, phương thức sử dụng Nếu đối tượng từ lớp khác, đặc tả phương thức dãy lệnh này, tiến trình tìm kiếm nối tiếp lệnh invokeinterface lại Tóm tắt tính hiệu Trong Java, lời gọi phương thức phải tìm kiếm, lần đầu lệnh thực chậm nhiều so với lần sau Trong tìm kiếm lần đầu mà sử dụng invokevirtual có hai hướng giải (một tìm kiếm bảng constant lớp mà phương thức cách hai tìm kiếm bảng phương thức lớp đối tượng), hai số mảng (trong bảng constant danh sách phương thức), giá viết lại bytecode Trong lần gọi tiếp theo, có cách số Đối với invokeinterface, có tìm kiếm theo bảng phương thức lần đầu lệnh thực Trong lần gọi tiếp theo, có số mảng tìm kiếm khác bảng phương thức lớp bị thay đổi 2.5 Các đặc trưng an ninh oạAn toàn bảo mật thông itn 43 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Có số khác hệ thống chương trình cấu trúc định hướng hàm (hay gọi hướng thủ tục) chương trình hướng đối tượng Một khác biệt tổ chức hàm liệu Trong lập trình hướng hàm, liệu hàm khai báo riêng biệt Nếu hàm áp dụng cho nhiều kiểu liệu, nói chung sử dụng dạng phân chia trường hợp lệnh switch thân hàm Trong chương trình hướng đối tượng, hàm gắn kết với liệu mà chúng thiết kế để thao tác Sử dụng tìm kiếm động, việc cài đặt ngôn ngữ lập trình lựa chọn hàm cho loại liệu Sự khác chương trình hướng hàm hướng đối tượng thể qua phép so sánh Ví dụ 6.1 6.2 Các ví dụ dài mô tả điều này, viết C C++ mô tả phụ đề B.1 Trong hai Ví dụ 6.1 6.2 xem xét bối cảnh bệnh viện Dữ liệu ví dụ thể doctors, nurses orderly (người phục vụ) Các hàm áp dụng cho kiểu liệu bao gồm hàm thể thông tin employee bệnh viện hàm để thiết lập xác định việc trả thù lao cho employee Ví dụ 6.1 Tổ chức hướng hàm truyền thống Trong chương trình hướng hàm truyền thống, thao tác nhóm lại thành hàm Nếu muốn hàm đơn thể thông tin kiểu nhân viên bệnh viện, ta sử dụng việc kiểm tra thời gian chạy để xác định áp dụng thao tác liệu cho Về tổng thể, codes để thể hàm trả thù lao trông sau: 44 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Ví dụ 6.2 Tổ chức hướng đối tượng Trong chương trình hướng đối tượng, hàm nhóm lại với liệu mà chúng thiết kế để thao tác Đối với ví dụ bệnh viện, lớp doctor, nurse orderly chứa code cho hai hàm Về tổng thể, tạo tổ chức chương trình sau: So sánh ví dụ 6.1 6.2 Dữ liệu thao tác sử dụng ví dụ 6.1 6.2 xếp vào ma trận sau Trong tổ chức hướng hàm truyền thống, code săp xếp thành hàng vào hàm mà làm việc với kiểu liệu Trong tổ chức hướng đối tượng, code xếp thành cột, nhóm trường hợp với kiểu liệu mà thiết kế cho kiểu oạAn toàn bảo mật thông itn 45 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Trong tổ chức hướng hàm, dễ dàng thêm thao tác mới, PayBonus Promote, khó bổ sung kiểu liệu Administrator Intem Trong tổ chức hướng đối tượng, dễ dàng bổ sung kiểu liệu Administrator Intem, rắc rối để thêm thao tác PayBonus Promote, bao gồm thay đổi lớp 2.6 Mẫu thiết kế (Design patterns) Phương pháp mẫu thiết kế tiếp cận phổ biến cho thiết kế phần mềm mà phát triển với lớn mạnh lập trình hướng đối tượng Trong thuật ngữ bản, design pattern giải pháp tổng quát mà đến từ việc trích dẫn lặp vấn đề tương tự Thiết kế mẫu giải pháp phát triển từ nguyên lý code mẫu mà đơn giản khởi tạo cho nhiều mục đích Thay vào đó, mẫu thiết kế dẫn cách tiếp cận để giải kiểu toán mà xảy nhiều dạng cụ thể Giải pháp dựa thiết kế mẫu cần tương tự, áp dụng mẫu thiết kế cho tình cụ thể cần đòi hỏi suy xét Khái niệm mẫu thiết kế sử dụng nguyên lý thiết kế nào, thiết kế khí kiến trúc Công trình kiến trúc sư Christopher Alexander thường tham khảo nguồn cảm hứng cho thiết kế phần mềm Ở có ví dụ kiến trúc, lấy từ số sách Alexander (A Pattern Language : Towns, Buildings, Construction, Oxford Univ Press, 1977) Nó bao gồm mô tả ngữ cảnh toán giải pháp phát triển kết kinh nghiệm: Vòng tròn ngồi Một nhóm ghế, sofa, đống đệm- có hầu hết thứ sống người – cần xếp chúng để người chuyển động sống chúng việc kinh doanh tinh tế Hầu hết việc xếp chỗ ngồi khó, người tránh nó, xảy Số khác tỏ thu xếp sống quanh chúng để tập trung giải phóng lượng Sự khác biệt hai ? 46 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Do đó, đặt không gian ngồi vị trí mà bảo vệ, không cắt ngang đường chuyển động, gần vòng tròn, thực cho thân phòng giúp cho tạo nên vòng tròn với đường hoạt động xung quanh nó, cho người tự nhiên hút phía ghế họ rơi vào tâm trạng muốn ngồi Đặt ghế đệm gần thành vòng tròn có nhiều chỗ Khi chương trình nhận thấy họ giải giải lại kiểu toán theo cách khác đôi chút, sử dụng ý tưởng thiết kế, họ tìm cách đưa mẫu thiết kế chung cho giải pháp họ Sự phổ biến tiến trình dẫn đến việc định danh số lớn mẫu thiết kế phần mềm Theo Jim Coplien, mẫu tốt có đặc tính sau: • Nó giải toán: Mẫu bao gồm giải pháp, không chiến lược nguyên lý trừu tượng • Nó khái niệm chứng minh Mẫu bao gồm giải pháp với ghi dấu vết, lý thuyết nghiên cứu • Giải pháp không hiển nhiên Nhiều kỹ thuật giải vấn đề (như xu phương pháp thiết kế phần mềm) tìm cách đưa giải pháp từ nguyên lý Các mẫu tốt sinh gián tiếp lời giải cho toán – cách tiếp cận cần thiết cho vấn dề thiết kế khó • Nó mô tả quan hệ: mẫu không mô tả mudules mà mô tả sâu cấu trúc chế hệ thống • Các mẫu có thành phần người quan trọng (cực tiểu can thiệp người) Mọi phần mềm phục vụ sư thuận tiên người chất lượng sống, mẫu tốt hữu cách tường minh cho tính thẩm mỹ tiện ích Trước đọc nguyên lý chung mẫu thiết kế, cách tốt học mẫu thiết kế tìm hiểu số ví dụ sử dụng mẫu lập trình bạn Cuốn sách sử dụng rộng rãi Design Patterns : Element of Reusable Object-Oriented Software E.Gamma, R Helm, R Johnson J Vlissides (Addison-Wesley, 1994) Ví dụ 10.3 Singleton Design Patterns Mẫu thiết kế đơn mẫu thiết kế tạo, nghĩa là mẫu dùng để tạo đối tượng theo cách Sau tổng quan ngắn gọn mẫu thiết kế đơn, mà sử dụng kiểu đối tượng tiêu đề sử dụng chung sách thể khác mẫu thiết kế Mục tiêu oạAn toàn bảo mật thông itn 47 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Mẫu thiết kế đơn có ích tình huống, cần khởi tạo đối tượng lớp Mẫu cho phép kiểm soát trực tiếp lớp việc có đối tượng cần tạo Nó tốt buộc lập trình viên có trách nhiệm để tạo instance, việc hạn chế xây dựng chương trình Cài đặt Chỉ cần viết lớp để cài đặt mẫu đơn Lớp sử dụng đóng gói để giữ cho hàm tạo lớp ẩn mã client Lớp có phương thức public mà gọi hàm tạo đối tượng lớp chưa tạo Nếu đối tượng tạo, hàm public trả trỏ đối tượng không tạo đối tượng Code ví dụ Đây ví dụ mẫu đơn tổng quát viết C++ Bạn đọc mà không quen với C++ đọc giải thích quay trở lại sau đọc chương sau Giao diện lớp Singleton cung cấp phương thức public mà cho phép client code yêu cầu khởi tạo lớp đó: Sau cài đặt Ban đầu, trỏ riêng pointer_instance đặt Trong cài đặt phương thức public instance(,) đối tượng tạo gán to_instance lời gọi trước chưa tạo đối tượng lớp : 48 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Ví dụ 10.4 Facade Facade mẫu đối tượng cấu trúc (structural object pattern), có nghĩa mẫu việc kết hợp đối tượng thành cấu trúc lớn chứa nhiều đối tượng Mục tiêu Mẫu facade cung cấp đối tượng đơn để truy cập đến tập đối tượng mà kết hợp để tạo thành cấu trúc Muốn vậy, facade cung cấp giao diện mức độ cao gom đối tượng tạo thành họ dễ sử dụng Cài đặt Đây lớp facade, định nghĩa cho tập lớp mà sử dụng để tạo nên cấu trúc ‘bên dưới’ facade Trong việc sử dụng thông thường, đối tượng facade có đoạn code thực tế bé, truyền hầu hết lời gọi đến đối tượng cấu trúc ‘bên dưới’ facade Ví dụ mẫu Facade Facade mẫu phổ biến nhiệm vụ hoàn thành việc kết hợp từ kết số nhiệm vụ Chẳng hạn, chương trình dịch xây dựng việc cài đặt phân tích từ vựng, phân tích cú pháp, phân tích ngữ nghĩa số pha khác Nếu pha cài đặt đối tượng với phương thức mà thực chức nó, thân chương trình dịch đối tượng facade mà nhận chương trình đầu vào sử dụng đối tượng riêng lẻ cài đặt pha oạAn toàn bảo mật thông itn 49 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối dịch chương trình Người sử dụng chương trình dịch thấy giao diện thể đối tượng chương trình dịch Đây giao diện hữu ích giao diện chi tiết cho đối tượng thành phần mà ẩn giấu facade 2.7 Tóm tắt chương Chương trình bày tổng quan thiết kế hướng đối tượng tóm tắt bốn khái niệm gắn kết với ngôn ngữ hướng đối tượng: tìm kiếm động, trừu tượng, kiểu kế thừa • Dynamic lookup nghĩa thông điệp gửi tới đối tượng, mã hàm (hoặc phương thức) mà thực thi xác định theo cách mà đối tượng cài đặt Các đối tượng khác phản hồi thông điệp theo cách khác • Abstraction có nghĩa chi tiết cài đặt che giấu bên đơn vị chương trình với giao diện chuyên biệt Giao diện đối tượng thường tập hợp hàm công khai (hoặc phương thức công khai) mà thao tác liệu che giấu • Subtyping có nghĩa đối tượng a có chức đối tượng khác b, sử dụng a bối cảnh giành cho b • Inheritance khả tái sử dụng định nghĩa kiểu đối tượng để định nghĩa kiểu đối tượng khác Trong ngôn ngữ truyền thống mà cài đặt closures cho phép ghi chứa hàm, ghi cung cấp dạng tìm kiếm động trừu tượng Subtyping inheritance dạng cần thiết để hỗ trợ lập trình hướng đối tượng, nói chung ngôn ngữ truyền thống 50 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Nhiều người nhầm lẫn subtyping với inheritance Như thuật ngữ sử dụng sách này, subtyping quan hệ kiểu mà cho phép giá trị kiểu sử dụng vị trí giành cho kiểu khác Còn kế thừa cho phép đối tượng định nghĩa từ đối tượng tồn Trong ngôn ngữ dựa lớp, kế thừa cho phép cài đặt lớp tái sử dụng phần cài đặt lớp khác Cách đơn giản để phân biệt subtyping inheritance là: subtyping quan hệ giao diện inheritance quan hệ cài đặt oạAn toàn bảo mật thông itn 51 [...]... của những người thiết kế ngôn ngữ lập trình Java, khai báo các ngoại lệ như vậy sẽ hỗ trợ không đáng kể trong việc thiết lập tính đúng đắn của chương trình Nhiều thao tác và cấu trúc của ngôn ngữ lập trình Java có thể có kết quả là ngoại lệ thời gian chạy Thông tin sẵn sàng cho chương trình dịch và mức độ phân tích mà chương trình dịch thực hiện là không đủ để thiết lập rằng các ngoại lệ thời gian chạy... và nguyên lý trừu tượng • Nó là khái niệm được chứng minh Mẫu bao gồm giải pháp với bản ghi dấu vết, không phải là lý thuyết hoặc nghiên cứu • Giải pháp là không hiển nhiên Nhiều kỹ thuật giải quyết vấn đề (như các xu thế hoặc phương pháp thiết kế phần mềm) tìm cách đưa ra giải pháp từ các nguyên lý đầu tiên Các mẫu tốt nhất sinh ra gián tiếp lời giải cho bài toán – cách tiếp cận cần thiết cho các. .. chỗ Khi các chương trình nhận thấy rằng họ đã giải quyết đi và giải quyết lại cùng một kiểu bài toán theo các cách khác nhau đôi chút, nhưng sử dụng cùng ý tưởng thiết kế, họ có thể tìm cách đưa một mẫu thiết kế chung cho các giải pháp của họ Sự phổ biến của tiến trình này dẫn đến việc định danh một số lớn các mẫu thiết kế phần mềm Theo Jim Coplien, mẫu tốt có các đặc tính sau: • Nó giải quyết bài toán:... và phân tích các vấn đề cài đặt Java Chương trình dịch Java tạo ra dạng ngôn ngữ máy gọi là bytecode Cái gốc của tên bytecode, mà là thuật ngữ chuẩn, có trước Java, là vì các bộ bytecode là các chỉ lệnh cho máy ảo mà có thể có độ dài 1 byte Nhiều chương trình dịch cho các ngôn ngữ bậc cao thực tế tạo ra bytecode thay vì mã mát tự nhiên Chẳng hạn, chương trình dịch Pascal có nhiều ảnh hưởng UCSD tạo... các kiểu nguyên thủy và các kiểu tham chiếu Tám kiểu nguyên thủy là kiểu bool và bảy kiểu số Bảy kiểu số là các dạng interger byte, short, int, long, char, float và double Ba kiểu tham chiếu là class types, interface types và array type Có một kiểu đặc biệt là null type Các giá trị của các kiểu tham chiếu là các tham chiếu đến các đối tượng (bao gồm cả mảng) Mọi đối tượng, bao gồm cả mảng, hỗ trợ các. .. học máy tính Bài 4: Mã khối hiện đại Các câu checked exceptions và unchecked exceptions tham chiếu đến việc kiểm tra thời gian chạy của một tập các ngoại lệ mà có thể được quăng ra trong chương trình Java Chương trình dịch Java kiểm tra trong thời gian dịch xem chương trình có chứa phần xử lý (handlers) cho mỗi ngoại lệ được kiểm tra không Chúng ta sẽ thực hiện điều này bằng cách phân tích các ngoại lệ... đúng, phương thức được gọi theo cùng cách với lời gọi hàm được thực hiện trong hầu hết các ngôn ngữ lập trình cấu trúc khối Bytecode Rewriting for invokevirtual Mặc dù quá trình tìm kiếm phương thức sẽ tìm được và gọi đúng phương thức, nó không có được tính ưu việt của thông tin kiểu tĩnh được tính bởi chương trình dịch Java trong thời gian dịch Cụ thể, chương trình dịch Java có thể sắp xếp bảng phương... cùng với sự lớn mạnh của lập trình hướng đối tượng Trong thuật ngữ cơ bản, design pattern là giải pháp tổng quát mà đến từ việc trích dẫn lặp của các vấn đề tương tự Thiết kế mẫu không phải là giải pháp phát triển từ các nguyên lý đầu tiên hoặc code mẫu mà có thể đơn giản được khởi tạo cho nhiều mục đích Thay vào đó, mẫu thiết kế là chỉ dẫn hoặc cách tiếp cận để giải quyết kiểu bài toán mà đã xảy ra trong... Contravariance Đối với kiểu T bất kỳ, Java có kiểu mảng T[ ] của các mảng mà các phần tử có kiểu T Mặc dù kiểu mảng được nhóm thành các lớp và các giao diện, nhưng không thể kế thừa từ một kiểu mảng Trong thuật ngữ Java, các kiểu mảng là final Các kiểu mảng là kiểu con của Object và do đó các mảng hỗ trợ mọi phương thức gắn kết với lớp Object Giống như các kiểu tham chiếu khác, biến mảng là con trỏ đến mảng... lớp phụ trợ, lớp các nút ngăn xếp: Lớp này dự định sẽ thuộc cùng package với lớp Stack Vì ở đây không có các từ nói đến quyền truy cập (public, private hoặc protected) các trường và các phương thức được truy cập chỉ đến các phương thức trong cùng gói Đây là dàn ý của lớp Stack, ở đó các đối tượng Node được sử dụng để lưu các phần tử của danh sách liên kết các phần tử của ngăn xếp Các phương thức ở

Ngày đăng: 03/04/2016, 20:36

Mục lục

  • Ngôn ngữ lập trình Java được thiết kế bởi James Golsling và những người khác tại Sun Microsystems. Ngôn ngữ, được phát sinh từ dự án bắt đầu từ 1990, được gọi là Oak và được dành cho việc sử dụng trong các thiết bị được gọi là set-top-box. Set-top-box được chủ định là thiết bị tính toán nhỏ, gắn với mạng dạng nào đó và đặt bên trên tivi. Có nhiều chức năng khác nhau mà set-top-box có thể cung cấp. Bạn có thể tưởng tượng ra là trình duyệt Web được hiển thị trên tivi và thay vì bàn phím bạn có thể sử dụng các nút ấn trên phím điều khiển từ xa. Bạn có thể chọn chương trình tivi hoặc phim hoặc download mô phỏng máy tính nhỏ mà có thể thực hiện trên thiết bị tính toán và hiển thị trên màn hình của bạn. Quảng cáo oto có thể cho phép bạn tải về một chuyến du lịch tương tác ảo của oto cho mỗi người xem cảm giác mô phỏng riêng của thẻ lái. Dù kịch bản có thể xuất hiện như thế nào, môi trường tính toán có thể bao gồm đồ họa, thực thi chương trình đơn giản và trao đổi thông tin giữa site từ xa và chương trình thực thi tại chỗ.

  • Trong quá trình phát triển Oak các kỹ sư và quản trị tại Sun Microsystems nhận thấy rằng cần một ngôn ngữ lập trình cho trình duyệt trên Internet, mà có thể được sử dụng để viết các ứng dụng nhỏ có thể truyền trên mạng và thực thi dưới sự kiểm soát của trình duyệt web chuẩn nào đó trên nền tảng chuẩn bất kỳ.

  • Gosling đi đến kết luận: các ngôn ngữ hiện tại không thể hỗ trợ dự án. C++ trở nên gần chuẩn đối với các lập trình viên xây dựng các ứng dụng mà ở đó tốc độ đóng vai trò quan trọng. Nhưng C++ không đủ tin cậy. Nó nhanh, nhưng giao diện của nó không tương thích, chương trình hay bị ngắt. Tuy nhiên, trên thiết bị dân dụng, tính tin cậy quan trọng hơn nhiều tốc độ. Gosling nhận định, cần có ngôn ngữ lập trình mới.

  • Với nhiều lý do khác nhau, kể cả các nỗ lực quảng cáo của Sun Microsystem, Java trở nên cực kỳ thành công sau một thời gian ngắn nó ra đời như một ngôn ngữ truyền thông Internet vào giữa 1995.

  • Các phần chính của hệ thống Java bao gồm :

  • Ngôn ngữ lập trình Java

  • Chương trình dịch Java và các hệ thống thời gian chạy của Java (máy ảo Java)

  • Thư viện mở rộng, bao gồm công cụ gia diện đồ họa và các ứng dụng khác của Java như Java applets.

  • 2.1. Tổng quan ngôn ngữ Java

    • 2.1.1. Các mục tiêu của Java

    • 2.1.2. Các quyết định thiết kế

    • 2.2. Các lớp Java và kế thừa

      • 2.2.1. Các lớp và các đối tượng

      • 2.2.2. Các gói và tính nhìn thấy

      • 2.2.3. Kế thừa

      • 2.2.4. Các lớp trừu tượng và giao diện

      • 2.3. Các kiêu Java và kiểu con

        • 2.3.1. Phân loại kiểu

        • 2.3.2. Kiểu con cho lớp và giao diện

        • 2.3.3. Các mảng, Covariance và Contravariance

        • 2.3.4. Phân lớp ngoại lệ của Java

        • 2.3.5. Đa hình kiểu con và lập trình

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan