1.2 Ngôn ngữ lập trình– Máy tính gồm – Phần cứng: các thiết bị điện tử – Phần mềm: các chương trình được tạo ra bằng ngôn ngữ lập trình – Ngôn ngữ lập trình NNLT là ngôn ngữ dùng để viết
Trang 1Bài giảng
LÝ THUYẾT NGÔN NGỮ LẬP TRÌNH
http://slide-giaotrinh.tk
Trang 2Mục tiêu môn học
ngôn ngữ lập trình, tổng quan về các loại ngôn ngữ lập trình
giản bằng ngôn ngữ lập trình C
Sinh viên có các kiến thức cơ bản làm nền tảng
để tiếp thu, nghiên cứu các ngôn ngữ lập trình cụ thể sau này
Trang 3Nội dung
Trang 4Tài liệu học tập
– Giáo trình Lý thuyết ngôn ngữ lập trình (lưu hành nội bộ)
– Bài giảng môn học Lý thuyết ngôn ngữ lập trình
– Robert W.Sebesta, Concept of Programming Laguages,
Seventh Edition; Pearson International Edition, 2006
Trang 5Nội dung môn học
Chương 1 Mở đầu
Chương 2 Tổng quan về trình biên dịch
Chương 3 Thuật toán và lưu đồ thuật toán
Chương 4 Các thành phần cơ bản của ngôn ngữ lập trình C
Chương 5 Kiểu dữ liệu
Chương 6 Biểu thức và phép gán
Chương 7 Các lệnh có cấu trúc
Chương 8 Chương trình con
http://slide-giaotrinh.tk
Trang 6Chương 1
MỞ ĐẦU
Trang 7Nội dung Chương 1
1.1 Lập trình máy tính
1.1.1 Khái niệm 1.1.2 Các lĩnh vực ứng dụng
1.2 Ngôn ngữ lập trình
1.2.1 Khái niệm 1.2.2 Vai trò và lợi ích của việc nghiên cứu ngôn ngữ lập trình 1.2.3 Tiêu chuẩn đánh giá ngôn ngữ lập trình
1.2.4 Phân loại 1.2.5 Môi trường lập trình
1.3 Giới thiệu một số ngôn ngữ lập trình thông dụng
Trang 101.2 Ngôn ngữ lập trình
– Máy tính gồm
– Phần cứng: các thiết bị điện tử
– Phần mềm: các chương trình được tạo ra bằng ngôn ngữ lập trình
– Ngôn ngữ lập trình (NNLT) là ngôn ngữ dùng để viết các chương trình cho máy tính
– Là một hệ thống được ký hiệu hóa để mô tả những tính toán (qua máy tính) trong một dạng mà cả con người và máy đều
có thể đọc và hiểu được
– Có từ vựng
– Có cú pháp và ngữ nghĩa
Trang 111.2 Ngôn ngữ lập trình (tt)
– Dễ hiểu và dễ sử dụng đối với người lập trình
– Mô tả một cách đầy đủ và rõ ràng các tiến trình
Trang 121.2 Ngôn ngữ lập trình (tt)
– Những chỉ thị góp phần tạo nên chương trình được gọi là mã nguồn của chương trình
– Mỗi NNLT cũng chính là một chương trình, được dùng để tạo nên các chương trình khác
Trang 131.2 Ngôn ngữ lập trình (tt)
– Là một chương trình phần mềm
– Đọc hiểu mã nguồn của một ngôn ngữ ban đầu
– Ra lệnh cho máy tính tiến hành các tính toán dựa theo cú pháp của ngôn ngữ này
– Là một chương trình phần mềm
– Đọc hiểu mã nguồn của một ngôn ngữ ban đầu
– Chuyển dịch mã nguồn này sang dạng mã mới thuộc về ngôn ngữ cấp thấp hơn
Trang 141.2 Ngôn ngữ lập trình (tt)
– Chuỗi các chỉ thị máy tính có thể được thực hiện trực tiếp bởi chính máy tính
– Các chỉ thị được viết dưới dạng mã nhị phân (0 hoặc 1)
Trang 151.2 Ngôn ngữ lập trình (tt)
mềm):
– Xác định
– Hiểu rõ các yêu cầu của khách hàng
– Kết quả là mô hình thế giới thực được phản ánh thông qua một tài liệu đặc tả yêu cầu
– Phân tích
– Xác định chính xác hệ thống sẽ làm những gì
– Kết quả là một tài liệu đặc tả chức năng
– Thiết kế
– Xác định chính xác hệ thống sẽ làm việc như thế nào
– Kết quả là một tài liệu đặc tả thiết kế Người thực hiện sẽ căn cứ vào
đó để tạo ra phần mềm
Trang 16– Do các chuyên viên tin học cùng với khách hàng tiến hành, nhằm xác nhận
hệ thống bảo đảm các yêu cầu của người sử dụng
– Vận hành khai thác
– Hệ thống được triển khai để sử dụng
Trang 171.2 Ngôn ngữ lập trình (tt)
Lợi ích của việc nghiên cứu NNLT
– Tăng khả năng diễn đạt các ý tưởng
– “Độ sâu” tư duy bị ảnh hưởng bởi năng lực diễn đạt của ngôn ngữ
– Ngôn ngữ lập trình bị giới hạn trong các kiểu của cấu trúc điều khiển, cấu trúc dữ liệu và sự trừu tượng hoá
– Các hình thức của thuật toán xây dựng cũng đều có giới hạn tương tự
– Tạo nền tảng để lựa chọn NNLT phù hợp với một dự án
– Java cho các dự án lập trình truyền thông
– Lập trình logic cho các dự án về trí tuệ nhân tạo …
– Dễ dàng hơn khi học một NNLT mới
– Rất nhiều ngôn ngữ có chung cú pháp (khác nhau về cách viết)
– Có chung các kiểu dữ liệu (khác nhau về tên gọi)
Trang 181.2 Ngôn ngữ lập trình (tt)
– Hiểu sâu sắc hơn ý nghĩa của các cài đặt bên trong NNLT
– Các ngôn ngữ nói chung đều cung cấp những công cụ đặc biệt để tạo
ra các tiện ích cho lập trình viên
– Sử dụng không đúng đắn có thể gây ra sai lầm lớn
– Ví dụ: Có thể cài đặt một giải thuật đẹp và hiệu quả bằng đệ quy, nhưng nếu dùng không đúng sẽ gây lãng phí thời gian
– Tăng vốn kinh nghiệm cho lập trình viên
– Tạo tiền đề cho việc nghiên cứu và thiết kế một NNLT mới
Trang 19– Tính giản dị: Ngôn ngữ có ít các thành phần cơ sở
– Cấu trúc điều khiển: Cho phép viết các chương trình sáng
Trang 201.2 Ngôn ngữ lập trình (tt)
số tự nhiên đầu tiên
Trang 211.2 Ngôn ngữ lập trình (tt)
chương trình cho một vấn đề nào đó một cách dễ dàng hay không
– Sự giản dị: Nếu một ngôn ngữ có quá nhiều cấu trúc thì một
số người lập trình sẽ không quen sử dụng hết tất cả chúng
– Hỗ trợ trừu tượng: Là khả năng định nghĩa và sử dụng các
cấu trúc hoặc các phép toán phức tạp cho phép bỏ qua các chi tiết Trừu tượng hóa làm cho chương trình sáng sủa hơn
– Khả năng diễn đạt: Cung cấp cho người lập trình những công
cụ để có thể nghĩ sao thì viết chương trình như vậy
Trang 221.2 Ngôn ngữ lập trình (tt)
trình tạo ra các chương trình đúng đắn
– Kiểm tra kiểu: Là kiểm tra lỗi về kiểu dữ liệu của chương trình
trong giai đoạn dịch hoặc trong khi thực hiện
– Xử lý ngoại lệ (Exception Handing): Cho phép phát hiện lỗi
trong thời gian thực hiện, sửa chữa và tiếp tục thực hiện mà không phải dừng chương trình
– Sự lắm tên (Aliasing): Có hai hay nhiều tên cùng liên kết tới
một ô nhớ Sự lắm tên có thể làm giảm độ tin cậy
Trang 231.2 Ngôn ngữ lập trình (tt)
chuẩn để đánh giá ngôn ngữ, được hiểu là cả tiền bạc
– Chi phí thực hiện chương trình
– Chi phí bảo trì chương trình
– Chi phí mua trình biên dịch
Trang 241.2 Ngôn ngữ lập trình (tt)
– Theo tiến trình lịch sử phát triển
Ngôn ngữ máy, Hợp ngữ, Ngôn ngữ cấp cao, Ngôn ngữ cấp rất cao
– Theo mục tiêu của ngôn ngữ
Trang 251.2 Ngôn ngữ lập trình (tt)
– Ngôn ngữ máy (machine language)
– Hợp ngữ (assembly language)
– Ngôn ngữ cấp cao (HLL - High level language)
– Ngôn ngữ cấp rất cao (VHLL – Very High Level Language)
Trang 261.2 Ngôn ngữ lập trình (tt)
– Là các chỉ thị dưới dạng nhị phân
– Can thiệp trực tiếp vào các mạch điện tử
– Có thể được thực hiện ngay không cần qua bước trung gian nào
– Chương trình viết bằng ngôn ngữ máy dễ sai sót, cồng kềnh
và khó đọc, khó hiểu
Trang 271.2 Ngôn ngữ lập trình (tt)
– Là một bước tiến vượt bậc đưa ngôn ngữ lập trình thoát ra khỏi ngôn ngữ máy khó hiểu
– Xuất hiện vào những năm 1950
– Đưa ra khái niệm biến (variable), có thể gán một ký hiệu cho một địa chỉ
– Biểu biễn mã phép toán dưới dạng phát biểu (lệnh) thay vì dưới dạng nhị phân
– Lệnh gồm hai phần: mã lệnh (tựa tiếng Anh) chỉ phép toán cần thực hiện, và tên biến chỉ địa chỉ chứa toán hạng
– Ðể máy thực hiện được thì chương trình phải được dịch sang ngôn ngữ máy (Assembler)
Trang 281.2 Ngôn ngữ lập trình (tt)
– Được tạo ra và phát triển nhằm phản ánh cách người lập trình nghĩ và làm – Rất gần với ngôn ngữ con người (Anh ngữ) nhưng chính xác như ngôn ngữ toán học
– Việc lập trình trở nên phổ biến
– Việc lập trình cũng có nhiều khuynh hướng: lập trình cấu trúc, lập trình hướng đối tượng, lập trình logic, lập trình hàm
– Một chương trình viết bằng ngôn ngữ cấp cao được gọi là chương trình nguồn (source programs)
– Ðể máy tính "hiểu" và thực hiện được các lệnh thì phải có một chương trình dịch để dịch chương trình nguồn (viết bằng ngôn ngữ cấp cao) thành chương trình đích
Trang 291.2 Ngôn ngữ lập trình (tt)
– “Hướng đến con người”
– Được thiết kế để phát triển các ứng dụng chuyên biệt mà không đòi hỏi nhiều kiến thức về lập trình
– Một là các NNLT tương tác mạnh như ngôn ngữ đánh dấu (HTML, DHTML, XML) và ngôn ngữ mô hình (VRML) dùng để tạo trang WEB và nội dung đa phương diện
– Hai là các ngôn ngữ kịch bản như Javascript dùng để viết các chương trình nhỏ đi kèm các trang WEB để tạo hiệu ứng động
và tương tác
Trang 301.2 Ngôn ngữ lập trình (tt)
– Đa dụng: như C, perl, C++, Java, …
– Nhúng: Như Ch, Ada, …
– Lập trình web: PHP, Java Script, Cold Fusion, …
– Riêng: Như AutoLisp, Mathematica, …
Trang 311.2 Ngôn ngữ lập trình (tt)
– Mã máy: Thường gặp như C, C++,
– Thông dịch: Giữ nguyên dưới dạng file văn bản, được thông dịch sang mã máy khi chạy như Perl, PHP, …
– Lai: Ví dụ Java biên dịch ra Java Byte code, khi chạy mới thông dịch sang mã máy, như vậy tạo ra khả năng "viết một nơi chạy mọi nơi" của Java Một ví dụ khác là NET
Trang 321.2 Ngôn ngữ lập trình (tt)
– Đục lỗ: Vào thời kỳ đầu, đục các thẻ đưa cho máy tính đọc
– Tuyến tính: Phát triển ở mức cao hơn thẻ đục lỗ, nhưng còn rất thô sơ (assembly)
– Lập trình có cấu trúc:
Cho phép diễn tả thuật toán một cách dễ dàng
Áp dụng phương pháp "Chia để trị" giúp tránh lỗi khi viết những chương trình lớn, phức tạp
Dựa trên quan điểm: một công việc lớn bao giờ cũng có thể phân tích được thành những công việc nhỏ hơn
Phân tích đến mức đơn giản, có thể thực hiện được một cách dễ dàng
Phương pháp này rất phổ biến và vẫn áp dụng rất nhiều trong hiện tại
Trang 331.2 Ngôn ngữ lập trình (tt)
– Hướng đối tượng:
Xem mọi thứ là đối tượng, quá trình giải quyết công việc là quá trình các đối tượng tương tác với nhau
Ví dụ: C++, Java, Ada,
– Lập trình logic:
Cho chương trình biết sẽ làm cái gì chứ không phải làm như thế nào
Toàn bộ các câu lệnh chỉ đơn giản là đúng hoặc sai
Ví dụ: ngôn ngữ Prolog
Trang 34 Hỗ trợ tạo mã nguồn một cách trực quan.
Ví dụ: ngôn ngữ Visual Basic
– Ngôn ngữ đánh dấu:
Ví dụ: ngôn ngữ HTML
Trang 351.2 Ngôn ngữ lập trình (tt)
– Là công cụ giúp chúng ta viết mã cho chương trình
– Một công cụ viết mã cổ điển nhưng hiệu quả là Notepad
– Môi trường lập trình là những công cụ tương ứng với từng ngôn ngữ lập trình
– Hỗ trợ cho chúng ta những dòng mã tự sinh để giảm bớt chi phí lập trình
Trang 361.3 Giới thiệu một số NNLT thông dụng
– Dùng ASSEMBLY để viết các chương trình truy cập đến các cấp thấp của máy tính
– Để tạo hệ cửa sổ giao tiếp đồ hoạ, dùng NNLT hướng đối tượng
– Truy cập CSDL, dùng ngôn ngữ truy vấn
– Một số ngôn ngữ lập trình đang phổ biến hiện nay: PASCAL,
C, C++, JAVA, VISUAL BASIC …
Trang 371.3 Một số NNLT thông dụng (tt)
– Do giáo sư Niklaus Wirth thiết kế năm 1970
– Mục đích ban đầu: giảng dạy ý niệm lập trình có cấu trúc
– Do tính ưu việt nên PASCAL đã được sử dụng rộng rãi
– Dùng ngôn ngữ sát với ngôn ngữ tự nhiên nên nó thân thiện với người lập trình
– Gọn, dễ nhớ, khả năng truy cập cấp thấp, và các cấu trúc dữ liệu đa dạng
Trang 38 Cấu trúc của dữ liệu thể hiện qua phần mô tả, có một số kiểu dữ liệu
và các phép toán được định nghĩa sẵn Từ đó, có thể xây dựng các kiểu dữ liệu phức tạp hơn
Cấu trúc của các toán tử thể hiện ở chỗ bên trong các toán tử thực hiện một động tác, còn có các toán tử thực hiện nhiều động tác
Cấu trúc trong công cụ thủ tục thể hiện thông qua khả năng phân tích chương trình thành các modul độc lập và lời gọi đệ quy
Trang 39 Nếu có lỗi cú pháp thì mã máy sẽ không được sinh ra
Nếu không, sau khi dịch xong sẽ nhận được một phiên bản có khả năng thực thi
– Thích hợp để giảng dạy lập trình và cho những người mới học lập trình
Trang 401.3 Một số NNLT thông dụng (tt)
– Được phát triển từ ngôn ngữ B trên máy UNIX
– Đến nay, ANSI ban hành chuẩn về C
– C không phải là ngôn ngữ lập trình có cấu trúc chính thống: không cho phép các khối lồng nhau
– Là ngôn ngữ cấp trung vì nó cho phép thao tác trên các bit, byte, và địa chỉ
– Kết hợp các yếu tố mềm dẻo của ngôn ngữ bậc cao và khả năng điều khiển mạnh của ASSEMBLY
– Do vậy, C tỏ ra thích hợp với lập trình hệ thống
Trang 41– C thoáng hơn PASCAL, chẳng hạn C không kiểm tra kiểu khi chạy, điều này do người lập trình đảm nhiệm
Trang 42– Chương trình được viết bằng C thường có được sự tối ưu như chạy với tốc độ cao và tiết kiệm bộ nhớ
– C chỉ thích hợp với những chương trình hệ thống hoặc những chương trình đòi hỏi tốc độ
– Với bài toán lớn và phức tạp, C cũng rất khó kiểm soát chương trình
Trang 431.3 Một số NNLT thông dụng (tt)
– Được phát triển từ ngôn ngữ C
– Có thể coi C++ là một cải tiến của C
– Nó mang đầy đủ các đặc tính của C
– Một chương trình viết bằng C có thể biên dịch được bằng trình biên dịch của C++
– Ở những phiên bản đầu tiên, mã nguồn C++ được dịch sang
mã nguồn C, rồi từ mã nguồn C tiếp tục được biên dịch
Trang 441.3 Một số NNLT thông dụng (tt)
– Là ngôn ngữ lập trình hướng đối tượng
– Nó có tính kế thừa, tính đóng gói và tính đa hình
– Nhưng không phải là ngôn ngữ hướng đối tượng hoàn toàn
– Là ngôn ngữ "đa hướng“: C++ vừa hỗ trợ lập trình hướng sự kiện vừa hỗ trợ lập trình hướng đối tượng
Trang 46– Thích hợp cho việc xây dựng những chương trình lớn như các
hệ soạn thảo, chương trình dịch, các hệ quản trị cơ sở dữ liệu, các hệ truyền thông,
Trang 471.3 Một số NNLT thông dụng (tt)
– Năm 1990, bởi nhóm phát triển của Sun Microsystem
– Có nhiệm vụ viết phần mềm hệ thống để nhúng vào các sản phẩm điện tử
– Khắc phục một số hạn chế của C++ để tạo ra ngôn ngữ lập trình JAVA
– Do được phát triển từ C++ nên JAVA rất giống C++
– JAVA là ngôn ngữ hướng đối tượng hoàn toàn, còn C++ là ngôn ngữ đa hướng (ngôn ngữ lai)
Trang 481.3 Một số NNLT thông dụng (tt)
– Là ngôn ngữ hướng đối tượng: các modul (lớp) có thể thay đổi
và được xây dựng trước, có thể gọi ra để thực hiện những nhiệm vụ cụ thể
– Đơn giản: JAVA đã được lược bỏ các tính năng khó nhất của C++ Trong JAVA không có các con trỏ, không hỗ trợ chồng toán tử (Overloading), không có tiền xử lý
– Đa luồng: JAVA cho phép xây dựng các trình ứng dụng, trong
đó nhiều quá trình có thể xảy ra đồng thời
Trang 49– Độc lập với cấu trúc máy: Là thuộc tính đặc sắc nhất của JAVA, các ứng dụng được viết bằng JAVA có thể dùng được trên hầu hết mọi máy tính
Trang 501.3 Một số NNLT thông dụng (tt)
– Được phát triển bởi Microsoft
– Cung cấp phương pháp phát triển các ứng dụng trên Windows nhanh và dễ nhất
– Cung cấp môi trường tích hợp, nơi người lập trình có thể sử dụng các công cụ để tạo ra giao diện người sử dụng một cách nhanh chóng
– Dễ dàng tạo ra mã để trả lời lại các tác động từ phía người sử dụng
Trang 511.3 Một số NNLT thông dụng (tt)
– Cung cấp cả kỹ thuật lập trình hướng sự kiện và kỹ thuật lập trình hướng đối tượng
– Môi trường phát triển của Visual Basic có những công cụ soạn thảo và gỡ rối tinh vi
– Cho phép người lập trình gắn mã với giao diện một cách nhanh chóng cho mỗi sự kiện
– Visual Basic hỗ trợ tạo ra một giao diện nhanh nhất nhưng lại hạn chế về tốc độ
Trang 541.3 Một số NNLT thông dụng (tt)
– C# hỗ trợ khái niệm giao diện (interfaces) tương tự như Java cho phép đa thừa kế
– C# có kiểu cấu trúc (struct), là kiểu hạng nhẹ và bị giới hạn
– Cấu trúc không thể thừa kế lớp hay được thừa kế nhưng có thể thực hiện giao diện
– C# cung cấp những đặc trưng lập trình hướng thành phần như property, sự kiện và dẫn hướng khai báo (được gọi là attribute)
– C# cho phép truy cập trực tiếp bộ nhớ dùng con trỏ như C++, nhưng vùng mã đó được xem là không an toàn
Trang 551.4 Câu hỏi ôn tập
1 Vai trò của ngôn ngữ lập trình trong công nghệ phần mềm là gì?
2 Nêu các lợi ích của việc nghiên cứu ngôn ngữ lập trình
3 Nêu các tiêu chuẩn để đánh giá một ngôn ngữ lập trình
4 Nêu các yếu tố ảnh hưởng đến tính dễ đọc
5 Các yếu tố ảnh hưởng đến tính dễ viết là gì?
6 Các yếu tố nào ảnh hưởng đến độ tin cậy?
7 Chi phí của ngôn ngữ lập trình bao gồm những gì?