1. Trang chủ
  2. » Giáo án - Bài giảng

Bài 8 Lập trình

78 310 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài 8 Lập trình
Tác giả Nguyễn Vân Vân
Trường học Đại học Công nghệ, Đại học Quốc gia Hà Nội
Chuyên ngành Khoa Công nghệ thông tin
Thể loại Bài giảng
Năm xuất bản 2008
Thành phố Hà Nội
Định dạng
Số trang 78
Dung lượng 390,37 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nguy nV nVLập trình hiệu quả hơn, sản phẩm rẻ tiền hơn ̈ Tốc độ phát triển cao hơn º năng lực biểu diễn cao hơn º khả năng sử dụng lại cao hơn ̈ Dễ bảo trì hơn º dễ hiểu, dễ sửa đổi, thí

Trang 1

Bé m«n C«ng nghÖ phÇn mÒm- Khoa CNTT- §HCN

Email: vynv@coltech.vnu.vn

K ngh ph n m m

Software Engeneering

Trang 2

Nguy nV nV

N i dung Bài 8: L p trình

̈ Ng«n ng÷ lËp tr×nh

̈ Phong c¸ch lËp tr×nh

̈ LËp tr×nh tr¸nh lçi

̈ LËp tr×nh h−íng hiÖu qu¶

Trang 3

Nguy nV nV

TÀI Li U THAM KH O

1 Nguy n V n V , Nguy n Vi t Hà Giáo trình k ngh ph n

m m Nhà xu t b n i h c Qu c gia Hà n i, 2008

2 Grady Booch, James Rumbaugh, Ivar Jacobson The Unified

Modeling language User Guid Addison-Wesley, 1998.

3 M Ould Managing Software Quality and Business Risk, John

Wiley and Sons, 1999.

4 Roger S.Pressman, Software Engineering, a Practitioner’s

Approach Fifth Edition, McGraw Hill, 2001.

5 Ian Sommerville, Software Engineering Sixth Edition,

Addison-Wasley, 2001.

6 Nguy n V n V Phân tích thi t k h th ng thông tin hi n đ i

Trang 5

Nguy nV nV

Lập trình hiệu quả hơn, sản phẩm rẻ tiền hơn

̈ Tốc độ phát triển cao hơn

º năng lực biểu diễn cao hơn

º khả năng sử dụng lại cao hơn

̈ Dễ bảo trì hơn

º dễ hiểu, dễ sửa đổi, thích nghi

̈ Chất l−ợng cao hơn

º sử dụng các cấu trúc an toμn hơn

Khái niệm lập trình hiệu quả

Trang 7

Nguy nV nV TiÕn hãa cña kü thuËt lËp tr×nh

Trang 8

º độ ghép nối cao

º chương trình khó hiểu, khó sửa, dễ sinh lỗi Ngôn ngữ dùng: thế hệ 1, 2: assembly, basic,

Trang 9

sö dông ch−¬ng tr×nh con, biÕn côc bé

dÔ hiÓu h¬n, an toμn h¬n Ng«n ng÷ dïng: thÕ hÖ 2, 3: Fortran, Pascal, C,

Trang 10

Nguy nV nV

Lập trình hướng chức năng

̈ Dựa trên nguyên tắc ghép nối dữ liệu

º trao đổi dữ liệu bằng tham số vμ giá trị trả lại

º loại bỏ hoμn toμn dữ liệu dùng chung

̈ Loại bỏ các hiệu ứng phụ khi sửa đổi các mođun

chương trình; nâng cao tính tái sử dụng

̈ Ví dụ: Lisp

Trang 11

Nguy nV nV

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

Bao gói & che dấu thông tin

thao tác với dữ liệu qua các giao diện xác định

kế thừa

Ngôn ngữ hướng đối tượng: C++, Java, C#

º cục bộ hơn

º dễ tái sử dụng hơn

º thuận tiện cho các ứng dụng lớn

Trang 12

Nguy nV nV LËp tr×nh logic

̈ T¸ch tri thøc vÒ bμi to¸n khái kü thuËt lËp tr×nh

Trang 13

noattack(X/Y, [X1/Y1 |

Trang 15

Nguy nV nV Năng lực của ngôn ngữ

Ngôn ngữ bậc cao:

º có cấu trúc, câu lệnh phong phú

º hỗ trợ nhiều kiểu dữ liệu

º hỗ trợ con trỏ, đệ qui

º hỗ trợ hướng đối tượng

º thư viện phong phú

nên dùng ngôn ngữ bậc cao (hơn)

Trang 16

̇ sö dông c¸c tÝnh n¨ng chuÈn cña ng«n ng÷

̇ sö dông script khi cã thÓ

Trang 17

Nguy nV nV

Có công cụ hiệu quả

Trình biên dịch hiệu quả

º biên dịch tốc độ cao

º khả năng tối ưu cao

º khai thác các tập lệnh, kiến trúc phần cứng mới

Các công cụ trợ giúp hiệu quả

º editor, debugger, linker, make

º IDE (Integrated Develop Environment)

º môi trường Unix thường không dùng IDE

Trang 18

º tÝnh to¸n chÝnh x¸c, th− viÖn to¸n häc

m¹nh,dÔ dμng song song hãa

º Fortran vÉn phæ biÕn

Trang 20

Nguy nV nV Phong cách lập trình

Hướng tới phong cách lμm cho mã nguồn

º dễ hiểu, dễ sửa đổi

Trang 21

Nguy nV nV

Tại sao cần dễ hiểu

Phần mềm luôn cần sửa đổi

º sửa lỗi

º nâng cấp

kéo dμi tuổi thọ, nâng cao hiệu quả kinh tế

Nếu không dễ hiểu

º bảo trì tốn thời gian, chi phí cao

º tác giả phải bảo trì suốt vòng đời của phần mềm

º bản thân tác giả cũng không hiểu

Trang 22

Nguy nV nV

Chú thích

Mọi điều được Chú thích trong chương trình

Mục đích sử dụng của các biến Chức năng của khối lệnh, câu lệnh

º các lệnh điều khiển

º các lệnh phức tạp

Chú thích các mô đun

º mục đích, chức năng của mô đun

º tham số, giá trị trả lại (giao diện)

º các mô đun thuộc cấp

º cấu trúc, thuật toán

º nhiệm vụ của các biến cục bộ

º tác giả, người kiểm tra, thời gian

Trang 23

Nguy nV nV

Đặt tên

Đặt tên biến, tên hμm có nghĩa, gợi nhớ

Sử dụng các ký hiệu, từ tiếng Anh có nghĩa Lμm cho dễ đọc

º dùng DateOfBirth hoặc date_of_birth

º không viết dateofbirth

Tránh đặt tên quá dμi

º không đặt tên dμi với các biến cục bộ

Thống nhất cách dùng

Trang 24

Nguy nV nV

Câu lệnh

Các câu lệnh phải mô tả cấu trúc

º tụt lề, dễ đọc, dễ hiểu

Lμm đơn giản các lệnh

º mỗi lệnh trên một dòng

º triển khai các biểu thức phức tạp

º hạn chế truyền tham số lμ kết quả của hμm, biểu thức

Trang 25

º không thể theo dõi đồng thời hoạt động

của nhiều biến

Trang 26

º ph©n biÖt output vμ th«ng b¸o lçi

º c¸c hμm th− viÖn nªn tr¸nh viÖc tù xö lý, tù ®−a ra

th«ng b¸o lçi

Trang 27

Nguy nV nV

Output vμ thông báo (lỗi)

Output lμ dữ liệu, còn được dùng để lμm input

cho phần mềm khác Thông báo (lỗi) lμ các thông tin nhất thời,

trạng thái hệ thống, lỗi vμ cách khắc phục Cần tách output vμ thông báo lỗi

OS thường cung cấp 3 luồng dữ liệu chuẩn

º stdin (cin): input chuẩn (bμn phím)

º stdout (cout): output chuẩn (mμn hình)

º stderr (cerr): luồng thông báo lỗi chuẩn

Trang 29

Nguy nV nV

Xö lý lçi trong hμm th− viÖn

Ng−êi viÕt vμ ng−êi sö dông th− viÖn lμ kh¸c nhau

Ng−êi sö dông th−êng muèn cã c¸ch xö lý riªng

Hμm th− viÖn tr¶ l¹i tr¹ng th¸i lçi, kh«ng tù xö lý

º tr¶ tr¹ng th¸i b»ng gi¸ trÞ tr¶ l¹i

º tr¶ tr¹ng th¸i b»ng tham sè

º tr¶ l¹i b»ng nÐm ngo¹i lÖ (trong c¸c OOL)

int lookup(int a[], int key, int& err_code)

{

if (not found) err_code = 0;

Trang 30

º môđun điều khiển bắt ngoại lệ (nếu có)

̈ Tách phần xử lý lỗi khỏi phần cμi đặt thuật toán

thông thường, lμm cho chương trình dễ đọc hơn

̈ Dễ dùng hơn, an toμn hơn

Trang 32

Nguy nV nV B¾t ngo¹i lÖ

try { result = MyDivide(x, y);

} catch ( invalid_argument& e ) { cerr << e.what() << endl;

// m· xö lý víi ngo¹i lÖ };

Trang 33

Nguy nV nV Giao diện của mô đun

Thống nhất định dạng

º thứ tự truyền tham số

º strcpy(des, src) Kiểm tra tính hợp lệ của dữ liệu

º chỉ thực hiện xử lý với dữ liệu hợp lệ

Lμm đơn giản giao diện (giảm độ ghép nối)

º không truyền thừa tham số

º tìm cách kết hợp các khoản mục liên quan

Trang 34

Nguy nV nV

Phong cách lập trình tốt

Tuân theo các chuẩn thông dụng

Chuẩn được chấp nhận rộng rãi hơn dễ hiểu hơn

Chú giải đầy đủ mỗi khi không tuân theo chuẩn

"Người khác có hiểu được không?"

Trang 35

º hạn chế dùng các cấu trúc nguy hiểm

̈ đóng gói/che dấu thông tin

º xây dựng kiểu dữ liệu trừu t−ợng

º hạn chế thao tác trực tiếp lên thuộc tính

Trang 36

º kh¸i niÖm møc thÊp

º cã kh¶ n¨ng g©y lçi nghiªm träng

º dÔ nhÇm

double r;

int* n = &r;

Trang 39

Bộ nhớ động với C++

Trang 40

Nguy nV nV

Định kiểu dữ liệu

̇ Nhiều lỗi lập trình do gán dữ liệu sai kiểu

̇ Các ngôn ngữ bậc cao cung cấp nhiều kiểu dữ liệu vμ

cho phép đặc tả miền dữ liệu

̇ Tên kiểu có nghĩa lμm cho chương trình dễ hiểu

typedef enum {Green, Yellow, Red} TLColor;

Trang 41

Nguy nV nV

Lớp/kiểu dữ liệu trừu t−ợng

̇ Mức cao hơn của định kiểu dữ liệu lμ xây dựng lớp đối t−ợng

̇ Kiểm tra động về tính đúng đắn của dữ liệu

class PrimeNumber { private:

Trang 43

Nguy nV nV

LËp tr×nh phßng thñ (Defensive programming)

̇ NhiÒu lÖnh cã kh¶ n¨ng sinh lçi

– lÖnh vμo/ra – c¸c phÐp to¸n – thao t¸c víi bé nhí – truyÒn tham sè sai kiÓu

̇ Dù ®o¸n kh¶ n¨ng xuÊt hiÖn lçi

̇ Kh¾c phôc lçi

– lưu tr¹ng th¸i an toμn

Trang 46

}

Trang 47

Nguy nV nV

Lập trình thứ lỗi

Fault tolerance programming

ạ Không thể loại trừ hoμn toμn lỗi

ạ Cần có các hệ thống có độ tin cậy đặc biệt

ạ Dung thứ lỗi: chấp nhận sự xuất hiện lỗi lập trình

ạ Phát hiện, khắc phục lỗi

ạ Khởi nguyên từ thứ lỗi phần cứng

ạ Dựa trên nguyên tắc song song hóa chức năng

Trang 48

Nguy nV nV

Nguyên lý thứ lỗi

̇ Song song hóa thiết bị

̇ Dùng thông tin d− thừa để khôi phục dữ liệu

system 1 system 2 system N

xác suất có lỗi <1

xác suất cả hệ thống ngừng hoạt động

N

º Error Correction Code ECC

º parity check, check sum

Trang 49

Nguy nV nV

N - version programming

version 1 version 2 version 3

Trang 50

Nguy nV nV

Kh i ph c h i (Recovery block)

ThuËt to¸n 1

̇ sö dông c¸c thuËt to¸n kh¸c nhau

̇ kiÓm tra tÝnh hîp lÖ cña kÕt qu¶

Trang 51

Nguy nV nV

Thứ lỗi dữ liệu (Data fault tolerance)

̇ Phục hồi lùi

º kiểm tra tính hợp lệ của dữ liệu mỗi khi biến đổi

Trang 52

̇ HiÖu qu¶ thùc hiÖn lu«n cÇn ®−îc xem xÐt

º thuËt to¸n hiÖu qu¶

º kü thuËt lËp tr×nh hiÖu qu¶

º ng«n ng÷ lËp tr×nh hiÖu qu¶

Trang 53

Nguy nV nV

Cải thiện tốc độ

̇ Tối −u hóa chu trình

º đ−a phép toán bất biến ra ngoμi chu trình

º tính sẵn giá trị đ−ợc sử dụng nhiều lần

̇ Hạn chế gọi hμm nhỏ với tần số cao

º phí tổn cho gọi hμm nhỏ

º dùng hμm inline, dùng macro

̇ Hạn chế truyền tham số trị lμ cấu trúc phức tạp

º tham số đ−ợc copy lên stack

Trang 54

Nguy nV nV

PhÝ tæn cho gäi hμm/thñ tôc

̇ Copy tham sè lªn stack

̇ Copy gi¸ trÞ tr¶ l¹i tõ stack

̇ ChuyÓn ®iÒu khiÓn ch−¬ng tr×nh

º mÊt tÝnh liªn tôc cña dßng lÖnh

º mÊt tÝnh côc bé cña cache

Trang 55

Nguy nV nV

Macro vμ hμm inline

#define CUBE(x) (x*x*x) CUBE(n+1)

inline int cube(int x) {

return x*x*x;

}

º kh«ng cã kiÓu

º kh«ng an toμn

Trang 56

Nguy nV nV

Truyền tham số

̇ Tham số trị

º copy giá trị (bộ nhớ) của tham số lên stack

º không hiệu quả với biến kiểu cấu trúc lớn

º không an toμn với các cấu trúc phức tạp

̇ Tham số biến/tham chiếu

º copy địa chỉ của tham số lên stack

º địa chỉ có độ lớn cố định (4 bytes)

º nội dung có thể bị thay đổi (dùng từ khóa

const)

Trang 58

Nguy nV nV

Cải thiện tốc độ (tránh lệnh rẽ nhánh)

̇ Tránh gọi hμm (chương trình con)

̇ Tránh vòng lặp

̇ Tránh điều kiện (if)

tận dụng hiệu quả pipeline

Trang 60

Nguy nV nV

Hiệu quả vμo/ra

ạ Tối thiểu các yêu cầu input/output

º tốc độ thiết bị ngoại vi chậm

º loại bỏ các inp/out không cần thiết

for (i=0; i<10000000; i++) {

printf("i = %d\n", i);

}

ạ Input/Output theo khối

º tối thiểu số lần gọi th− viện input/output

º tận dụng hiệu quả bộ đệm input/output

Trang 62

Nguy nV nV

Phong cách lập trình với C/C++

̇ Phần mềm được cấu thμnh bởi nhiều tệp, các

tệp thường được biên dịch riêng rẽ

º c: khai báo dữ liệu, hμm

º h: định nghĩa các kiểu dữ liệu dùng chung

̇ Không khai báo dữ liệu, định nghĩa hμm trong

các tệp header (.h)

Trang 63

Nguy nV nV

C¸c b−íc x©y dùng phÇn mÒm trªn C/C++

̇ So¹n th¶o (edit )

̇ TiÒn biªn dÞch ( pre-compile )

̇ Biªn dÞch ( compile )

̇ KÕt nèi ( link )

̇ Thùc hiÖn ( execute )

Trang 64

printf(”year: %d, mon: %d, day: %d”,

d.year, d.mon, d.day);

}

Trang 66

Nguy nV nV

.c o

.c o

date.h

Trang 70

Nguy nV nV

#define Cube(x) (x*x*x)

void main() {

Trang 71

Nguy nV nV

Pre-compile

#define DEBUG

int foo() {

Trang 76

Nguy nV nV

Câu hỏi ôn tập

1 Kỹ thật lập trình tốt thể hiện ở chỗ nμo? Hệ quả của nó?

2 Nêu các kỹ thuật lập trình đã có? đặc trưng của mỗi loại

lμ gì?

3 Tiêu chuẩn lựa chọn ngôn ngữ lập trình?

4 Thế nμo lμ ngôn ngữ khả chuyển? Cho ví dụ?

5 Nêu các miền ứng ứng dụng vμ ngôn ngữ thích hợp với

nó?

6 Các yêu tố tạo ra phong cách lập trình lμ gi? Nó hướng tới

phần mềm có đặc trưng gì?

Trang 77

Nguy nV nV

Câu hỏi ôn tập

7 GiảI thích cách lμm: chú thích?, đặt tên?, viết câu lệnh?,

đặt hμm vμ biến cục bộ?, xử lý lỗi vμ thông báo? Xử lý lỗi trong th− viện? Xử lý ngoại lệ?

8 Tiêu chuẩn cho phong cách lập trình tôt?

Trang 78

Nguy nV nV

C©u hái và th o lu n

Ngày đăng: 12/05/2014, 11:11

TỪ KHÓA LIÊN QUAN

w