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...
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:
- bai_giang_nguyen_ly_ngon_ngu_lap_trinh_chuong_1_gioi_thieu_n.pdf