0% found this document useful (0 votes)
233 views78 pages

KT Lap Trinh 01-2022

Tài liệu nói về kỹ thuật lập trình bao gồm các nội dung chính sau: Giới thiệu về học phần kỹ thuật lập trình, khái niệm lập trình, các mẫu hình lập trình chính, và chu trình phát triển phần mềm.

Uploaded by

Quân Mạc Minh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
233 views78 pages

KT Lap Trinh 01-2022

Tài liệu nói về kỹ thuật lập trình bao gồm các nội dung chính sau: Giới thiệu về học phần kỹ thuật lập trình, khái niệm lập trình, các mẫu hình lập trình chính, và chu trình phát triển phần mềm.

Uploaded by

Quân Mạc Minh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

KỸ THUẬT LẬP TRÌNH

Bài 1. Tổng quan


Nội dung

 Về học phần
 Kỹ thuật lập trình và khái niệm liên quan
 Các mẫu hình/nguyên lý (paradigm) lập trình
 Chu trình phát triển phần mềm
Về học phần
Thông tin học phần

 MI3310
 Tên: Kỹ thuật lập trình - Programming Techniques
 Khối lượng: 2 tín chỉ 2-0-1-4

 Học phần liên quan


• HP tiên quyết
• HP học trước: Tin học đại cương
• HP song hành
 Mô tả
• Cung cấp kiến thức kỹ năng viết chương trình máy tính
• Trình bày được các nguyên lý lập trình
• Sử dụng được kỹ thuật tổ chức chương trình, giải thuật và cấu trúc dữ
liệu, kỹ thuật vào ra
 Kết quả mong muốn
• M1: Hiểu các nguyên lý, phương pháp và kỹ thuật lập trình máy tính
• M2: Kỹ năng cài đặt/hiện thực chương trình với ngôn ngữ lập trình (như
C/C++/C#), kỹ năng sử dụng các cấu trúc dữ liệu, lệnh
• M3: Khả năng phát triển tư duy và kỹ thuật lập trình với nhiều ngôn ngữ
khác, khả năng giải quyết các vấn đề thực tế
 Tài liệu tham khảo
• Phạm Văn Ất (2015), Kỹ thuật lập trình C cơ bản và nâng cao, NXB Giao thông
vận tải.
• Lê Hoài Bắc, Nguyễn Thanh Nghị (2005), Kỹ năng lập trình, NXB Khoa học và
Kỹ thuật.
• Đỗ Xuân Lôi, Cấu trúc dữ liệu và giải thuật, NXB Đại học Quốc gia Hà Nội
• Bjarne Stroustrup (2014). Programming: Principles and Practice Using C++
(2nd Edition). Addison-Wesley Professional
• Stephen R. Davis , C# For Dummies
 Đánh giá
• Điểm quá trình
• Điểm cuối kỳ

• Điểm thưởng/phạt:
• Dự lớp theo quy chế
• Mức độ hoàn thành bài tập
• Phát biểu/Thảo luận/Bài trên lớp
 Trong khóa học
• Ngôn ngữ thể hiện: C#
• Công cụ lập trình: VS
1. Kỹ thuật lập trình và khái niệm liên
quan
Kỹ thuật lập trình

 Kỹ thuật lập trình là kỹ thuật thực thi một giải pháp phần mềm
(cấu trúc dữ liệu + giải thuật) dựa trên nền tảng một phương
pháp luận (methodology) và một hoặc nhiều ngôn ngữ lập trình
phù hợp với yêu cầu đặc thù của ứng dụng
Kỹ thuật lập trình

 Kỹ thuật lập trình:


• Tư tưởng thiết kế + Kỹ thuật mã hóa
• Cấu trúc dữ liệu + Giải thuật + Ngôn ngữ lập trình

 Kỹ thuật lập trình ≠ Phương pháp Phân tích & thiết kế(A&D)
Thế nào là lập trình

 viết Chương trình in 100  viết Chương trình in n số


số nguyên tố đầu tiên nguyên tố đầu tiên
 viết Chương trình tính  viết Chương trình tính giai
100! thừa
Khái niệm lập trình

 Với mỗi bài toán, làm thế nào để:


• Thiết kế giải thuật nhằm giải quyết bài toán đó
• Cài đặt giải thuật bằng một chương trình máy tính
Lập trình tốt

Đúng
(chinh Ổn định
xác)

Khả
Tái sử
năng
dụng
nâng cấp
Lập trình tốt

Tương Hiệu
thích quả

Hiệu
suất
Làm thế nào để lập trình tốt !

 Phát biểu bài toán/vấn đề


 Tư duy và phương pháp lập trình
 Hiểu sâu về máy tính
 Nắm vững ngôn ngữ, nền tảng
 Rèn luyện kỹ năng
2. Tổng quan về lập trình
Máy tính

 Các thành phần của máy tính


Chương trình máy tính

 Chương trình máy tính (computer program):


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 (programming language):
Dùng để viết các lệnh, chỉ thị
Hoạt động của chương trình máy tính

Chu trình thực thi chương trình


 Chương trình đc nạp vào bộ nhớ chinh
tập các lệnh được nạp vào bộ nhớ
 Các lệnh được thực thi
con trỏ lệnh IP
 Luồng điều khiển - thứ tự thực hiện các
nhóm lệnh
Hoạt động của chương trình máy tính

Mức thấp: Chu trình thực thi lệnh


 BXL nhận lệnh từ bộ nhớ chính
• PC (Programm Counter) thanh ghi lưu địa chỉ lệnh
• Lệnh được nạp vào thanh ghi lệnh IR (Instruction Register)
• Giá trị PC tăng lên => trỏ tới lệnh tiếp theo
 Thực thi lệnh
Chương trình máy tính được tạo ra thế nào ?

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


 Chương trình dịch
 Công cụ lập trình
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ác ngôn ngữ lập trình:
Ngôn ngữ lập trình

 Các thành phần của một ngôn ngữ lập trình


• Cú pháp (syntax): mã lệnh hợp lệ
• Ngữ nghĩa (semantic): luật xác định ý nghĩa các lệnh, để ghép các ký hiệu
thành lệnh, lệnh thành chương trình
Các thế hệ ngôn ngữ lập trình

 Ngôn ngữ máy


 Hợp ngữ - Assembly
 Ngôn ngữ bậc cao
Ngôn ngữ máy - mã máy

 Máy tính điện tử: nhận các tín hiệu điện tử 0/1 - nhị phân - bit
 Chương trình ở dạng nhị phân như trên - mã máy (machine
code)

 Vấn đề ?
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 gợi
nhớ, từ khóa và cả mã máy
 Để thực thi => cần chuyển
thành mã máy
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ế hướng 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
Sự phát triển của ngôn ngữ lập trình

 1940s: Ngôn ngữ máy  1980s: tái sử dụng, giảm sự


• machincode phức tạp
 1950s: khai thác sức • object oriented, functional
• Assembly programming
 1960s: Tăng khả năng tính  1990s: khai thác tài nguyên
toán • parallel
• Cobol, Lisp  2000s: mô hình tính toán mới
 1970s: tăng tính đúng đắn của • bio-computing, service-based
chương trình, giảm phụ thuộc
vào máy
• structures programming: pascal,
algol,C
Phân loại ngôn ngữ theo mức độ trừu tượng

 Bậc thấp
• phụ thuộc phần cứng
• chỉ chạy trên 1 loại máy tính
 Bậc cao
• độc lập phần cứng
• gần với ngôn ngữ tự nhiên
Từ lập trình đến thực thi

 Lập trình
 Mã nguồn
 Biên dịch/Thông dịch
 Thực thi
Biên dịch
compiler
 Chương trình thực hiện biên
dịch chương trình nguồn
thành mã máy trước khi thực
hiện
Thông dịch

 Chương trình thực hiện 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
3. Các nguyên lý/hình mẫu lập trình
programming paradigm
Nguyên lý lập trình
programming paradigm
Nhiều tiếp cận, nguyên lý lập trình:
 Imperative: lập trình mệnh lệnh
 Declarative: lập trình tường thuật
 Functional: lập trình hàm
 Object-Oriented: hướng đối tượng
 Visual: lập trình trực quan
 Event: hướng sự kiện
Lập trình mệnh lệnh - imperative

 Người lập trình viết các chỉ thị/mệnh lệnh - máy tính thực hiện
các chỉ thị
 Thường sử dụng các từ tiếng anh biểu diễn các chỉ thị - ngôn
ngữ lập trình bậc cao 3GL
 VD các ngôn ngữ Basic, Pascal, C, C++, C#, Java,
Lập trình mệnh lệnh - imperative (*)

 Các thành phần của ngôn ngữ lập trình mệnh lệnh:
• Các lệnh khai báo biến - declarative statement
• Các lệnh gán - assignment statement
• Các lệnh điều khiển - flow control statement
• Các thủ tục - procedure
Lập trình hướng chức năng, lập trình hàm

 Dựa trên lý thuyết hàm


 Ngôn ngữ mô tả các cấu trúc dữ liệu và các hàm định nghĩa trên
các kiểu dữ liệu đó
Lập trình hướng chức năng, lập trình hàm

 Các thành phần


• Tập hợp các cấu trúc dữ liệu
• Các hàm trên các cấu trúc
• Các hàm cơ sở
• Các toán tử
Lập trình hướng đối tượng

 Ý tưởng: mô hình các thực thể và tương tác trong thế giới thức
 Trung tâm là đối tượng
• Dữ liệu và thao tác trên dữ liệu được bao gói (encapsulation) trong đối
tượng
• Che dấu thông tin nội bộ (private) tránh tác động không mong muốn từ
bên ngoài
Lập trình hướng đối tượng

 Các đối tượng tương tác với nhau => thực hiện các chức năng
chương trình
 Lớp đối tượng: bản mô tả các đối tượng cùng kiểu
• đối tượng: thể hiện instance
• Lập trình: trên các lớp đối tượng
• Kế thừa - tái sử dụng
Lập trình hướng đối tượng

 Một số ngôn ngữ lập trình hướng đối tượng


• C++
• Java
Lập trình trực quan và phát triển ứng dụng
nhanh RAD
Declarative Lập trình tường thuật

 Là hình mẫu lập trình trong đó mô tả logic tính toán mà không


mô tả luồng điều khiển - không đưa ra các lệnh/chỉ thị cụ thể
cho máy tính
 VD: ngôn ngữ truy vấn dữ liệu, lập trình hàm, biểu thức chính
quy, ...
4. Chu trình phát triển phần mềm

 Các giai đoạn/bước xây


dựng phần mềm, lập
trình
 SDLC: software
development life cycle
 Có nhiều quy trình phát
triển phần mềm khác
nhau
B1: Phân tích yêu cầu

 Phân tích
• Tìm hiểu hệ thống hiện hành
• Phỏng vấn người dung

• Mục tiêu: hệ thống hiện tại có chức năng gì, các vấn đề tồn tại
B1: Phân tích yêu cầu

 Các tác vụ
• Tìm hiểu nghiệp vụ, phỏng vấn người dung
• Thiết lập các yêu cầu
• Xác định input, output, xử lý processing, các dữ liệu

• Chú ý: có nhiều phương pháp, kỹ thuật phân tích, vd UML use case, ...
B2: Thiết kế

 Thiết kế Sơ đồ phân cấp chức năng (hierarchy chart)


Còn gọi là sơ đồ cấu trúc
 Trực quan hóa các module chương trình
B2: Thiết kế

 Thiết kế hướng đối tượng


 Xác định các đối tượng, quan hệ giữa các
đối tượng
B2: Thiết kế

 Giải thuật
 Các cấu trúc cơ bản
• Tuần tự: lệnh gán, vào ra
• Chọn/Rẽ nhánh
• Lặp
B2: Thiết kế

 Mô tả giải thuật:
• biểu đồ-trực quan
• văn bản, ..
Gate: Đánh giá thiết kế (validate)
B3: Cài đặt lập trình

 Viết mã nguồn chương trình (coding): chuyển từ thiết kế thành


chương trình
• Cú pháp (Syntax): Quy tắc xác định cách viết các lệnh
• Chú thích (Comments): tài liệu chương trình (tài liệu trong)
B4: Kiểm thử - Test

 Mục đích:
Tài liệu
5. Các nguyên lý lập trình cấu trúc
Nguyên lý lập trình cấu trúc

 Các nền tảng tư tưởng lập trình


 Các nguyên lý cơ bản:
• Nguyên lý lệnh có cấu trúc
• Nguyên lý tối thiểu
• Nguyên lý địa phương
• Nguyên lý an toàn
• Nguyên lý nhất quán
• Nguyên lý top-down
• Nguyên lý bottom-up
 Lệnh có cấu trúc
• các lệnh và cấu trúc điều khiển
• cấu trúc tuần tự
• cấu trúc lặp
• cấu trúc rẽ nhánh
 Nguyên lý tối thiểu
• Bắt đầu từ các nguyên tắc và công cụ tối thiểu
• Một số công cụ tối thiếu
• tập phép toán: số học, logic, so sánh
• tập lệnh vào ra cơ bản
• thao tác trên dữ liệu có cấu trúc: string, struct/record, file, ...
 Nguyên lý địa phương
• Các biến địa phương trùng tên biến toàn cục => trong thủ tục - biến địa
phương
• Tham số truyền theo giá trị => là biến địa phương
• Trong thủ tục cần biến tạm thao tác => dùng biến địa phương thay vì biến
toàn cục
 Nguyên lý nhất quán
• dữ liệu nào => thao tác tương ứng
 nguyên lý an toàn
• Lỗi nặng nhất nằm ở mức cao nhất/bước sớm nhất (vd thiết kế)
• Lỗi nặng nhất nằm ở code chịu tải (được thực thi) nhiều nhất
• Phát hiện lỗi - cần phải phát hiện ở bước nào đó, phát hiện sớm nhất -
trước khi lỗi làm ảnh hưởng
 phương pháp top-down
• Phân tích từ trên xuống, từ tổng quát tới chi tiết, từ trừu tượng tới cụ thể
• thường áp dụng khi thiết kế
 phương pháp bottom-up
• Đi từ cụ thể tới tổng quát
• thường áp dụng khi cài đặt hệ thống
Kỹ thuật lập trình
6. Hình mẫu/mô thức lập trình hướng
đối tượng - Tổng quan
1. Lập trình cấu trúc và hướng đối tượng

 Lập trình cấu trúc


• Chương trình tạo nên từ các thành phần thủ tục/hàm/chương trình con
• Dữ liệu và cách xử lý (các thủ tục) tách rời
• Các chương trình con:
• Độc lập
• Trao đổi qua tham số, các biến toàn cục
• Ưu điểm: Chương trình có cấu trúc rõ ràng, dễ theo dõi, dễ sửa lỗi và có
thể làm việc theo nhóm
• Nhược điểm: Các hàm cần trao đổi dữ liệu với nhau và có thể phải sử
dụng biến toàn cục  Có thể xảy ra hiệu ứng phụ (side effect)
1. Về lập trình hướng đối tượng

 Phát triển ngôn ngữ lập trình: trừu tượng hóa


• Để lập trình: cần cơ chế mô tả đối tượng thế giới thực
VD:
• Assembly: trừu tượng hóa chỉ thị cơ bản (ADD ...)
• Ngôn ngữ cấu trúc: trừu tượng hóa điều khiển và chức năng

 Lập trình hướng đối tượng:


• Mô hình hóa dựa trên thế giới thực
vd sinh viên, giảng viên, lớp
• Đối tượng là trung tâm
1. Về lập trình hướng đối tượng

 Lập trình hướng đối tượng


• Bài toán được chia thành các thực thể - lớp đối tượng
• Thực thi chương trình: các đối tượng tương tác với nhau (qua truyền
thông điệp - message passing)
2. Khái niệm cơ bản

 Đối tượng
Đối tượng

 Đối tượng
• Mỗi đối tượng có
• các thông tin, dữ liệu, trạng thái
• oto: màu sắc, tốc độ, mác
• các hành động
• tang ga, phanh, rẽ trái
Đối tượng

 Đối tượng
Mô hình hóa vào trong lập trình:
• Đóng gói thành trạng thái (state) và hành vi (behavior).
• Trạng thái được biểu diễn bởi các thuộc tính (attributes) và các mối quan
hệ (relationships).
• Hành vi được biểu diễn bởi các thao tác (operations) hay phương thức
(methods)
2. Khái niệm cơ bản

 Lớp đối tượng - class


• Là mô tả các đối tượng cùng kiểu (vd các sinh viên) - mô hình hóa thực
thể trong thế giới thực
• Lớp đối tượng: chỉ là bản mô tả
• Lớp đối tượng - mô tả về đối tượng gồm
• Các thuộc tính, tính chất đặc trưng của lớp (attribute, properties)
• Các hành vi có thể thực hiện - phương thức (method)
Ngoài ra: operator, ...

 Lớp >< Đối tượng


• Đối tượng là một thể hiện cụ thế của lớp - instance; vd sinh viên A
• Thực thi chương trình: các đối tượng được tạo, sử dụng, hủy bỏ
2. Khái niệm cơ bản

 Tính đóng gói - public class PdfVerifier


{
//danh sách các cert của các CA tin cậy
encapsulation private List<[Link].X509.X509Certificate>
_storeTrustedCA = null;
• Dữ liệu (thuộc tính) và //danh sách CRL để kiểm tra thu hồi
private List<[Link].X509.X509Crl> _CRLs =
thao tác (phương null;
thức) được đóng gói public void
vào lớp đối tượng SetTrustedCAs(List<[Link].X509.X509Certificate>
trustedCA)
• Nhờ đó: bảo vệ dữ liệu {
if(_storeTrustedCA != null)
khỏi truy cập, xử lý trái _storeTrustedCA.Clear();
_storeTrustedCA = new
phép từ bên ngoài List<X509Certificate>(trustedCA);
}
}
2. Khái niệm cơ bản

 Tính kế thừa - inheritance


• Lớp đối tượng cha
• Lớp đối tượng con:
• thừa kế lớp cha (các thuộc tính, các phương thức)
• có thể thay đổi, bổ sung
2. Khái niệm cơ bản

 Tính đa hình - polymorphism


• Các đối tượng khác nhau có phương thức cùng tên nhưng thực hiện khác
nhau
 Ngôn ngữ lập trình hướng đối tượng
• Có hỗ trợ mô thức/hình mẫu lập trình hướng đối tượng
• Ví dụ
• Smalltalk
• C++
• Java
• C#
• ...
2. Khái niệm cơ bản

 Vòng đời của đối tượng


(Lớp đối tượng - chỉ là mô tả)
• Khai báo: đối tượng truy xuất qua tên
vd: Car mycar;
• Khởi tạo đối tượng: toán tử new
mycar = new Car();
• Truy xuất/sử dụng đối tượng:
• cú pháp: <tên đối tượng>.<prop, method>
[Link] = 4500;
PdfVerifier pdfVerifier = new PdfVerifier();
• Giải phóng đối tượng [Link](_Logger);
[Link]([Link]);

You might also like