lời giải bài tập môn nguyên lý các ngôn ngữ lập trình đầy đủ

31 1.3K 0
lời giải bài tập môn nguyên lý các ngôn ngữ lập trình đầy đủ

Đ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

Bài Xong *Tại nói C tỏ thích hợp với lập trình hệ thống, có tính tương thích cao, tốc độ cao, hệ thống kiểu không chặt chẽ khó kiểm soát chương trình lớn Trả lời : C ngôn ngữ lập trình có cấu trúc Nhưng nói chặt chẽ mặt kỹ thuật C ngôn ngữ lập trình có câu trúc cống C không cho phép khối giống (chẳng hạn bạn khai báo hàm hàm khác) C ngôn ngữ cấp trung cho phép thao tác bit, byte, địa C kết hợp yếu tố mềm dẻo ngôn ngữ bậc cao khả điều khiển mạnh ASSEMBLER Do vậy, C tỏ thích hợp với lập trình hệ thống Một đặc điểm bật C C có tính tương thích cao Chương trình viết C cho loại máy hệ điều hành chuyển dễ dàng sang loại máy hệ điều hành khác.có thể nạp nhanh tương thích cho loại chip vi xử lý Hiện hầu hết loại máy tính có trình biên dịch C Một chương trình viết ngôn ngữ lập trình C tối tối ưu, chạy với tốc độ cao tiết kiệm nhớ.ngôn ngữ lập trình C có tính mềm dẻo cao từ cach khai báo biến trùng lặp trinh chương trình C có trỏ nên can thiệp sâu vào hệ điều hành, phân vùng liệu quan trọng C có tính mềm dẻo lên C có nhược điểm Khi chạy chương trình lớn cần thuật toán phức tạp Tuy vậy, ngôn ngữ lập trình C thích hợp với chương trình hệ thống chương trình đòi hỏi tốc độ Còn với toán lớn phức tạp PASCAL, C khó kiểm soát chương trình *Tại nói C++ hướng đối tượng hoàn toàn, mà đa hướng C++ ngôn ngữ thích hợp cho việc xây dựng chương trình lớn phức tạp khó kiểm soát Trả lời : C++ ngôn ngữ hướng đối tượng hoàn toàn mà ngôn ngữ "đa hướng" Vì C++ hỗ trợ lập trình hướng hành động lập trình hướng đối tượng C++ kết hợp ý tưởng hay lập trình có cấu trúc với việc phân chia toán thành nhóm nhỏ có quan hệ với nhau, nhóm đối tượng chứa lệnh liệu riêng C++ đưa vào khái niệm hàm ảo, tải hàm, tải toán tử cho phép tạo kiểu liệu trừu tượng, hỗ trợ thừa kế bội Mục tiêu C++ tiếp cận ý tưởng phương pháp luận hướng đối tượng trừu tượng liệu Các đặc tính C ++ cho phép người lập trình xây dựng thư viện phần mềm có chất lượng cao phục vụ đề án lớn C++ ngôn ngữ thích hợp cho việc xây dựng chương trình lớn hệ soạn thảo, chương trình dịch, hệ quản trị sở liệu, hệ truyền thông *Tại nói Java ngôn ngữ hướng đối tượng hoàn toàn, đơn giản, độc lập với cấu trúc máy, dễ chuyển mang, an toàn Lý chương trình Java chậm, cách khắc phục để tăng tốc độ Trả lời: Hướng đối tượng Java tương tự C++ Java ngôn ngữ lập trình hướng đối tượng hoàn toàn Tất thứ đề cập đến Java liên quan đến đối tượng định nghĩa trước, chí hàm chương trình viết Java (đó hàm main) phải đặt bên lớp Hướng đối tượng Java tính đa kế thừa (multi inheritance) C++ mà thay vào Java đưa khái niệm interface để hỗ trợ tính đa kế thừa Tính đơn giản : java đơn giản vì, dựa sở C++ Sun cẩn thận lược bỏ tính khó C++ để làm cho ngôn ngữ dễ sử dụng Là ngôn ngữ lập trình hoàn toàn mới, buộc phải có dáng vẻ cảm nhận tương tự ngôn ngữ phổ biến hành đồng thời đòi hỏi khoảng thời gian huấn luyện lại tối thiểu thân thiện với người dùng Đơn giản, ngôn ngữ nhỏ - nên nhớ từ đầu xây dựng để dùng cho điện tử dân dụng đầu chạy video hộp điều khiển từ xa, thiết bị có không gian lưu trữ hạn chế Độc lập với cấu trúc máy : Đây thuộc tính đặc sắc Java Java tạo với tiêu chí "Viết (code) lần, thực thi khắp nơi" ("Write Once, Run Anywhere" (WORA)) Tính biên dịch lần chạy nhiều đạt nhờ just-in-time compiler (JIT), chuyển mã bytecode Java sang mã máy chương trình chạy Chương trình phần mềm viết Java chạy tảng (platform) khác thông qua môi trường thực thi với điều kiện có máy ảo java thích hợp hỗ trợ tảng Môi trường thực thi Sun Microsystems hỗ trợ Sun Solaris, Linux, Mac OS, FreeBSD, Windows nhiều hệ thống cài đặt thiết bị di động Dễ chuyển mạng : Java lập để hoạt động mạng có thủ tục để quản lý giao thức mạng TCP/IP, FTP HTTP Nói cách khác, Java xây dựng để thực hoàn toàn thích hợp Internet Chương trình Java chí xâm nhập vào đối thượng khác thông qua Internet cách sử dụng URL (địa Web) để định vị chúng An Toàn : Khả hướng mạng Java tự động đưa yêu cầu an toàn Đặc tính an toàn ngôn ngữ lập trình bắt nguồn từ việc có phần hạn chế cài sẵn nhằm đề phòng chương trình Java thực chức ghi vào ổ cứng người dùng hay cho phép virus từ mạng từ môi trường phân tán thâm nhập vào Lý chương trình java chậm : Do phải hoạt động thông qua máy tính ảo JVM nên tốc độ thực ứng dụng Java chậm Điều lý giải Java chưa thực sử dụng ngôn ngữ lập trình *Họ ngôn ngữ dot net có ưu nhược điểm gì: có nhiều công cụ hỗ trợ, dàng tích hợp với không, vai trò CRL nào, có phụ thuộc tảng không Trả lời : Ưu điểm ngôn ngữ lập trình NET: Mã nguồn rõ ràng, NET 2.0, mã nguồn tách biệt với giao diện HTML Chạy nhanh PHP?! Visual Studio sinh mã, tiết kiệm thời gian viết code Có thể dùng C#, VB Managed C++ Đi cặp MSSQL, Oracle Nhược điểm ngôn ngữ lập trình NET: Ko thể chạy Linux (mặc dù thiết nghĩ ứng dụng lớn có sơ xuất?!) Nếu ko có Visual Studio khó viết code! Ứng dụng tìm kiếm, nhiên ko có sở chắn! *Bạn cho ví dụ truyền tham số hàm Javascript function setFocus(tf) { var element = eval(document.frm1.+tf); element.focus(); } *Bạn cho ví dụ trả hàm lời gọi hàm Javascript function hamCha(){ var bCha='Biến cha'; //Khai báo inner-fuction function hamCon(){ alert(bCha); // >'Biến cha' } //trả hàm (chứ không gọi hàm con) return hamCon; } //ham tham chiếu đến hamCon (inner-function) var ham = hamCha(); ham(); Bài Xong Câu *Một đặc tính C có khả khắc phục lỗi kiểu Cho ví dụ minh họa Đây ưu điểm hay nhược điểm C C tạo từ ngôn ngữ kiểu.Sự tương thích ngược với code C tồn ngăn cản hạn chế kiểu mạnh hầu hết lập trình viên C coi việc kiểm tra kiểu yếu nhiều chương trình dịch C nhược điểm Trên thực tế, ưu điểm C++ C C++ cung cấp việc kiểm tra kiểu tốt Mặc dù có đặc điểm nêu trên, C hiển nhiên đáp ứng yêu cầu ngôn ngữ cài đặt hệ thống đủ hiệu để thay ngôn ngữ Assembly, khái quát uyển chuyển để thể thuật toán tương tác nhiều môi trường khác Tùy trường hợp mà xét ưu hay nhược điểm C câu *Bạn cho biết đặc tính ngôn ngữ lập trình ML Tại nói ngôn ngữ lập trình hàm ML gọi gần ngôn ngữ lập trình hàm với đặc trưng mệnh lệnh ngôn ngữ mệnh lệnh hướng hàm số ML có đặc trưng hàm linh hoạt, tương tự LISP, cho phép tạo hàm hàng phần biểu thức, hàm số truyền đối số cho hàm trả kết hàm số ML mở rộng song song, làm cho phù hợp với việc phát triển hệ thống song song có mở rộng hướng đối tượng Một đặc tính quan trọng ML hệ thống kiểu mở rộng từ hệ thống kiểu thành công Pascal Không giống C mà có nhiều kẽ hở, hệ thống kiểu ML chứng minh theo nghĩa toán học xác Đặc biệt, kiểm tra kiểu ML xác định biểu thức có kiểu đó, tính toán biểu thức đảm bảo tạo giá trị hợp lệ kiểu Chẳng hạn, biểu thức có kiểu ‘con trỏ đến xâu’, giá trị biểu thức đảm bảo trỏ đến nhớ cấp phát cho xâu Nó trỏ ‘đu đưa’ đến vị trđược cấp để lưu giá trị khác xâu câu *Cho biết khai báo kiểu danh sách ML Cho ví dụ hàm danh sách Một danh sách tập hợp có thứ tự giá trị kiểu Một cách để tạo danh sách chuỗi giá trị dấu móc vuông Danh sách số nguyên [1, 2, 3]; val it = [1,2,3] : int list Danh sách chuỗi - ["just", "a", "test"]; val it = ["just","a","test"] : string list 6*Cho biết khai báo hàm ML nào? Sử dụng mẫu sao, cho ví dụ hàm khai báo với từ khóa fun thay cho val Dạng tổng quát đầu vào người sử dụng đầu chương trình dịch Nó khai báo hàm có tên identifier Kiểu đối xác định dạng kiểu kết xác định dạng Sau ví dụ : Khai báo gắn giá trị hàm với định danh f Giá trị f hàm số từ số nguyên vào số nguyên Cũng hàm khai báo khai báo val sau : Bài xong *Thế an toàn kiểu Bạn nói an toàn kiểu C, C++, ML Java An toàn kiểu Một ngôn ngữ lập trình an toàn kiểu chương trình cho phép vi phạm khác biệt kiểu Đôi điều không rõ ràng hiểu khác biệt kiểu ngôn ngữ lập trình cụ thể Tuy nhiên, có số khác biệt kiểu mà có ý nghĩa quan trọng tất ngôn ngữ Chẳng hạn, hàm có kiểu khác với số nguyên Như vậy, ngôn ngữ mà cho phép số nguyên sử dụng hàm không an toàn kiểu Một hành động khác mà xem xét lỗi kiểu truy cập nhớ mà không cấp cho chương trình *Kiểm tra kiểu thời gian dịch kiểm tra kiểu thời gian chạy khác nào, ưu nhược điểm chúng Cho ví dụ minh họa Kiểm tra thời gian chạy Trong ngôn ngữ lập trình có kiểm tra kiểu thời gian chạy, chương trình dịch sinh mã cho mã thực hiện, kiểm tra để tin tưởng toán hạng có kiểu đắn Ưu điểm kiểm tra kiểu thời gian chạy bắt lỗi kiểu Nhược điểm thời gian chạy dành cho kiểm tra Kiểm tra thời gian dịch Nhiều ngôn ngữ lập trình đại thiết kế cho có khả kiểm tra biểu thức có tiềm lỗi kiểu Trong ngôn ngữ này, nói chung từ chối chương trình không qua kiểm tra kiểu thời gian dịch Ưu điểm kiểm tra kiểu thời gian dịch bắt lỗi sớm so với kiểm tra kiểu thời gian chạy: người phát triển chương trình cảnh báo lỗi trước chương trình đưa cho người khác chuyển giao sản phẩm Vì kiểm tra kiểu thời gian chạy loại bỏ cần thiết để kiểm tra số lỗi thời gian chạy, kiểm tra thời gian dịch làm cho tạo mã hiệu Chẳng hạn, mã dịch ML nhanh Lisp từ hai đến bốn lần Lý tăng tốc độ kiểm tra kiểu tĩnh chương trình ML giảm đáng kể cần thiết phải kiểm tra thời gian chạy Tính thận trọng Kiểm tra kiểu thời gian dịch Tính chất kiểm tra kiểu thời gian dịch chương trình dịch cần thận trọng Điều có nghĩa kiểm tra kiểu thời gian dịch tìm câu lệnh biểu thức mà sinh lỗi thời gian chạy, đánh dấu lệnh biểu thức có lỗi chúng không gây lỗi thời gian chạy Cụ thể hơn, đa số kiểm tra đề sound conservative Bộ kiểm tra gọi sound, chương trình có lỗi xem đắn Bộ kiểm tra gọi conservative, có số chương trình lỗi coi có lỗi Có lý cho việc đa số kiểm tra conservative: Đối với ngôn ngữ lập trình Turing - đầy đủ, tập chương trình gây lỗi thời gian chạy không giải Điều suy từ tính không giải toán dừng Để xem sao, xét đoạn chương trình sau: Không giải toán, biểu thức có sinh lỗi thời gian chạy hay không, có cách cho biểu thức có lỗi kiểu tính toán ‘biểu thức phức tạp mà chạy mãi’ phải dừng Do đó, việc giải ‘biểu thức có gây lỗi thời gian chạy không’ bao gồm việc giải ‘biểu thức phức tạp chạy mãi’ có dừng hay không Vì tập chương trình có lỗi thời gian chạy không giải được, nên kiểm tra kiểu thời gian dịch tìm lỗi kiểu cách xác Vì mục đích kiểm tra kiểu ngăn chặn lỗi, nên kiểm tra kiểu ngôn ngữ có kiểu an toàn conservative Sẽ có ích kiểm tra kiểu tìm lỗi kiểu, hệ việc không giải ‘bài toán dừng’ số chương trình mà thực lỗi thời gian chạy không vượt qua kiểm tra kiểu thời gian dịch *ML có thuật toán suy luận kiểu dựa sở nào? Cho ví dụ suy luận kiểu hàm ML Suy luận kiểu trình xác định kiểu biểu thức dựa kiểu biết ký hiệu xuất biểu thức Sự khác suy luận kiểu kiểm tra kiểu thời gian dịch mức độ Thuật toán kiểm tra kiểu duyệt qua chương trình kiểm tra kiểu khai báo lập trình viên có phù hợp với yêu cầu ngôn ngữ không Trong suy luận kiểu, ý tưởng đưa số thông tin không cần đặc tả, số dạng suy diễn logic dùng để xác định kiểu biến dựa theo cách chúng sử dụng Suy diễn kiểu phát triển bới Robin Milner cho ngôn ngữ lập trình ML Các ý tưởng tương tự phát triển độc lập Curry Hindley nghiên cứu tính toán lambda Mặc dù suy diễn kiểu thực tế phát triển cho ML, suy diễn kiểu áp dụng cho nhiều ngôn ngữ lập trình Chẳng hạn, mặt nguyên tắc suy diễn kiểu áp dụng cho C cho ngôn ngữ khác Chúng ta tìm hiểu suy diễn kiểu tương đối chi tiết, thể vấn đề trọng tâm kiểm tra kiểu suy diễn kiểu thể số vấn đề quan trọng thuật toán tìm kiểu lỗi chương trình Thêm vào đó, để cung cấp dạng kiểm tra kiểu thời gian dịch linh hoạt, suy diễn kiểu ML hỗ trợ đa hình Như thấy, xem xét kỹ thuật toán suy diễn kiểu, thuật toán nhận biết kiểu biến xác định chúng cần phải kiểu chuyên biệt int, bool string Trong trường hợp khác, kiểu hàm chứa biến kiểu mà không ràng buộc theo cách mà hàm định nghĩa Trong trường hợp này, hàm áp dụng cho đối số mà kiểu chúng sánh với dạng cho biểu thức kiểu chứa biến kiểu Mặc dù suy diễn kiểu đa hình khái niệm độc lập, bàn đa hình bối cảnh suy diễn kiểu, đa hình nảy sinh cách tự nhiên theo cách biến kiểu sử dụng suy diễn kiểu Ví dụ : Hàm f1 cộng cho đối số Trong ML, nguyên; số thực cần phải viết dạng 2.0 Phép toán + tải đè; phép cộng nguyên phép cộng thực Trong hàm này, nhiên, phép cộng cần phải cộng nguyên, số nguyên Do đó, đối số hàm x cần phải số nguyên Tập hợp tất quan sát này, nhận f1 cần phải có kiểu int -> int *Nêu cách sử dụng đa hình tham số kiểu ML Cho ví dụ cài đặt swap ML Đặc trưng đa hình tham số tập kiểu gắn kết với hàm giá trị khác cho trước biểu thức kiểu mà chứa biến kiểu Chẳng hạn, hàm ML mà xếp danh sách có kiểu ML Diễn tả lời, xếp áp dụng cho cặp bao gồm hàm danh sách, hàm có kiểu ‘a * ‘a -> bool, kiểu ‘a cần phải kiểu phần tử danh sách Đối số hàm thao tác nhỏ sử dụng để xác định thứ tự danh sách xếp Trong đa hình tham số, hàm có vô hạn kiểu, có vô hạn cách thay biến kiểu biến thực tế Chẳng hạn, hàm xếp dùng để xếp danh sách số nguyên, danh sách danh sách số nguyên danh sách danh sách danh sách số nguyên, Đa hình tham số ẩn tường minh Trong đa hình tham số tường minh, văn chương trình chứa biến kiểu mà xác định cách hàm gía trị khác coi đa hình Thêm vào đó, đa hình tường minh thường bao gồm việc khởi tạo tường minh áp dụng kiểu để biến kiểu thay thế vào kiểu dùng giá trị đa hình Các templates C++ ví dụ phổ cập đa hình tường minh Đa hình ML gọi đa hình ẩn, chương trình mà khai báo sử dụng hàm đa hình không cần chứa kiểu – thuật toán kiểm tra kiểu tính toán hàm đa hình tính toán khởi tạo biến kiểu cần Ví dụ: *Thế đa hình ghi đè Cho ví dụ ML Nhiều cách khai báo kiểu nhiều cách đồng kiểu có ngôn ngữ lập trình trước Nguyên nhân khai báo kiểu đồng kiểu lại liên quan đến là, tên kiểu khai báo, điều quan trọng định xem có phải kiểu không, có khác kiểu khác không tên ý nghĩa đồng với kiểu mà sử dụng đau chương trình Một số ngôn ngữ lập trình dùng số dạng đồng kiểu tương đối phức tạp dẫn đến số dạng khai báo kiểu không rõ ràng *Sắp xếp đa hình gì? Cho ví dụ cài đặt xếp đa hình ML Chúng ta thấy làm việc việc xem xét hàm xếp ML sort mà tương tự với hàm xếp C++ sort khai báo trước đây: Để sort đa hình, thao tác nhỏ cần phải truyền đối số hàm cho sort Các kiểu insert sort suy thuật toán suy luận kiểu sau Trong kiểu trên, biến kiểu ‘a khởi tạo kiểu bất kỳ, cần thiết Kết quả, hàm coi chúng “templates” Bằng việc sử dụng kết hợp template C++, hàm ML, cú pháp kiểu, hàm định nghĩa trước viết sau: Các khai báo phương án khai báo kiểu tường minh hàm ML đa hình ẩn Nói cách khác, thuật toán suy luận kiểu ML hiểu chương trình tiền xử lý mà chuyển biểu thức ML thông tin kiểu biểu thức ngôn ngữ trung gian có kiểu tường minh với templates Từ góc độ này, khác biệt đa hình tường minh ẩn chương trình tiền xử lý ngôn ngữ lập trình (như chương trình dịch ML) dùng cú pháp ẩn đơn giản tự động chèn thông tin kiểu tường minh, chuyển từ dạng ẩn sang tường minh, trước chương trình dịch thực Kết thúc ví dụ này, giả sử ta khai báo hàm nhỏ cho số nguyên: Trong áp dụng sau hàm xếp đa hình, sort template tự động khởi tạo thành kiểu int, sort dùng để xếp danh sách nguyên Bài Thiếu câu Xong *Hãy trình bày mô hình máy tính đơn giản Nêu cách thức hoạt động nó, thực thi chương trình Chúng ta sử dụng mô hình máy tính đơn giản Hình sau để xem xét việc quản trị nhớ ngôn ngữ cấu trúc khối Hình vẽ 4.1 : Ngăn xếp chương trình Mô hình máy Hình 4.1 tách nhớ code khỏi nhớ liệu Bộ đếm chương trình lưu trữ địa lệnh chương trình tăng cách bình thường sau lệnh Khi chương trình vào block mới, ghi kích hoạt activation record chứa nhớ cho biến cục khai báo block bổ sung thêm vào ngăn xếp thời gian chạy (run-time stack – vẽ đỉnh nhớ liệu), trỏ môi trường thiết lập đến ghi Khi chương trình thoát khỏi khối, ghi kích hoạt xóa khỏi ngăn xếp trỏ môi trường đặt lại vị trí cũ Chương trình lưu lại liệu, mà tồn lâu sau thực khối thời, đống heap Trên thực tế, ghi kích hoạt cấp bị thu hồi, thường gọi stack discipline Mặc dù hầu hết ngôn ngữ cấu trúc khối cài đặt ngăn xếp, hàm bậc cao làm cho stack discipline bị lỗi *Nêu cấu tạo ghi kích hoạt Lấy ví dụ ghi kích hoạt hàm Khi chương trình chạy đến khối in-line, không gian cần cấp cho biến khai báo khối Chúng ta làm điều cách cấp nhớ gọi ghi kích hoạt (activation record) ngăn xếp thời gian chạy Bản ghi kích hoạt gọi khung ngăn xếp (stack frame) Để thấy rõ làm việc nào, xét ví dụ đoạn code sau Nếu code phần chương trình lớn hơn, ngăn xếp chứa không gian cho biến khác, trước khối thực Khi bắt đầu vào khối ngoài, ghi kích hoạt chứa không gian cho x y đẩy vào ngăn xếp Khi lệnh đặt giá trị cho x y thực hiện, làm cho giá trị x y lưu ghi kích hoạt Khi bắt đầu vào khối trong, ghi kích hoạt khác chứa không gian cho z bổ sung vào ngăn xếp Sau giá trị z gán, ghi kích hoạt chứa giá trị lấy khỏi ngăn xếp Cuối cùng, thoát khỏi khối ngoài, ghi kích chứa không gian cho x y lấy khỏi ngăn xếp *Nêu khái niệm phạm vi thời gian sống biến Cho ví dụ rõ khác biệt chúng Quan trọng cần phân biệt phạm vi khai báo thời gian sống vị trí cấp • Phạm vi: vùng văn mà khai báo nhìn thấy • Thời gian sống quãng thời gian chạy chương trình, vị trí nhớ cấp kết khai báo Chúng ta so sánh thời gian sống phạm vi qua ví dụ sau, gạch dọc sử dụng để điểm vào điểm khối Trong ví dụ này, khai báo bên x giấu khai báo bên Khối bên gọi lỗ hổng phạm vi khai báo bên x, x bên truy cập khối bên Ví dụ thời gian sống không trùng với phạm vi, thời gian sống c bên bao gồm thời gian khối bên thực hiện, phạm vi x bên không bao gồm phạm vi bên Câu Hai chế truyền tham số cho lời gọi hàm truyền tham trị truyền tham chiếu khác Cho ví dụ minh họa Lợi chế Tên tham số sử dụng khai báo hàm gọi tham số hình thức Khi hàm gọi, biểu thức gọi tham số thực tế sử dụng để tính giá trị tham số cho lời gọi Sự khác biệt tham số hình thức thực tế mô tả đoạn code sau Các định danh x y tham số hình thức thủ tục p Các tham số thực tế lời gọi đến p z 4*z+1 Cách mà tham số thực tế tính toán truyền cho hàm phụ thuộc vào ngôn ngữ lập trình chế truyền tham số mà sử dụng Sự khác biệt chế truyền tham số • Thời điểm mà tham số thực tế tính toán • Vị trí sử dụng để lưu giá trị tham số Trong đa hình ML, thuật toán suy luận kiểu đưa kết luận kiểu hàm kiểu áp dụng hàm Khi hàm đa hình, hành động thuật toán suy luận kiểu hiểu việc chèn tự động khai báo template (“template declarations”) khởi tạo template (“template installation”) vào chương trình Như ta hình dung với ML , chương trình suy luận tự động gán khai báo Ví dụ hàm xếp : Để sort đa hình, thao tác nhỏ cần phải truyền đối số hàm cho sort Các kiểu insert sort suy thuật toán suy luận kiểu sau Trong kiểu trên, biến kiểu ‘a khởi tạo kiểu bất kỳ, cần thiết ( giống việc định nghĩa template c++) Kết quả, hàm coi chúng “templates” Bằng việc sử dụng kết hợp template C++, hàm ML, cú pháp kiểu, hàm định nghĩa trước viết sau: Các khai báo phương án khai báo kiểu tường minh hàm ML đa hình ẩn Nói cách khác, thuật toán suy luận kiểu ML hiểu chương trình tiền xử lý mà chuyển biểu thức ML thông tin kiểu biểu thức ngôn ngữ trung gian có kiểu tường minh với templates Như khác việc ngôn ngữ ML có chế tự động suy luận kiểu,tự động thực định nghĩa hàm ví dụ mô tả định nghĩa tường minh việc suy luận kiểu bên thay cho phải định nghãi tường minh C++ 7* Nêu đặc trưng cho ví dụ dùng thư viện template chuẩn C++ (STL) Cho ví dụ minh họa.( C++ Standard Template Library viết tắt STL) • • • • • • Thư viện chuẩn C++ dùng lại thư viện chuẩn C với số điều chỉnh nhỏ để giúp hoạt động tốt với ngôn ngữ C++ Một phận lớn khác thư viện C++ dựa Thư viện tiêu chuẩn (hay gọi STL - viết tắt từ chữ Standard Template Library) Thư viện có nhiều công cụ hữu dụng thùng chứa (thí dụ vector, danh sách liên kết biến lặp (tổng quát hóa từ khái niệm trỏ) để cung cấp thùng chứa truy cập giống truy cập mảng Xa nữa, bảng (đa) ánh xạ (mảng kết hợp) (đa) tập, tất cung cấp để xuất giao diện tương thích Do đó, dùng tiêu để viết thuật toán tổng quát mà chúng làm việc với thùng chứa hay với dãy định nghĩa biến lặp Giống C, tính thư viện truy cập việc sử dụng lệnh dẫn hướng#include để bao gồm tập tin tiêu đề chuẩn C++ cung ứng 69 tiêu đề chuẩn, có 19 tiêu đề không hiệu lực Một đặc trưng ấn tượng STL tính hiệu thời gian chạy mã tạo STL không làm cho dễ dàng viết chương trình việc cung cấp cấu trúc hữu dụng, mà STL làm cho viết code dựa thư viện mà chạy nhanh nhanh so với code mà bạn viết, bạn bỏ nhiều công sức không sử dụng STL Một lý để STL hiệu templates C++ triển khai thời gian dịch/link, với code riêng biệt sinh (và tối ưu) cho khởi tạo Lý khác việc sử dụng tải chồng, mà hóa giải thời gian dịch, cho phép compiler tối ưu code mà chọn xác cho kiểu liệu sử dụng chương trình Mặt khác, việc lặp code kết việc triển khai template, mã dịch chương trình sử dụng STL lớn Có sáu loại thực thể STL: Containers, họ đối tượng kiểu Iterators, mà cho truy cập đến đối tượng container Về trực quan, iterator khái quát trỏ cho địa đến vị trí container Thuật toán Adapters, mà cho chuyển đổi dạng thực thể dạng khác Ví dụ iterator ngược, mà duyệt ngược hướng iterartor Đối tượng hàm (Function objects) mà dạng closure (mã hàm môi trường gắn kết) Chúng sử dụng nhiều dạng cho phép đối số hàm cho template dạng in-line Cụ thể hơn, đối tượng hàm truyền hai đối số riêng biệt, đối số template mang code đối số run-time mang trạng thái hàm Hệ thống kiểu sử dụng để tin tưởng code trạng thái phù hợp với Allocators, mà đóng gói vùng nhớ Các allocators khác cung cấp nhớ có khả dọn rác, nhớ tham chiếu đếm, nhớ bền,… Ví Dụ: Sử dụng template vecter, để làm việc với vector, sử dụng class định nghĩa sẵn có tên "vector" Class nằm namespace std nên cần có câu lệnh sử dụng namespace gọi trực tiếp std::vector cần thiết Ngoài ra, thao tác xử lý vector định nghĩa thư viện C++ nên phải khai báo trước sử dụng #include using namespace std; //Bây khai báo vector, rõ vector dùng để lưu trữ đối tượng loại gì: vector name_of_vector; //Để thêm phần tử vào vị trí sau vector: name_of_vector.push_back(name_of_element); //Để bỏ phần tử cuối vector: name_of_vector.pop_back(); //Để bỏ tất phần tử vector: name_of_vector.clear(); //Để lấy phần tử vector: name_of_vector.front(); //Để lấy phần tử cuối vector: name_of_vector.back(); //Để lấy phần tử vị trí thứ n vector (đếm từ 0): name_of_vector.at(n); //Để biết số lượng phần tử vector: name_of_vector.size(); //Để biết vector có phần tử hay không: name_of_vector.empty(); //Để duyệt vector iterator: //Khai báo trỏ để duyệt vector::iterator iter_name; for (iter_name = name_of_vector.begin(); iter_name != name_of_vector.end(); iter_name++) { cout field Lớp con: cls::member Không gian tên: ns::member + Trong Java: Phương thức: x.method(parameters) Thuộc tính: x.field Lớp con: cls.member Không gian tên: ns.member - Phương thức java: Phương thức thực tác vụ thật đối tượng Trường tĩnh: Biến static biến không phụ thuộc vào đối tượng cả, tức truy vấn trực tiếp mà không cần phải khời tạo đối tượng public class StaticSample { public static int count = 0; public int a = 0; public StaticSample() { count++; a++; } public static void main(String[] args) { StaticSample aClass = new StaticSample(); StaticSample bClass = new StaticSample(); //Đếm số đối tượng tạo (biến static ko bị gán lại) System.out.println(StaticSample.count); //Các Biến non static bị gán lại ứng với đối tượng System.out.println(aClass.getA()); System.out.println(bClass.getA()); } public int getA() { return a; } } Kết quả: 1 Câu Kế thừa Java có khác biệt so với C++ Phương thức lớp ghi đè phương thức lớp cha Cho ví dụ Kế thừa C++ hỗ trợ đa kế thừa Java không Java không cho phép đa kế thừa trực tiếp, cho phép cài đặt nhiều giao tiếp (Interface) để thừa hưởng thêm thuộc tính phương thức giao tiếp VD: class SupperClass{ int a; SupperClass() { } SupperClass( int b ) { a = b; } public void message(){ System.out.println("In the sub class"); } class SubClass Extends SupperClass{ int a; SubClass( int a ){ this.a = a; } public static void main(){ SupperClass spObj = new Subclass( 22 ); spObj.message(); } } } Câu 6.Giao diện Java dùng để làm Một lớp cài đặt nhiều giao diện không, cho ví dụ minh họa Ngôn ngữ Java bao gồm khái niệm giao diện (interface), đơn giản tập hợp có tên hành vi có sẵn công khai và/hoặc phần tử liệu không thay đổi mà trình triển khai thực giao diện phải cung cấp mã lệnh Nó không rõ chi tiết hành vi Về chất (và với trình biên dịch Java), giao diện định nghĩa kiểu liệu đặc tính mạnh ngôn ngữ Các lớp khác triển khai thực giao diện, có nghĩa chúng sử dụng số giao diện tên chúng phải rõ hành vi cho định nghĩa phương thức giao diện Bất kỳ lớp hệ thống thứ bậc thực giao diện cụ thể Điều có nghĩa lớp không liên quan thực giao diện Định nghĩa: public interface interfaceName { final constantType constantName = constantValue; returnValueType - methodName( arguments ); } Bạn triển khai thực nhiều giao diện cách liệt kê tên giao diện, phân cách dấu phẩy public class className extends superclassName implements interfaceName, { class body } VD: interface CanFight { void fight(); } interface CanSwim { void swim(); } interface CanFly { void fly(); } class ActionCharacter { public void fight() { } } class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly { public void swim() { } public void fly() { } } public class Adventure { public static void t(CanFight x) { x.fight(); } public static void u(CanSwim x) { x.swim(); } public static void v(CanFly x) { x.fly(); } public static void w(ActionCharacter x) { x.fight(); } public static void main(String[] args) { Hero h = new Hero(); t(h); // Treat it as a CanFight u(h); // Treat it as a CanSwim v(h); // Treat it as a CanFly w(h); // Treat it as an ActionCharacter } } 7* Lớp trừu tượng dùng để làm gì, phân biệt với giao diện Cho ví dụ minh họa - - Lớp trừu tượng lớp khai báo lớp kế thừa phương thức lớp cha Một lớp trừu tượng không nghĩa ta khởi tạo toán tử new, phương thức abstract đưa định nghĩa (khai báo) mà không thực thi overriden lại lớp kế thừa Và lớp mà tồn phương thức abstract lớp định nghĩa abstract Đối với giao diện khác hoàn toàn với lớp trừu tượng, định nghĩa cách cứng nhắc phương thức thuộc tính chúng nghĩa không cho phép ta thực thi đoạn mã Và tất thành viên định nghĩa công khai (public) Một cách tổng quan giao diện: Giao diện ràng buộc, giao ước đảm bảo cho lớp hay cấu trúc thực điều Khi lớp thực thi giao diện, lớp báo cho thành phần client biết lớp có hỗ trợ phương thức, thuộc tính, kiện mục khai báo giao diện Một số đặc điểm để phân biệt sử dụng abstract hay interface Một class kế thừa từ abstract class, kế thừa nhiều interface Trong Interface khai báo fields, methods, mà không thực Còn abstract dùng biến, thực cách methods Các fields, methods interace public bắt buộc class kế thừa phải cài đặt (abstract) Trong abstract class có fields, methods private, internal, public, protected abstract non-abstract Interface dùng để gom hành động cần thực, khả đối tượng, abstract class cho lớp thừa kế loại, tính chất hay trạng thái Abstract class có tốc độ thực thi nhanh interface Thêm tính vào interface phá vỡ toàn lớp thực, abstract không Ví dụ interface, thành viên interface phải thực thi lớp mà kế thừa từ public interface IPlayer { string Name { get; set; } Player Actor { get; set; } Bitmap Image { get; set; } } Ví dụ khai báo lớp abstact có thành viên abstract non-abstract, thực thi lớp Faculty abstract class Employee { protected string m_str_department; protected double m_db_salary; protected int m_i_dateHired; public string Department { get { return m_str_department; } set { m_str_department = value; } } public double Salary { get { return m_db_salary; } set { m_db_salary = value; } } public int DateHired { get { return m_i_dateHired; } set { m_i_dateHired = value; } } public override string ToString() { return "Employee: " + m_str_name + "\nEmail: " + m_str_email; } public abstract double CalculateBonus(); public abstract int CalculateVacation(); } class Faculty : Employee { string m_str_rank; double m_db_hours; public override double CalculateBonus() { return 1000 + 0.05 * m_db_salary; } public override int CalculateVacation() { if (m_i_dateHired > 3) { if (m_str_rank == "Senior Lecture") return 6; return 5; } if (m_str_rank == "Senior Lecture") return 5; return 4; } } Câu 9: Phiên Java có hỗ trợ cài đặt tham số kiểu trực tiếp không cần qua Object không, điều thực • Phiên Java có hỗ trợ cài đặt tham số kiểu trực tiếp không cần qua Object phiên nhất.Java SE (còn gọi Dolphin), tháng năm 2006 công bố ngày 28 tháng năm 2011 Trong Java có loại liệu, liệu liệu tham chiếu Kiểu liệu kiểu liệu int, float, double… kiểu liệu tham chiếu mảng, lớp đối tượng(class), giao diện(interface) Và Java có quy định sau Kiểu truyền theo kiểu tham trị, kiểu tham chiếu truyền theo kiểu tham chiếu • Chương trình minh họa: public static void example(int m[], int n) { for(int i = 0; i < 10; ++i) { m[i] = 1; } n = n + 1; } } kiểu truyền cài đặt tham số ko cấn đối tượng ( Object) [...]... so với trong ngôn ngữ khác vì cách các đối tượng và các bảng hàm ảo được cấu hình và truy cập Một số lập trình viên có thể nói rằng không có gom rác, hoặc không có giao diện chuẩn để viết chương trình song song là vấn đề trong C++ Bài 8 Thiếu câu Xong 1 *Nêu các mục tiêu chính khi thiết kế ngôn ngữ lập trình Java Tại sao nói Java là ngôn ngữ hướng đối tượng thuần túy Trả lời: Ngôn ngữ lập trình Java... dụng rộng rãi, với hầu hết người sử dụng được chọn để lập trình trong một tập các ngôn ngữ mà họ hiểu và cảm thấy thuận tiện cho nhiệm vụ lập trình của họ Nói cách khác, C++ là công cụ lập trình hữu ích mà cho phép người thiết kế tạo ra các chương trình hướng đối tượng tốt, nhưng nó không buộc phong cách lập trình tốt theo cách mà các thiết kế ngôn ngữ khác thường làm Điều này hướng tới khẳng định rằng... nhiều thành công của nó có thể qui về cách mà C++ được thiết kế để cho các lập trình viên các lựa chọn và hạn chế lập trình viên theo một phong cách lập trình riêng nào 4 *Nêu các quyết định tốt và các chỗ còn vấn đề khi thiết kế C++ Trả lời: C++ là kết quả của nỗ lực lớn gồm cả phê phán và đề xuất từ nhiều lập trình viên có kinh nghiệm Trong nhiều khía cạnh, ngôn ngữ được thiết kế tốt nhất có thể, với... nhận được chương trình cần được bảo vệ khỏi các lỗi của người lập trình và các chương trình có hại • Dynamic link – Liên kết động: chương trình được phân tán thành các phần, với các phần riêng biệt được tải vào môi trường thời gian chạy của Java tùy theo yêu cầu • Multithreaded Execution: để các chương trình song song chạy trên các phần cứng và hệ điều hành khác nhau, ngôn ngữ lập trình cần gồm phần... để đánh giá Nguyên lý này giả thiết chương trình C cần dịch hiệu quả dưới chương trình dịch C++ giống như dưới chương trình dịch C Như vậy có thể vi phạm nguyên lý này khi cài đặt các số nguyên của C như các đối tượng và sử dụng phương thức tìm kiếm động để tìm hàm số nguyên trong thời gian chạy, như nó có thể giảm đáng kể việc thực thi tính toán số nguyên C Nguyên lý này không có nghĩa là các lệnh C++... hết các 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 sự đơn giản tương đối của Java là liệt kê các đặc trưng của C++ mà không xuất hiện trong Java Nó bao gồm các đặc trưng sau: • Structures and unions: các cấu trúc mà được gom lại bởi các đối tượng mà một số sử dụng tập hợp có thể được thay thế bởi các lớp được chia sẻ bởi lớp cha chung • Các hàm được thay thế bởi các. ..Hầu hết các ngôn ngữ lập trình tính toán các tham số thực tế trước khi thực hiện thân hàm, nhưng cũng có một số ngoại lệ (Một nguyên nhân là tối ưu ngôn ngữ hoặc chương trình có thể muốn trì hoãn việc tính toán tham số hình thức, vì việc tính toán này có thể lâu và có thể không được sử dụng trong một số lời gọi) Trong số các cơ chế mà tính toán các tham số thực tế trước khi thực... tượng Các ngôn ngữ lập trình hướng đối tượng có các modul có thể thay đổi và được xác định trước mà người lập trình có thể gọi ra để thực hiện những nhiệm vụ cụ thể Trong Java các modul này gọi là các lớp (class) và chúng được lưu trữ trong thư viện lớp tạo nên cơ sở của bộ công cụ phát triển Java (Java Development Kit) Trong Java tất cả các hàm và biến đều phải là thành phần của một lớp 2 *Các quyết... trong khi đó hầu hết các ngôn ngữ đối tượng khác chỉ cho phép gán con trỏ cho đối tượng Một số khía cạnh khác của các đối tượng C++ trên ngăn xếp được khám phá trong các bài tập về nhà Thành công của C++ C++ là ngôn ngữ được thiết kế rất cẩn thận mà được kế tiếp một cách đáng khâm phục, tuy ràng buộc thiết kế rất khó Đo theo số người sử dụng, C++ không nghi ngờ gì nữa là ngôn ngữ thành công nhất của... quan trọng có các yếu tố song song chuẩn như một thành phần của ngôn ngữ Java Rõ ràng, nếu chương trình Java dựa trên hệ điều hành dành cho các cơ chế song song, thì chương trình sẽ không thể được chuyển mang trên các nền tảng hệ điều hành khác nhau Tính đơn giản Mặc dù Java được phát triển theo từng năm, các đặc trưng như tính phản xạ và lớp trong không cho cảm giác đơn giản, ngôn ngữ vẫn đủ nhỏ và đơn ... name_of_vector.size(); //Để biết vector có phần tử hay không: name_of_vector.empty(); //Để duyệt vector iterator: //Khai báo trỏ để duyệt vector::iterator iter_name; for (iter_name = name_of_vector.begin();... đối tượng Các ngôn ngữ lập trình hướng đối tượng có modul thay đổi xác định trước mà người lập trình gọi để thực nhiệm vụ cụ thể Trong Java modul gọi lớp (class) chúng lưu trữ thư viện lớp tạo nên... Hình 4.8 ghi kích hoạt sử dụng ba lần cho ba lời gọi liên tiếp đến tlfact đệ qui đuôi Hình vẽ nội dung ghi kích hoạt cho lời gọi Khi lời gọi thứ nhất, tlfact(3,1) bắt đầu, ghi kích hoạt với tham

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

Từ khóa liên quan

Mục lục

  • An toàn kiểu

  • Chúng ta sử dụng mô hình máy tính đơn giản trên Hình sau để xem xét việc quản trị bộ nhớ trong các ngôn ngữ cấu trúc khối.

    • Tương thích với C

    • Thành công của C++

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

Tài liệu liên quan