Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình

Hoạt động của chương trình máy tính

• Chương trình máy tính được nạp

vào bộ nhớ chính (primary

memory) như là một tập các lệnh

viết bằng ngôn ngữ mà máy tính

hiểu được, tức là một dãy tuần tự

các số nhị phân (binary digits).

• Tại bất cứ một thời điểm nào, máy

tính sẽ ở một trạng thái (state) nào

đó. Đặc điểm cơ bản của trạng

thái là con trỏ lệnh (instruction

pointer) trỏ tới lệnh tiếp theo để

thực hiện.

• Thứ tự thực hiện các nhóm lệnh

được gọi là luồng điều khiển (flow

of control).

7Hoạt động của chương trình máy tính

• Bắt đầu mỗi chu trình lệnh, CPU nhận lệnh từ bộ nhớ

chính.

▫ PC (Program Counter): thanh ghi giữ địa chỉ của lệnh sẽ

được nhận

▫ Lệnh được nạp vào thanh ghi lệnh IR (Instruction

Register)

• Sau khi lệnh được nhận vào, nội dung PC tự động

tăng để trỏ sang lệnh kế tiếp

gôn ngữ lập trình

• Ngôn ngữ lập trình là một hệ thống các ký hiệu dùng

để liên lạc, trao đổi với máy tính nhằm thực thi một

nhiệm vụ tính toán.

• Có rất nhiều ngôn ngữ lập trình (khoảng hơn 1000),

phần lớn là các ngôn ngữ hàn lâm, có mục đích riêng

hay phạm vi.

9Ngôn ngữ lập trình

Có 3 thành phần căn bản của bất cứ 1 NNLT nào:

• Mô thức lập trình là những nguyên tắc chung cơ bản,

dùng bởi LTV để xây dựng chương trình.

• Cú pháp của ngôn ngữ là cách để xác định cái gì là

hợp lệ trong cấu trúc các câu của ngôn ngữ; Nắm

được cú pháp là cách để đọc và tạo ra các câu trong

các ngôn ngữ tự nhiên, như tiếng Việt, tiếng Anh. Tuy

nhiên điều đó không có nghĩa là nó giúp chúng ta hiểu

hết ý nghĩa của câu văn.

• Ngữ nghĩa của 1 program trong ngôn ngữ ấy. Rõ ràng,

nếu không có semantics, 1 NNLT sẽ chỉ là 1 mớ các

câu văn vô nghĩa; như vậy semantics là 1 thành phần

không thể thiếu của 1 ngôn ngữ.

 

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình trang 1

Trang 1

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình trang 2

Trang 2

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình trang 3

Trang 3

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình trang 4

Trang 4

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình trang 5

Trang 5

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình trang 6

Trang 6

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình trang 7

Trang 7

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình trang 8

Trang 8

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình trang 9

Trang 9

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 46 trang duykhanh 4500
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình

Bài giảng Kỹ thuật lập trình - Chương 1: Tổng quan về kỹ thuật lập trình
 Chương 1: 
Tổng quan về kỹ thuật lập trình
Mục tiêu môn học?
• Học phần Kỹ thuật lập trình trang bị cho sinh viên
 những kỹ thuật cơ bản nhất mà một lập trình viên
 chuyên nghiệp cần phải nắm vững để viết mã nguồn
 hiệu quả. Các kiến thức giảng dạy góp phần quan
 trọng giúp sinh viên phát triển được các ứng dụng
 phần mềm chất lượng cao trong thực tế.
• Học phần này trang bị cho sinh viên các kỹ thuật lập
 trình quan trọng như quản lý bộ nhớ, hàm, kỹ thuật đệ
 quy, kỹ thuật sử dụng các cấu trúc dữ liệu để giải quyết
 vấn đề, kỹ thuật viết mã nguồn hiệu quả, kỹ thuật lập
 trình phòng ngừa, kỹ thuật gỡ rối, tinh chỉnh mã nguồn,
 phong cách lập trình. Học phần có các buổi thực hành
 nhằm rèn luyện và nâng cao kỹ năng lập trình của sinh
 viên.
 2
Tài liệu học tập
[1] Bài giảng trên lớp
[2] Trần Đan Thư (2014). Kỹ thuật lập trình. NXB Khoa
học và kỹ thuật
[3] Mcconnell, Steve (2004). Code Complete: A Practical
Handbook of Software Construction, 2d Ed. Redmond,
Wa.: Microsoft Press.
[4] Kernighan & Plauger (1978). The elements of
programming style. McGraw-Hill; 2nd edition
[5] Brian W. Kernighan and Rob Pike (1999). The
Practice of Programming. Addison-Wesley; 1st Edition
[6] Nicolai M. Josuttis. The C++ Standard Library: A
Tutorial and Reference (2nd Edition), 2012.
 3
 Đánh giá học phần
 Tỷ 
 Phương pháp đánh giá CĐR được 
 Điểm thành phần Mô tả trọn
 cụ thể đánh giá
 g
 [1] [2] [3] [4] [5]
A1. Điểm quá trình (*) Đánh giá quá trình 40%
 A1.1. Bài tập về nhà Tự luận M2.1 10%
 M2.2
 A1.2a. Bài tập nhóm Báo cáo M2.3 30%
 M1.4
 A1.2b. Thi giữa kỳ Tự luận và/ M2.1 30%
 hoặc trắc M2.2
 nghiệm
 M2.3
A2. Điểm cuối kỳ A2.1. Thi cuối kỳ Tự luận và/ M1.2 60%
 hoặc trắc M1.4
 nghiệm
 M2.2
 M2.3
 4
Tổng quan về lập trình
Hoạt động của chương trình máy tính và ngôn ngữ
lập trình
 5
Chương trình máy tính và ngôn ngữ lập trình
• Chương trình máy tính: Tập hợp các lệnh chỉ dẫn cho
 máy tính thực hiện nhiệm vụ
• Ngôn ngữ lập trình: Dùng để viết các lệnh, chỉ thị
 6
Hoạt động của chương trình máy tính
• Chương trình máy tính được nạp
 vào bộ nhớ chính (primary
 memory) như là một tập các lệnh
 viết bằng ngôn ngữ mà máy tính
 hiểu được, tức là một dãy tuần tự
 các số nhị phân (binary digits).
• Tại bất cứ một thời điểm nào, máy
 tính sẽ ở một trạng thái (state) nào
 đó. Đặc điểm cơ bản của trạng
 thái là con trỏ lệnh (instruction
 pointer) trỏ tới lệnh tiếp theo để
 thực hiện.
• Thứ tự thực hiện các nhóm lệnh
 được gọi là luồng điều khiển (flow
 of control).
 7
Hoạt động của chương trình máy tính
• Bắt đầu mỗi chu trình lệnh, CPU nhận lệnh từ bộ nhớ 
 chính. 
 ▫ PC (Program Counter): thanh ghi giữ địa chỉ của lệnh sẽ 
 được nhận
 ▫ Lệnh được nạp vào thanh ghi lệnh IR (Instruction 
 Register)
• Sau khi lệnh được nhận vào, nội dung PC tự động 
 tăng để trỏ sang lệnh kế tiếp
 8
Ngôn ngữ lập trình
• Ngôn ngữ lập trình là một hệ thống các ký hiệu dùng 
 để liên lạc, trao đổi với máy tính nhằm thực thi một 
 nhiệm vụ tính toán. 
• Có rất nhiều ngôn ngữ lập trình (khoảng hơn 1000), 
 phần lớn là các ngôn ngữ hàn lâm, có mục đích riêng 
 hay phạm vi.
 9
Ngôn ngữ lập trình
Có 3 thành phần căn bản của bất cứ 1 NNLT nào:
• Mô thức lập trình là những nguyên tắc chung cơ bản,
 dùng bởi LTV để xây dựng chương trình.
• Cú pháp của ngôn ngữ là cách để xác định cái gì là
 hợp lệ trong cấu trúc các câu của ngôn ngữ; Nắm
 được cú pháp là cách để đọc và tạo ra các câu trong
 các ngôn ngữ tự nhiên, như tiếng Việt, tiếng Anh. Tuy
 nhiên điều đó không có nghĩa là nó giúp chúng ta hiểu
 hết ý nghĩa của câu văn.
• Ngữ nghĩa của 1 program trong ngôn ngữ ấy. Rõ ràng,
 nếu không có semantics, 1 NNLT sẽ chỉ là 1 mớ các
 câu văn vô nghĩa; như vậy semantics là 1 thành phần
 không thể thiếu của 1 ngôn ngữ.
 10
Mã máy – Machine code
Máy tính chỉ nhận các tín hiệu điện tử - có, không có -
tương ứng với các dòng bits.
Một chương trình ở dạng đó gọi là mã máy (machine
code).
 11
Hợp ngữ - Assembly
Là bước đầu tiên của việc xây dựng cơ chế viết chương
trình tiện lợi hơn thông qua các ký hiệu, từ khóa và cả
mã máy.
Tất nhiên, để chạy được các chương trình này thì phải
chuyển thành machine code.
 12
Ngôn ngữ lập trình bậc cao
• Thay vì dựa trên phần cứng (machine-oriented) cần
 tìm cơ chế dựa trên vấn đề (problem-oriented) để tạo
 chương trình
• Gần gũi với ngôn ngữ tự nhiên hơn, thường sử dụng
 các từ khóa giống tiếng Anh
 13
Trình dịch - compiler
• Chương trình thực hiện 
 biên dịch toàn bộ 
 chương trình nguồn 
 thành mã máy trước khi 
 thực hiện
 14
Thông dịch - interpreter
• Chương trình dịch và 
 thực hiện từng dòng lệnh 
 của chương trình cùng 
 lúc
• Dịch từ ngôn ngữ này 
 sang ngôn ngữ khác, 
 không tạo ra chương 
 trình dạng mã máy hay
 assembly
 15
Các mô thức lập trình
Programming paradigm
 16
Ngôn ngữ lập trình bậc cao
• Imperative paradigm
• Functional paradigm
• Logical paradigm
• Object-oriented paradigm
• Visual paradigm
• Parallel paradigm
• Concurrent paradigm
• Distributed paradigm
• Service-oriented paradigm
 17
Imperative paradigm – hướng mệnh lệnh
 first do this and next do that
Thành phần:
• Declarative statements, các lệnh khai báo: cung cấp
 các tên cho biến. Các biến này có thể thay đổi giá trị
 trong quá trình thực hiện Chương trình.
• Assigment statements, lệnh gán: gán giá trị mới cho
 biến
• Program flow control statements, các lệnh điều
 khiển cấu trúc chương trình: Xác định trình tự thực
 hiện các lệnh trong chương trình.
• Module: chia chương trình thành các chương trình
 con: Functions & Procedures
 18
Functional paradigm – hướng chức năng
Thành phần
• Tập hợp các cấu trúc dữ liệu và các hàm liên quan
• Tập hợp các hàm cơ sở
• Tập hợp các toán tử 
Đặc trưng cơ bản: module hóa chương trình
• Chức năng là biểu diễn của một biểu thức
• Giải thuật thực hiện theo từng bước
• Giá trị trả về là không thể biến đổi
• Không thể thay đổi CTDL của giá trị nhưng có thể sao 
 chép các thành phần tạo nên giá trị đó
• Tính toán bằng cách gọi các chức năng
 19
Logic paradigm – hướng logic
 answer a question via searching for a solution
• Ý tưởng: Tự động kiểm chứng trong trí tuệ nhân tạo
• Dựa trên các tiên đề - axioms, các quy luật suy diễn -
 inference rules, và các truy vấn - queries
• Chương trình thực hiện từ việc tìm kiếm có hệ thống 
 trong 1 tập các sự kiện, sử dụng 1 tập các luật để đưa 
 ra kết luận
 20
Object-oriented paradigm – hướng đối tượng
 send messages between objects to simulate a 
 temporal evolution of a set of real world phenomena
• Ý tưởng: Các khái niệm và mô hình tương tác trong 
 thế giới thực
• Dữ liệu cũng như các thao tác trên dữ liệu được bao 
 gói trong các đối tượng
• Cơ chế che giấu thông tin nội bộ được sử dụng để 
 tránh những tác động từ bên ngoài
 21
Object-oriented paradigm – hướng đối tượng
• Các đối tượng tương tác với nhau qua việc truyền
 thông điệp, đó là phép ẩn dụ cho việc thực hiện các
 thao tác trên 1 đối tượng
• Trong phần lớn các NNLT HĐT, đối tượng phân loại
 thành các lớp
 ▫ Đối tượng trong các lớp có chung các thuộc tính, cho
 phép lập trình trên lớp, thay vì lập trình trên từng đối
 tượng riêng lẻ
 ▫ Lớp đại diện cho các khái niệm còn đối tượng đại diện
 cho thể hiện
 ▫ Lớp có tính kế thừa, cho phép mở rộng hay chuyên biệt
 hóa
 22
Giới thiệu về ngôn ngữ C++
 23
Lịch sử ngôn ngữ C
• Ra đời trong những năm 1970, gắn liền với sự phát 
 triển của HĐH Unix. Tác giả: Dennis Ritchie
• Mục tiêu:
 • Đề cao tính hiệu quả
 • Có khả năng truy xuất phần cứng ở cấp thấp
 • Ngôn ngữ có cấu trúc (thay cho lập trình bằng hợp ngữ)
• C là ngôn ngữ trung gian giữa cấp thấp
 • Có khả năng truy xuất bộ nhớ trực tiếp
 • Cú pháp ngắn gọn, ít từ khoá
•  và cấp cao
 • Không phụ thuộc phần cứng
 • Cấu trúc, hàm, khả năng đóng gói
 • Kiểm tra kiểu dữ liệu
 24
Lịch sử ngôn ngữ C++
• Ra đời năm 1979 bằng việc mở rộng ngôn ngữ C. Tác 
 giả: Bjarne Stroustrup
• Mục tiêu:
 • Thêm các tính năng mới
 • Khắc phục một số nhược điểm của C
• Bổ sung những tính năng mới so với C:
 • Lập trình hướng đối tượng (OOP)
 • Lập trình tổng quát (template)
 • Nhiều tính năng nhỏ giúp lập trình linh hoạt hơn nữa 
 (thêm kiểu bool, khai báo biến bất kỳ ở đâu, kiểu mạnh, 
 định nghĩa chồng hàm, namespace, xử lý ngoại lệ,)
 25
Biên dịch chương trình C/C++
• Là quá trình chuyển đổi từ mã nguồn (do người viết) 
 thành chương trình ở dạng mã máy để có thể thực thi 
 được
 Mã nguồn Mã biên dịch
 Trình biên dịch
 file1.c file1.obj
 Mã nguồn Mã biên dịch
 Trình biên dịch
 file2.c file2.obj
 Thư viện Trình liên kết
 Chương trình chạy
 a.exe
 26
Biên dịch chương trình C/C++
• Cho phép dịch từng file riêng rẽ giúp:
 • Dễ phân chia và quản lý từng phần của chương trình
 • Khi cần thay đổi, chỉ cần sửa đổi file liên quan
 → giảm thời gian bảo trì, sửa đổi
 • Chỉ cần dịch lại những file có thay đổi khi cần thiết
 → giảm thời gian dịch
• Các trình biên dịch hiện đại còn cho phép tối ưu hoá 
 dữ liệu và mã lệnh
• Một số trình biên dịch thông dụng: MS Visual C++, gcc, 
 Intel C++ Compiler, Watcom C/C++,
 27
Vào ra trong C++
 28
 Header file cho I/O trong C++
 Header File Miêu tả
 File này định nghĩa các đối tượng cin, cout, 
 cerr và clog, tương ứng với Standard Input Stream 
 (Luồng đầu vào chuẩn), Standard Output Stream 
 (Luồng đầu ra chuẩn), Un-buffered Standard Error 
 Stream (Luồng lỗi chuẩn không được đệm) và Buffered 
 Standard Error Stream (Luồng lỗi chuẩn được đệm).
 File này khai báo các dịch vụ hữu ích để thực hiện hoạt 
 động I/O được định dạng với các bộ thao tác luồng 
 được tham số hóa như setw và setprecision.
 File này khai báo các dịch vụ xử lý file được kiểm soát
 bởi người dùng. Chúng ta sẽ thảo luận chi tiết về nó
 trong chương File và Stream trong C++
 29
Standard Output Stream (cout) trong C++
• Đối tượng tiền định nghĩa cout là một minh họa của lớp 
 ostream. Đối tượng cout được xem như "được kết nối tới" 
 thiết bị đầu ra chuẩn, thường là màn hình. Đối tượng cout 
 được sử dụng kết hợp với toán tử chèn luồng (insertion 
 operator), được viết là <<, như ví dụ dưới đây:
 #include 
 using namespace std;
 int main( ) {
 char str[] = "Xin chao C++"; 
 cout << "Gia tri cua str la: " << str << endl;
 }
• Toán tử chèn luồng << có thể được sử dụng nhiều hơn một
 lần trong một lệnh và endl được sử dụng để them một dòng
 mới tại cuối dòng đó.
 30
Standard Input Stream (cin) trong C++
• Đối tượng tiền định nghĩa cin là một minh họa của lớp 
 isrtream. Đối tượng cin được xem như đính kèm với thiết bị 
 đầu vào chuẩn, mà thường là bàn phím. Đối tượng cin 
 được sử dụng kết hợp với toán tử trích luồng (extraction 
 operator), viết là >>, như trong ví dụ sau:
 #include 
 using namespace std;
 int main( ) {
 char ten[50]; 
 cout << "Nhap ten cua ban (viet lien): "; 
 cin >> ten; 
 cout << "Ten ban la: " << ten << endl;
 }
 31
Standard Input Stream (cin) trong C++
• Bộ biên dịch C++ cũng quyết định kiểu dữ liệu của giá 
 trị đã nhập và chọn toán tử trích luồng thích hợp để 
 trích giá trị và lưu giữ nó trong các biến đã cung cấp.
• Toán tử trích luồng >> có thể được sử dụng nhiều hơn 
 một lần trong một lệnh. Để yêu cầu nhiều hơn một dữ 
 liệu chuẩn, bạn có thể sử dụng:
 cin >> ten >> tuoi;
Nó tương đương với hai lệnh sau:
 cin >> ten; cin >> tuoi;
 32
IDE lập trình
• Codeblock: 
• Link download: https://www.fosshub.com/Code-
 Blocks.html?dwl=codeblocks-17.12mingw-setup.exe
 33
Chu trình phát triển phần mềm
 34
 Chu trình phát triển phần mềm
 • Program development cycle?
➢ Là các bước mà lập trình viên dùng để xây dựng
 programs
 35
 Step 1 — Analyze Requirements
 • Các việc cần làm khi phân tích yêu cầu?
1. Thiết lập các requirements
2. Gặp các nhà phân tích hệ thống và users
3. Xác định input, output, processing, và các thành phần 
 dữ liệu
 ▪ IPO chart—Xác
 định đầu vào, đầu
 ra và các bước xử
 lý
 36
Step 2 — Design Solution
• Những việc cần làm trong bước thiết kế giải pháp?
 Object-oriented 
 Hai hướng design
 tiếp cận
 Phân chia Structured 
 hệ thống từng design, còn gọi là 
 bước thành top-down design
 các thủ tục để 
 giải quyết vấn 
 đề LTV bắt đầu với
 thiết kế Tổng thể 
 rồi đi đến 
 thiết kế chi tiết
 37
 Step 2 — Design Solution
 • Sơ đồ phân cấp chức năng- hierarchy chart?
➢ Trực quan hóa các modules chương trình
➢ Còn gọi là sơ đồ cấu trúc
 38
 Step 2 — Design Solution
 • Object-oriented (OO) design là gì?
➢ LTV đóng gói dữ liệu và các thủ tục
 xử lý dữ liệu trong 1 object
 ▪ Các objects được nhóm lại thành các
 classes
 ▪ Biểu đồ lớp thể hiện trực quan các
 quan hệ phân cấp quan hệ của các
 classes 
 39
Step 2 — Design Solution
• Cấu trúc rẽ nhánh
 ➢ Chỉ ra action tương 
 ứng điều kiện
 ➢ 2 kiểu
 ▪ Case control structure
 ▪ If-then-else control 
 structure—dựa theo 2 
 khả năng: true or false
 40
 Step 2 — Design Solution
 • Case control structure
➢ Dựa theo 3 hoặc nhiều hơn các khả năng
 41
 Step 2 — Design Solution
 • Cấu trúc lặp
➢ Cho phép CT thực hiện 1 hay nhiều actions lặp đi lặp 
 lại
 ▪ Do-while control 
 structure—lặp khi
 điều kiện còn đúng
 ▪ Do-until control 
 structure—Lặp cho
 đến khi điều kiện đúng
 Do-While Control Structure Do-Until Control Structure
 42
Step 3 — Validate Design
• Những điều cần làm trong giai đoạn này?
 Kiểm tra 
 LTV kiểm tra 
 độ chính xác 
 logic cho tính đúng đắn 
 của program và thử tìm các lỗi logic 
 Logic error
 các sai sót khi thiết kế 
 Desk check gây ra những kết quả
 LTV dùng các dữ liệu không chính xác
 thử nghiệm để kiểm tra ct
 Structured walkthrough
 LTV mô tả logic 
 Test data của thuật toán trong khi 
 các dữ liệu thử nghiệm programming team duyệt theo 
 giống như số liệu thực mà logic chương trình
 CT sẽ thực hiện
 43
 Step 4 — Implement Design
 • implementation?
➢ Viết code : dịch từ thiết kế thành program
 ▪ Syntax—Quy tắc xác định cách viết các lệnh
 ▪ Comments—program documentation
➢ Extreme programming (XP)—coding và testing ngay sau khi các
 yêu cầu được xác định
 44
Step 5 — Test Solution
• Những việc cần làm ?
Đảm bảo CT chạy thông và cho Debugging—Tìm và sửa các lỗi 
 kq chính xác syntax và logic errors
 Kiểm tra phiên bản 
 beta, giao cho Users 
 dùng thử và thu thập 
 phản hồi
 45
 Step 6 — Document Solution
 • Là bước không kém quan trọng
➢ 2 hoạt động
 Rà soát lại program code—loại 
 bỏ các dead code, tức các lệnh 
 mà ct không bao giờ gọi đến
 Rà soát, hoàn thiện
 documentation
 46

File đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_chuong_1_tong_quan_ve_ky_thuat.pdf