Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 1: Giới thiệu - Nguyễn Văn Hòa

Tóm tắt Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 1: Giới thiệu - Nguyễn Văn Hòa: ...indows 18 Bạn biết ủược những NNLT nào?  FORTRAN, COBOL, RPG, (Visual) BASIC, ALGOL-60, ALGOL-68, PL/I,  C, C++, Java, C#, Pascal, Modula, Oberon, Lisp, Scheme, ML, Haskell,  Ada, Prolog, Goedel, Curry, Snobol, ICON,  . . . 19 20 Tại sao cú rất nhiều NNLT  Sự ủa dạng về ủặc ủiểm ... thể nghĩ sao thỡ viết chương trỡnh như vậy  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: 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 28... 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 35 Phõn loại ngụn ngữ lập trỡnh (tt)  Ph...

pdf44 trang | Chia sẻ: havih72 | Lượt xem: 271 | Lượt tải: 0download
Nội dung tài liệu Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 1: Giới thiệu - Nguyễn Văn Hòa, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
1NGUYÊN LÝ NGƠN NGỮ 
LẬP TRÌNH
Giảng viên: Nguyễn Văn Hịa
Khoa KT-CN-MT – ðH An Giang
2Thơng tin cần thiết
 ðịa chỉ email : nvhoa@agu.edu.vn
 Chỉ liên lạc qua điện thoại nếu thật cần thiết
 Tài liệu của mơn học:
 Qui định trong lớp:
3Mục tiêu của mơn học
 Nắm được các nguyên lý (NL) của ngơn ngữ lập
trình (NNLT)
 Tìm hiểu sự phát triển của NNLT
 Nắm được các kiểu dữ liệu và các cấu trúc điều
khiển
 Hiểu được các phương thức (paradigm) lập trình 
(LT) như hướng đối tượng, hàm, logic và song
song
4Yêu cầu mơn học
 Lập trình bằng Pascal, C và C++, Java, C#
 Sinh viên phải dự lớp đầy đủ
 Tham gia những lần kiểm tra tại lớp
5ðánh giá mơn học
 Dự lớp: 10%
 Kiểm tra: 40%
 Thi hết mơn : 50%
 Question & discussion!!!
6Nội dung mơn học
 Giới thiệu ngơn ngữ lập trình
 Các kiểu dữ liệu
 Các cấu trúc điều khiển
 Chương trình con
 Ngơn ngữ lập trình hướng đối tượng
 Ngơn ngữ lập trình hàm
 Ngơn ngữ lập trình logic
 Ngơn ngữ lập trình song song
7Tài liệu tham khảo
 Giáo trình Ngơn ngữ lập trình, Nguyễn Văn Linh, 
2003, ðHCT
 Ngơn ngữ lập trình: các nguyên lý và mơ hình, 
Cao Hồng Trụ, ðH QG HCM, 2004
 Concept of Programming Languages, Robert W. 
Sebesta, Sixth Edition, 2004
8Chương 1: Giới thiệu
9Nội dung
 Giới thiệu
 Lịch sử phát triển của máy tính
 Lịch sử phát triển của NNLT
 Vai trị của NNLT
 Lợi ích của việc học NNLT
 Các tiêu chuẩn đánh giá NNLT
10
Giới thiệu
 Lập trình máy tính
 Lập trình máy tính là một cách nghĩ về các vấn đề
 Biên dịch thành những chỉ thị để máy tính thực thi
 Sản phẩm là các chương trình
 Chương trình
 Một tập hợp riêng biệt các hoạt động cĩ thứ tự cho một 
máy tính thực hiện
 Chương trình bao gồm một chuỗi các chỉ thị lần lượt 
mà máy tính phải tuân theo
11
Giới thiệu (tt)
 Lập trình
 Thao tác nhằm kiến tạo nên các chương trình máy tính 
thơng qua các ngơn ngữ lập trình
 Cịn gọi là quá trình mã hố thơng tin tự nhiên thành 
ngơn ngữ máy
 Quá trình này cịn được gọi là là "viết mã“
 Mã nguồn chương trình
 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
12
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
 NNLT cĩ từ vựng, cú pháp và ngữ nghĩa (trình
biên dịch)
 Ba loại NNLT:
 Ngơn ngữ máy (nhị phân)
 Hợp ngữ (NN cấp thấp)
 Ngơn ngữ cấp cao (Pascal, C, C++, Java,)
13
ðặc tính của ngơn ngữ máy
 Mã lệnh nhị phân để thực thi tác vụ
 Dịng điều khiển (control flow) dựa trên labels và
rẽ nhánh cĩ điều kiện (conditional branches)
 Tường minh về địa chỉ (location), e.g. registers, 
cho các biến và kết quả trung gian
 Tường minh về quản lý bộ nhớ (e.g stack)
14
ðặc tính của NNLT
 Diễn đạt ở mức phức tạp (tốn học, logic)
 Cĩ cấu trúc điều khiển (Loops, Selection, Cases)
 Sự kết hợp kiểu cơ bản (array, record, etc)
 Khai báo và kiểm tra kiểu
 Hỗ trợ nhiều cách lưu trữ (global/local/heap)
 Procedure/function
 Kiểu dữ liệu trù tượng, module, object, etc
15
Lịch sử phát triển của máy tính
Máy tính của Babbage
•Năm 1837
•ðặc điểm
Store (memory)
Mill (CPU)
Looping
Conditional
=> Khơng thành cơng
16
Lịch sử phát triển của máy tính (tt)
 ENIAC: plug and play circa 1945
17
Lịch sử phát triển của NNLT
 Sự phát triển của NNLT gắng liền với khoa học máy tính
 1920’s: computer ~ «person»
 1936: Church’s Lambda Calculus (= PL!)
 1937: Shannon’s digital circuit design
 1940’s: first digital computers
 1950’s: FORTRAN (= PL!)
 1958: LISP (LISt Processing language)
 1960’s: Unix
 1972: C Programming Language
 1981: TCP/IP
 1985: Microsoft Windows
18
Bạn biết được những NNLT nào?
 FORTRAN, COBOL, RPG, (Visual) BASIC, 
ALGOL-60, ALGOL-68, PL/I,
 C, C++, Java, C#, Pascal, Modula, Oberon, Lisp, 
Scheme, ML, Haskell,
 Ada, Prolog, Goedel, Curry, Snobol, ICON, 
 . . .
19
20
Tại sao cĩ rất nhiều NNLT
 Sự đa dạng về đặc điểm
 e.g. goto vs if-then, swich-case, while-do
 Quản lý bộ nhớ: programmer (C,C++) vs. language
(Java through garbage collection)
 Sự ưa thích của lập trình viên
 procedure vs. function
 Sự phát triển của phần cứng
 Mục tiêu đặc biệt của từng NNLT
21
Lãnh vực ứng dụng của NNLT
 Nghiên cứu khoa học: Fortran, C, Matlab
 Lập trình hệ thống: C, C++
 Tính tốn trong kinh doanh: Java, C#
 Trí tuệ nhân tạo: LISP
 Xử lý văn bản (Perl, Python)
 Mục đích đặc biệt cho NNLT (make, sh-shell)
22
Mơ hình của NNLT
 Lập trình mệnh lệnh (Imperative)
 Fortran, C, Pascal, etc
 Hàm
 Lisp, scheme
 Hướng đối tượng
 C++, Java, C#, etc
 Logic
 Prolog
 Nhu cầu đặc biệt
 Tex, Shell, make, HTML
23
Vai trị của NNLT 
 Các giai đoạn để xây dựng 1 phần mềm
 Xác định mục đích
 Phân tích
 Thiết kế
 Cài đặt (coding)
 Tích hợp và kiểm thử
 Vận hành và khai thác
24
Lợi ích của việc nghiên cứu NNLT
 Cho phép lựa chọn một NNLT phù hợp với dự án
thực tế
 Sử dụng một cách cĩ hiệu quả các cơng cụ của
ngơn ngữ lập trình
 Hiểu sâu sắc hơn ý nghĩa của các cài đặt bên 
trong NNLT
 Dễ dàng để học một ngơn ngữ lập trình mới
 Tăng vốn kinh nghiệm cho lập trình viên
 Thiết kế một NNLT mới (ngơn ngữ đơn giản)
25
Các tiêu chí đánh giá NNLT
 Dễ đọc: là sự dễ dàng đọc hiểu một chương trình
 Sự giản dị: ngơn ngữ cĩ ít thành phần cơ sở
 VD count = count + 1, count += 1, count++, ++count
 Cấu trúc điều khiển: sáng sủa, dễ dọc, dễ hiểu
 Kiểu và cấu trúc dữ liệu: gĩp phần đánh giá một ngơn 
ngữ cĩ dễ đọc hay khơng. VD TRUE, FALSE
 Cú pháp: ảnh hưởng đến tính dễ đọc hiểu, VD độ dài
tối đa của danh biểu, từ khĩa
26
Các tiêu chí đánh giá NNLT
 Ví dụ: So sánh hai đoạn chương trình in ra màn 
hình 10 số tự nhiên đầu tiên
Viết bằng BASIC
10 i=1;
20 IF i>10 THEN GOTO 60;
30 PRINT i ;
40 i=i+1;
50 GOTO 20;
60 PRINT “In xong”;
Vit bng C
...
for (i =1; i<=10; i++ )
printf (“%d”,i);
...
27
Các tiêu chí đánh giá NNLT (tt)
 Dễ viết: khả năng sử dụng ngơn ngữ để viết một 
chương trình cho một vấn đề nào đĩ một cách dễ 
dàng hay khơng 
 Tính diễn đạt cao: 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
 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: khả năng định nghĩa và sử dụng các 
cấu trúc hoặc các phép tốn phức tạp cho phép bỏ qua 
các chi tiết
28
Các tiêu chí đánh giá NNLT (tt)
 ðộ tin cậy: khả năng của ngơn ngữ hỗ trợ người 
lập trình tạo ra các chương trình đúng đắn
 Kiểm tra kiểu
 Xử lý ngoại lệ: phát hiện và sửa chữa lỗi 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
29
Các tiêu chí đánh giá NNLT (tt)
 Chi phí (time & money): một tiêu chuẩn để đánh 
giá ngơn ngữ, được hiểu là cả tiền bạc và thời 
gian
 Chi phí đào tạo chương trình viên: phụ thuộc vào sự 
giản dị của ngơn ngữ
 Chi chí lập trình: phụ thuộc vào tính dễ viết của ngơn 
ngữ
 Chi phí thực hiện chương trình
 Chi phí cài đặt chương trình
 Chi phí bảo trì chương trình
30
Phân loại ngơn ngữ lập trình
 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ữ
 ða dụng, nhúng, lập trình web, 
 Theo cách thức
 Mã máy, thơng dịch, lai
 Theo phương pháp
 Lập trình tuyến tính, lập trình cĩ cấu trúc, lập trình 
hướng đối tượng, lập trình trực quan, lập trình logic, 
31
Phân loại ngơn ngữ lập trình (tt)
 Phân loại NNLT theo tiến trình lịch sử phát triển
 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): HDL –High Description Language
32
Phân loại ngơn ngữ lập trình (tt)
 Phân loại theo mục tiêu của ngơn ngữ
 ða dụng: như C, perl, python, C++, Java, 
 Nhúng: Như Ch, Ada, 
 Lập trình web: PHP, Java Script, Cold Fusion, 
 Riêng: Như AutoLisp, Mathematica, 
33
Phân loại ngơn ngữ lập trình (tt)
 Phân loại theo cách thức
 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
34
Phân loại ngơn ngữ lập trình (tt)
 Phân loại theo phương pháp
 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
 Tồn bộ các câu lệnh chỉ đơn giản là đúng hoặc sai
 Ví dụ: ngơn ngữ Prolog
35
Phân loại ngơn ngữ lập trình (tt)
 Phân loại theo phương pháp (tt)
 Lập trình hàm:
 Tồn bộ các lệnh và mọi thứ đều được đưa về hàm.
 Cũng là ngơn ngữ khai báo (declarative)
 Ví dụ: ngơn ngữ LISP
 Lập trình trực quan:
 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
36
Một số NNLT thơng dụng
 FORTRAN (FORmula TRANslation)
 ðược thiết kế bởi John Backus năm 1957
 Ngơn ngữ cấp cao đầu tiên
 Thích hợp cho các ứng dụng trong khoa học và kỹ 
thuật
 Cấu trúc ngữ pháp khá đơn giản do việc nhập chương 
trình chủ yếu thơng qua các phiếu bấm lỗ
37
Một số NNLT thơng dụng (tt)
 LISP (LISt Processing)
 ðược thiết kế bởi John McCarthy năm 1959
 Xử lý trên các ký hiệu
 Ngơn ngữ lập trình hàm với việc sử dụng nhiều các 
phép gọi đệ qui
 Một trong những ngơn ngữ cơ bản cho ngành Trí tuệ 
Nhân tạo (Artificial Intelligence)
38
Một số NNLT thơng dụng (tt)
 COBOL (COmmon Business Oriented Language)
 ðược thiết kế bởi Grace Hopper & CODASYL năm 
1959
 Ngơn ngữ đầu tiên dùng cho các ứng dụng thương mại
 Cấu trúc ngữ pháp giống tiếng Anh giúp COBOL dễ 
đọc hiểu nhưng khá dài dịng
39
Một số NNLT thơng dụng (tt)
 ALGOL 60 (ALGOrithmic Language)
 Peter Naur & European Committee, 1960
 Ngơn ngữ đầu tiên sử dụng cấu trúc khối
 Sử dụng chủ yếu cho tốn và khoa học
 Là ngơn ngữ tính tốn khoa học chuẩn cho đến đầu 
những năm 1970
40
Một số NNLT thơng dụng (tt)
 Pascal
 Nicholas Wirth, 1970
 Ngơn ngữ chuẩn cho lập trình cấu trúc
 Là ngơn ngữ chính cho ngành khoa học máy tính trong 
thập niên 1970
 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
41
Một số NNLT thơng dụng (tt)
 C
 Dennis Ritchie, 1972
 ðến nay, ANSI ban hành chuẩn về C
 Là ngơn ngữ cấp trung vì nĩ cho phép thao tác trên các 
bit, byte, và địa chỉ
 Sử dụng cho các ứng dụng như hệ điều hành, phát triển 
ngơn ngữ máy tính khác hay xử lý văn bản
 Là ngơn ngữ cấp tương đối thấp để lập trình hiệu quả 
nhưng cĩ các ưu điểm của ngơn ngữ cấp cao
 Do vậy, C tỏ ra thích hợp với lập trình hệ thống
42
Một số NNLT thơng dụng (tt)
 PROLOG (PROgramming in LOGic)
 Alain Colmerauer & Philippe Roussel, 1972
 Ngơn ngữ mơ tả (declarative language) để đặc tả các 
vấn đề ở dạng
 Lập trình luận lý (logic programming): một chương 
trình bao gồm các sự kiện và qui luật
 ðược xem như nền tảng của việc phát triển phần mềm 
cho dự án máy tính thế hệ thứ năm của Nhật
43
Một số NNLT thơng dụng (tt)
 C++
 Bjarne Stroustrup, 1986
 Mở rộng ngơn ngữ C với lập trình hướng đối tượng 
(object-oriented) nhưng vẫn duy trì lập trình cấu trúc
 Nĩ mang đầy đủ các đặc tính của C
 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
 Dựa vào tính kế thừa và cĩ nhiều thư viện hỗ trợ mạnh 
được phát triển nên được sử dụng rộng rãi trong thập 
niên 1990
44
Một số NNLT thơng dụng (tt)
 Java
 Sun Microsystems, 1995, cú pháp giống C++
 Kế thừa nhưng tinh giản hơn các tính năng của C++
 JAVA là ngơn ngữ hướng đối tượng hồn tồn
 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ử
 ðơn giản: JAVA đã được lược bỏ các tính năng khĩ 
nhất của C++ như con trỏ, khơng hỗ trợ chồng tốn tử
 Cho phép xây dựng ứng dụng mạng, Web với độ an 
tồn cao
 ðộc lập với plateform

File đính kèm:

  • pdfbai_giang_nguyen_ly_ngon_ngu_lap_trinh_chuong_1_gioi_thieu_n.pdf