1.14k likes | 1.66k Views
NGÔN NGỮ MÁY (Computer Languages). Nội Dung. Mã máy thông qua ngôn ngữ tự nhiên Ngôn ngữ máy tính Hợp ngữ Ngôn ngữ cấp cao Ngôn ngữ lập trình hướng đối tượng Một số ngôn ngữ lập trình cấp cao Các ngôn ngữ lập trình cấp cao khác Đặc trưng của một ngôn ngữ lập trình
E N D
Nội Dung • Mã máy thông qua ngôn ngữ tự nhiên • Ngôn ngữ máy tính • Hợp ngữ • Ngôn ngữ cấp cao • Ngôn ngữ lập trình hướng đối tượng • Một số ngôn ngữ lập trình cấp cao • Các ngôn ngữ lập trình cấp cao khác • Đặc trưng của một ngôn ngữ lập trình • Các khái niệm liện quan khác
Ngôn ngữ máy tính dùng để truyền đạt thông tin giữa người và máy tính Khác biệt chủ yếu giữa ngôn ngữ tự nhiên và ngôn ngữ máy tính là ngôn ngữ tự nhiên có từ vựng lớn, còn ngôn ngữ máy tính sử dụng rất hạn chế số lượng từ vựng. Ngôn ngữ máy tính phân thành các loại sau : 1. Ngôn ngữ máy tính 2. Hợp ngữ 3. Ngôn ngữ cấp cao Mã máy thông qua ngôn ngữ tự nhiên
Là ngôn ngữ mà máy tính có thể hiểu được mà không cần sử dụng chương trình dịch. Biểu diễn các chỉ thị (lệnh máy) dưới dạng các chuỗi nhị phân, thập phân. Ngôn ngữ của máy tính
Lệnh máy: Mỗi lệnh máy chỉ thực hiện một tác vụ rất đơn giản như 1 phép tính số học hay 1 hoạt động đọc/ghi vùng nhớ/thanh ghi CPU. Một lệnh máy bao gôm 2 phần : mã lệnh và toán hạng. Mã lệnh (opcode) là một chuỗi các bit 0 và 1. Mỗi chuỗi bit miêu tả 1 số, mỗi số miêu tả 1 lệnh máy cụ thể. Toán hạng xác định dữ liệu nào sẽ bị xử lý bởi lệnh máy tương ứng. Toán hạng cũng là chuỗi bit nhị phân nhưng định dạng và ngữ nghĩa của nó phụ thuộc vào từng lệnh máy cụ thể. Ngôn ngữ của máy tính
Các toán hạng có trong tập lệnh của máy tính: 1. Phép toán số học 2. Phép toán logic 3. Các thao tác rẽ nhánh. 4. Thao tác để di chuyển dữ liệu giữa vị trí bộ nhớ và thanh ghi. 5. Thao tác di chuyển dữ liệu từ các thiết bị nhập/xuất của máy tính. Ngôn ngữ của máy tính
Ví dụ: Giả sử có 2 biến nguyên 16 bit, biến nguyên thứ nhât (i) nằm ở vị trí nhớ 200h, biến nguyên thứ 2 (j) nằm ở vị trí nhớ 202h. Đọan lệnh máy (Intel 80x86) sau đây sẽ thiết lập nội dung cho biến i = 5 rồi thiết lập nội dung của biến j theo công thức i+10 : 10111000 0000010100000000 b8 0500 10100011 00000000 00000002 a3 00 02 10100001 00000000 00000002 a1 00 02 00000101000010100000000005 0a 00 10100011 00000010 00000010 a3 02 02 Ngôn ngữ của máy tính Dạng nhị phân Dạng Hexa
Ưu điểm và hạn chế của ngôn ngữ máy tính: Ưu: Thực thi rất nhanh vì máy tính thực hiện trực tiếp từng câu lệnh không cần phải có chương trình thông dịch Khuyết: Phụ thuộc vào máy Khó viết chương trình Dễ bị lỗi Khó sửa đổi Lập trình viên cần ghi mã số cho từng lệnh. Lập trình viên cần ghi vị trí lưu trữ của lệnh và dữ liệu ở dạng số khi lập chương trình. Phải hiểu rõ về phần cứng Ngôn ngữ của máy tính
Hợp ngữ được giới thiệu vào năm 1952. Là ngôn ngữ lập trình mà nó khắc phục những hạn chế của ngôn ngữ máy. Lập trình bằng hợp ngữ có các đặc điểm sau: Sử dụng mã gợi nhớ thay cho mã bằng số để biểu diễn các lệnh trong tập lệnh Ví dụ: ADD thay cho (1110 or 14), SUB thay cho (1111 or 15)… Cho phép vị trí lưu trữ được biểu diễn dưới dạng địa chỉ ký tự số thay cho địa chỉ số. Ví dụ: vị trí bộ nhớ 1000, 1001, 1002 có thể được mô tả bằng FRST, SCND và ANSR. Cung cấp các lệnh giả trong tập lệnh START PROGRAM AT 0000 START DATA AT 1000 SET ASIDE AN ADDRESS FOR FRST SET ASIDE AN ADDRESS FOR SCND SET ASIDE AN ADDRESS FOR ANSR Hợp ngữ -Assembly
Hợp ngữ -Assembly • Ví dụ: • Ngôn ngữ máy dạng nhị phân NNM dạng Hex NN Assembly • 10111000 00000101 00000000 b8 05 00 mov ax, 5 • 10100011 00000000 00000002 a3 00 02 mov [200], ax • 10100001 00000000 00000002 a1 00 02 mov ax, [200] • 00000101 00001010 00000000 05 0a 00 add ax, 10 • 10100011 00000010 00000010 a3 02 02 mov [202],ax
Trình dịch hợp ngữ của hệ thống máy tính được cung cấp bởi nhà sản xuất máy tính. Là phần mềm dùng để chuyển các chương trình bằng hợp ngữ sang chương trình mã máy Hợp ngữ - Assembler
Ví dụ:Một vài lệnh được hỗ trợ bởi máy tính Hợp ngữ - Assembler
Ví dụ:Chương trình cộng 2 số và lưu kết quả: START PROGRAM AT 0000 START DATA AT 1000 SET ASIDE AN ADDRESS FOR FRST SET ASIDE AN ADDRESS FOR SCND SET ASIDE AN ADDRESS FOR ANSR CLA FRST ADD SCND STA ANSR HLT Hợp ngữ - Assembler
Thuận lợi Dễ hiểu và dễ sử dụng Dễ định vị hơn và sửa lỗi chính xác Dễ sửa đổi chương trình Không quan tâm đến địa chỉ Dễ dàng xác định đúng vị trí Hiệu xuất cao hơn ngôn ngữ máy tính Hợp ngữ - Assembler
Hạn chế: Phụ thuộc vào máy Người lập trình phải có kiến thức về phần cứng Các lệnh chỉ được viết ở mức mã máy nên viết chương trình bằng hợp ngữ vẫn còn mất thời gian và không dễ dàng lắm. Hợp ngữ - Assembler
Là ngôn ngữ máy chỉ có hai cấu trúc điều khiển cơ bản để thực hiện các lệnh: tuần tự và nhảy. Cấu trúc tuần tự: sau khi thực hiện xong lệnh hiện hành, máy sẽ thi hành tiếp lệnh đi ngay sau lệnh hiện hành trong chương trình. Lệnh nhảy cho phép người lập trình xác định lệnh kế tiếp được thi hành ở đâu trong chương trình. Ngôn ngữ lập trình cấp thấp
Là ngôn ngữ cho phép dùng nhiều kiểu dữ liệu và nhiều cấu trúc điều khiển hơn so với ngôn ngữ cấp thấp, đồng thời cách biểu diễn các lệnh cũng gần với ngôn ngữ tự nhiên. Các loại ngôn ngữ lập trình cấp cao : Ngôn ngữ đa mục đích: Basic, C, C++, C#, Java, Fortran, Pascal Ngôn ngữ lập trình stack : TrueType, Postscript,... Lập trình khai báo : C, Pascal,... Ngôn ngữ lập trình logic, lập trình thủ tục & lập trình hàm : Prolog, Lisp,.. Ngôn ngữ lập trình hướng đối tượng : C++, C#, Java,.. Ngôn ngữ cấp cao
Đặc điểm của ngôn ngữ cấp cao: Độc lập với máy Gần với ngôn ngữ tự nhiên Không đòi hỏi lập trình viên biết về cấu trúc bên trong của máy tính. Không xử lý mã máy. Cho phép máy tính giải quyết vấn đề ngay cả khi người dùng không phải là chuyên gia lập trình. Ngôn ngữ cấp cao
Ví dụ: Ngôn ngữ máy dạng nhịphân NNM dạng Hex NN Assembly 10111000 00000101 00000000 b8 05 00 mov ax, 5 10100011 00000000 00000002 a3 00 02 mov [200], ax 10100001 00000000 00000002 a1 00 02 mov ax, [200] 00000101 00001010 00000000 05 0a 00 add ax, 10 10100011 00000010 00000010 a3 02 02 mov [202],ax Ngôn ngữcấp cao C : short i, j; // khai báo 2 biên i, j thuộc kiểu số nguyên 16 bit i = 5; // chứa 5 vào biến i j = i +10; // chứa kết quả tính công thức i + 10 vào biến j Ngôn ngữ cấp cao
Trình biên dịch (compiler) là 1 chương trình dịch, dùng để dịch chương trình bằng ngôn ngữ cấp cao thành ngôn ngữ máy tính trước khi thi hành trên máy tính. Dịch tập hợp các chỉ thị từ mã máy thành các lệnh trong bất kỳ ngôn ngữ cấp cao nào. Ngôn ngữ cấp cao - Compiler Compiler Quá trình dịch của một trình biên dịch
Ngôn ngữ cấp cao - Compiler Minh họa quá trình biên dịch lại mã nguồn của chương trình
Trình biên dịch cho ngôn ngữ L1 Chương trình P1 bằng ngôn ngữ cấp cao L1 Mã máy cho L1 Trình biên dịch cho ngôn ngữ L2 Chương trình P2 bằng ngôn ngữ cấp cao L2 Mã máy cho L2 Một máy tính hỗ trợ ngôn ngữ L1 và L2 Minh họa yêu cầu cho một trình biên dịch riêng biệt cho mỗi ngôn ngữ cấp cao được cung cấp bởi một máy tính Ngôn ngữ cấp cao - Compiler Mỗi máy tính đòi hỏi có trình biên dịch riêng biệt cho mỗi ngôn ngữ cấp cao khác nhau.
Ngoài việc biên dịch chương trình, trình biên dịch còn bắt những lỗi về cú pháp: Các ký tự không hợp lệ Kết hợp các ký tự không hợp lệ Trình tự của lệnh không đúng Sử dụng tên biến không đúng Lỗi cú pháp (Syntax errors)
Trình thông dịch (interpreter):được sử dụng để phiên dịch các chương trình được viết bằng ngôn ngữ cấp cao. Trình thông dịch lấy các lệnh của một chương trình ngôn ngữ cấp cao dịch sang các tập lệnh của ngôn ngữ máy và sau đó thực thi các tập lệnh bằng ngôn ngữ máy và đưa ra kết quả. Ngôn ngữ cấp cao - Interpreter Vai trò của trình thông dịch
Với những phần mềm lớn, việc lưu trữ tất cả các dòng lệnh của chương trình trong một tập tin nguồn sẽ gây ra: Khó khăn khi có nhiều lập trình viên cùng phát triển một chương trình Bất kỳ sự thay đổi trong chương trình nguồn thì yêu cầu toàn bộ chương trình nguồn phải được biên dịch lại Ngôn ngữ cấp cao - Linker
Giải quyết: Tổ chức chương trình thành các module được áp dụng cho các chương trình lớn Các module được lưu dưới dạng các file nguồn. Mỗi file nguồn được lưu trữ và biên dịch độc lập để tạo ra các đối tượng tập tin chương trình tương ứng. Linker là một phần mềm được sử dụng để kết hợp tất cả các đối tượng tập tin chương trình, tạo ra tập tin thực thi cuối cùng. Ngôn ngữ cấp cao - Linker
Thuận lợi của ngôn ngữ cấp cao: Dễ sử dụng trên từng máy, độc lập với máy Dễ dàng đọc, dễ hiểu và dễ sử dụng Lỗi ít Chi phí viết chương trình thấp. Dễ dàng lưu trữ và dễ bảo trì Ngôn ngữ cấp cao
Hạn chế của ngôn ngữ cấp cao: Hiệu quả thấp hơn vì thời gian thực thi lâu và tốn bộ nhớ Ít linh hoạt hơn vì không có cơ chế kiểm soát CPU và bộ nhớ Ngôn ngữ cấp cao
Lập trình hướng đối (object-oriented programming-OOP) Khái niệm về OOP lần đầu tiên được giới thiệu vào năm 1967 bởi các nhà phát triển ngôn ngữ lập trình có tên Simula-67 . OOP phổ biến vào những năm 1980 với sự phát triển của ngôn ngữ lập trình khác có tên Smalltalk, từ đó khái niệm OOP được sử dụng rộng rãi. Ngôn ngữ lập trình hướng đối tượng(OOP)
Lập trình hướng đối tượng(OOP) là gì? Là ngôn ngữ lập trình mô phỏng các vấn đề của thế giới thực trên máy tính. Cốt lõi của OOP là giải quyết vấn đề bằng cách xác định các đối tượng thế giới thực và xử lý yêu cầu của các đối tượng. Làm giảm nhẹ các thao tác viết mã cho người lập trình, cho phép họ tạo ra các ứng dụng mà các yếu tố bên ngoài có thể tương tác với các chương trình. Ngôn ngữ lập trình hướng đối tượng(OOP)
Các khái niệm cơ bản 1. Đối tượng Đối tượng đại diện cho một thực thể trong thế giới thật. Ví dụ: 1 ô tô, 1 con người, 1 hình tròn, 1 khoản tiền Mỗi đối tượng bao gồm một bộ các thủ tục (gọi là phương thức – xác định đối tượng làm cái gì) và một số dữ liệu (thuộc tính – xác định đối tượng). Mỗi đối tượng có một tên riêng biệt và tất cả các tham chiếu đến đối tượng đó được tiến hành qua tên của nó. Mỗi đối tượng có khả năng nhận vào các thông báo, xử lý dữ liệu (bên trong của nó), và gửi ra hay trả lời đến các đối tượng khác hay đến môi trường. Ngôn ngữ lập trình hướng đối tượng(OOP)
1. Đối tượng (Object) Jane: date of birth: 1955/02/02 address: 99 UML St. position: Manager Savings Account 12876: Greg: balance: 1976.32 opened: 1997/03/03 date of birth: 1970/01/01 address: 75 Object Dr. Margaret: date of birth: 1980/03/03 Mortgage Account 29865: address: 150 C++ Rd. position: Teller balance: 198760.00 opened: 2000/08/12 Transaction 487: property: 75 Object Dr. amount: 200.00 time: 2001/09/01 14:30 Instant Teller 876: location: Java Valley Cafe Ngôn ngữ lập trình hướng đối tượng(OOP)
2. Phương thức (Method) Định nghĩa 1 tập hợp các thao tác mà đối tượng sẽ thực hiện khi phương thức nhận được thông báo bởi đối tượng. Ví dụ Đối tượng: XeVespa Thuộc tính: màu đỏ, xe hãngpiaggio(Ý), xe cổ, … Phương thức: chạy, chếtmáy, hết xăng, … Ngôn ngữ lập trình hướng đối tượng(OOP)
Ngôn ngữ lập trình hướng đối tượng(OOP) Mô hình của 1 đối tượng sử dụng trong OOP
3. Thông báo (Message) Là cơ chế để hỗ trợ giao tiếp giữa các đối tượng. Tất cả các máy tính trong một chương trình được viết bằng một ngôn ngữ OOP được thực hiện bằng cách gửi thông báo cho một đối tượng để gọi các phương thức thực thi. Ngôn ngữ lập trình hướng đối tượng(OOP)
4. Lớp (Class) Lớp là một khái niệm trừu tượng, là sự mô tả của một hay nhiều đối tượng giống nhau trong hệ thống. Một đối tượng là một thể hiện của một lớp. Ví dụ: Nhân Viên, Con Người, Xe Hơi …. Lớp được dùng để biểu diễn đối tượng cho nên lớp cũng bao gồm các thuộc tính và các phương thức. Lớp có 2 dạng: lớp biến và lớp thực thể. Ví dụ: "số nguyên" là một lớp, "8,9,234,…" là các đối tượng của lớp"số nguyên". "Người-1" và "Người-2" là hai đối tượng của lớp "Người". Ngôn ngữ lập trình hướng đối tượng(OOP)
Bài tập Xác định lớp và đối tượng • General Motors b) Automoible company • Student d) Computer Science Student • Mary Smith f) Game • Board Game h) Chess • Car j) Mazda car
5. Thừa kế (Inheritance) Là một kỹ thuật được sử dụng để chia sẻ mã lệnh và hành vi (phương thức) giữa các đối tượng. Cho phép một lập trình viên tái sử dụng các hành vi của một lớp khi định nghĩa lớp mới. Lớp con có thể kế thừa từ nhiều lớp cha. Đây gọi là đa thừa kế. Ngôn ngữ lập trình hướng đối tượng(OOP)
Ngôn ngữ lập trình hướng đối tượng(OOP) Ví dụ về cấu trúc thừa kế của lớp
Chương trình hướng thủ tục • Ngôn ngữ lập trình hướng thủ tục quy ước sử dụng thủ tục trừu tượng mà thứ tự đóng gói một dãy các lệnh vào trong một thủ tục. • Vai trò của các thủ tục là chuyển đổi dữ liệu đầu vào được xác định bởi các tham số thành các giá trị. • Mô hình của ngôn ngữ lập trình hướng thủ tục có nguyên tắc tổ chức mạnh mẽ để quản lý các hành động và thuật toán nhưng yếu kém về nguyên tắc tổ chức quản lý dữ liệu dùng chung.
Ngôn ngữ lập trình hướng đối tượng • Đóng gói dữ liệu cũng như thứ tự các thao tác vào trong các thực thể trừu tượng gọi là đối tượng. • Cung cấp nhiều công cụ tiện dụng và hữu ích hơn lập trình hướng thủ tục. • Vai trò của các đối tượng là phục vụ như một kho dữ liệu và đáp ứng thực hiện các hành động được yêu cầu. • Mô hình của ngôn ngữ lập trình hướng đối tượng thì mạnh về tổ chức, quản lý các hành động, thuật toán và quản lý cả dữ liệu dùng chung. • Kế thừa cung cấp thêm sức mạnh cho phép các lớp được phân loại theo các thuộc tính và theo thừa số để tách thành nhiều lớp phụ vào một siêu lớp.
Chương trình hướng đối tượng • Thuận lợi: • Khả năng mô hình hóa gần với tự nhiên • Thiết kế theo hướng modular • Trừu tượng hóa • Liên kết động • Tái sử dụng mã lệnh • Dễ bảo trì
MỘT SỐ NGÔN NGỮ LẬP TRÌNH CẤP CAO • FORTRAN • COBOL • BASIC • PASCAL • PL/1
MỘT SỐ NGÔN NGỮ LẬP TRÌNH CẤP CAO • FORTRAN - FORmula TRANslation. • Được thiết kế để giải quyết các vấn đề về khoa học và kỹ thuật • Một số tính năng quan trọng của FORTRAN77 là: • 1. Xử lý chuỗi ký tự. • 2. Khởi tạo các vòng lặp rõ ràng hơn. • 3. Câu lệnh IF với một lựa chọn ELSE.