c1 Introduction 7659

48
©     2     0     0     4  ,     H     O     À     N     G     M     I     N     H     S       Ơ     N     C     h     ư     ơ    n    g     1 Kthut lp trình 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 8/14/2006 y = A*x + B*u; x = C*x + d*u; StateController start() stop() LQGController start() stop() Chươ ng 1: M₫ầu

Transcript of c1 Introduction 7659

Page 1: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 1/48

©    2    0    0    4 ,

    H    O    À

    N    G    M    I    N    H    S      Ơ    N

    C    h    ư    ơ   n   g    1

Kỹ thuật lập trình

010101010101010110000101010101010101011000010101010101010101100001

010101010010101010010101010101001010101001010101010100101010100101

101001100011001001001010100110001100100100101010011000110010010010

110010110010001000001011001011001000100000101100101100100010000010

010101010101010110000101010101010101011000010101010101010101100001

010101010010101010010101010101001010101001010101010100101010100101101001100011001001001010100110001100100100101010011000110010010010

110010110010001000001011001011001000100000101100101100100010000010

010101010101010110000101010101010101011000010101010101010101100001

010101010010101010010101010101001010101001010101010100101010100101

101001100011001001001010100110001100100100101010011000110010010010

110010110010001000001011001011001000100000101100101100100010000010

8/14/2006

y = A*x + B*u;

x = C*x + d*u;

StateController 

start()

stop()

LQGController 

start()

stop()

Chươ ng 1: Mở ₫ầu

Page 2: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 2/48

2©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Nội dung bài giảng 

1.1 Giớ i thiệu nội dung môn học

1.2 Giớ i thiệu chung về kỹ thuật lập trình1.3 Phươ ng pháp luận

1.4 Qui trình phát triển phần mềm

1.5 Sơ lượ c về ngôn ngữ C/C++

Page 3: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 3/48

3©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

1.1 Nội dung môn học

Các kỹ thuật lập trình cơ bản, thự c hiện minh hoạtrên các ngôn ng ữ lập trình C và C++:

— Lập trình có cấu trúc ( structured programming)— Lập trình hướ ng ₫ố i tượ ng (object-oriented programming)

— Lập trình thờ i gian thự c (real-time programming)

— Lập trình tổng quát ( generic programming) Tại sao chọn C/C++:

— Hai ngôn ngữ lập trình tiêu biểu nhất, ₫ủ ₫ể thự c hiện cáckỹ thuật lập trình quan trọng

— Hai ngôn ngữ lập trình quan trọng nhất ₫ố i vớ i kỹ sư ₫iện/kỹ sư ₫iều khiển

Page 4: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 4/484©

   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Quan ₫iểm về môn học

Đề cao kiế n thứ c cơ bản, nền tảng:— Thiên về tư duy và phươ ng pháp lập trình

— Tạo khả năng dễ thích ứ ng vớ i các ứ ng dụng khác nhau— Tạo khả năng dễ thích ứ ng vớ i các ngôn ng ữ lập trìnhkhác (Java, Visual Basic, C#, MATLAB…)

— Nhấn mạnh tính chuyên nghiệp trong lập trình: hiệu

quả + chất lượ ng  Nhữ ng nội dung không có trong chươ ng trình:

— Lập trình hệ thố ng (low-level system programming)— Lập trình ₫ồ họa— Lập trình giao tiế p vớ i các thiế t bị ngoại vi ( cổng nố i tiế p,

song song…)— Lập trình cơ sở dữ liệu

— Lập trình thành phần, lập trình phân tán (mạng, Internet)

Page 5: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 5/48

5©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Phươ ng pháp học tập

Cách thứ nhất: Nghe giảng làm thử  ₫ọc tàiliệu thảo luận luyện tập

Cách thứ hai: Đọc tài liệu làm thử  nghe giảng thảo luận luyện tập

Nguyên tắc cơ bản: Chủ ₫ộng học thườ ng xuyên!

Nhữ ng ₫iều không nên làm:— Chép nhiều trên lớ p— Học thuộc lòng, học chay

— Mong ₫ợ i nhiều vàoôn tập— Dự a dẫm vào các bài tập mẫu trong sách

Page 6: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 6/48

6©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Công cụ học tập

Máy tính PC

Môi trườ ng lập trình: Visual C++ 6.0 (Visual

Studio 6.0), Visual C++ .NET, Borland C++ Builder Nền ứ ng dụng: Win32 Console Application

Tài liệu tham khảo.

Page 7: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 7/48

7©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

1.2 Tổng quan về kỹ thuật lập trình

K ỹ thuật lập trình là gì: 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ậ ptrình phù hợ  p vớ i yêu cầu ₫ặc thù của ứ ng dụng.

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)

Page 8: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 8/48

8©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Thế nào là lập trình?

 Viế t chươ ng trình in ra100 số nguyên tố  

₫ầu tiên!

 Viế t chươ ng trình tínhgiai thừ a của 100!

Lập trình giải bài toán:"V ừ a gà vừ a chó,ba mươ i sáu con,bó lại cho tròn,

một trăm chân chẵn"

KHÔNG PHẢI LÀ LẬP TRÌNH!

 Viế t một hàm tínhgiai thừ a!

 Viế t chươ ng trình in raN số nguyên tố  

₫ầu tiên!

Lập trình giải bài toán:"V ừ a gà vừ a chó,vừ a vặn X con,bó lại cho tròn,

₫ủ Y chân chẵn"

ĐÂY LÀ LẬP TRÌNH!

Page 9: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 9/48

9©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Thế nào là lập trình tốt?

Đúng/Chính xác— Thoả mãn ₫úng các nhiệm vụ bài toán lập trình ₫ặt ra, ₫ượ c

khách hàng chấp nhận

Ổn ₫ịnh và bền vữ ng— Chươ ng trình chạy ổn ₫ịnh trong cả nhữ ng trườ ng hợ p khắc

nghiệt— Chạy ít lỗi (số lượ ng lỗi ít, cườ ng ₫ộ lỗi thấp)

— Mứ c ₫ộ lỗi nhẹ có thể chấp nhận ₫ượ c Khả năng chỉnh sử a

— Dễ dàng chỉnh sử a trong quá trình sử dụng và phát triển— Dễ dàng thay ₫ổi hoặc nâng cấp ₫ể thích ứ ng vớ i ₫iều kiện

bài toán lập trình thay ₫ổi Khả năng tái sử dụng

— Có thể ₫ượ c sử dụng hoặc ₫ượ c kế thừ a cho các bài toán lậptrình khác

Page 10: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 10/48

10©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Thế nào là lập trình tốt?

Độ tươ ng thích— Khả năng thích ứ ng và chạy tố t trong các ₫iều kiện môi

trườ ng khác nhau Hiệu suất

— Chươ ng trình nhỏ gọn, sử dụng ít bộ nhớ 

— Tố c ₫ộ nhanh, sử dụng ít thờ i gian CPU Hiệu quả:

— Thờ i gian lập trình ngắn,

— Khả năng bảo trì dễ dàng— Giá trị sử dụng lại lớ n— Sử dụng ₫ơ n giản, thân thiện

— Nhiều chứ c năng tiện ích

Page 11: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 11/48

11©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

 Ví dụ minh họa: Tính giai thừ a

 Viế t chươ ng trình hay xây dự ng hàm?— Hàm tính giai thừ a của một số nguyên

int factorial(int N);

Giải thuật:— Phươ ng pháp ₫ệ quy (recursive )

— Phươ ng pháp lặp (iterative )

if (N > 1)

return N*factorial(N-1);

return 1;

int kq = 1;

while (N > 1)

kq *= N--;

return kq;

☺ „to iterate is human,

to recurse is device!“ 

Page 12: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 12/48

12©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Làm thế nào ₫ể lập trình tốt?

Học cách tư duy và phươ ng pháp lập trình— Tư duy toán học, tư duy logic, tư duy có cấu trúc, tư duy

hướ ng ₫ố i tượ ng, tư duy tổng quát— Tìm hiểu về cấu trúc dữ liệu và giải thuật

Hiểu sâu về máy tính— Tươ ng tác giữ a CPU, chươ ng trình và bộ nhớ 

— Cơ chế quản lý bộ nhớ  Nắm vữ ng ngôn ngữ lập trình

— Biế t rõ các khả năng và hạn chế của ngôn ngữ 

— K ỹ năng lập trình (₫ọc thông, viế t thạo) Tự rèn luyện trên máy tính

— Hiểu sâu ₫ượ c các ₫iểm nêu trên— Rèn luyện kỹ năng lập trình— Thúc ₫ẩy sáng tạo

Page 13: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 13/48

13©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Các nguyên tắc cơ bản

Trừ u tượ ng hóa Chắt lọc r a n hữ ng yế u tố quan trọng, bỏ qua nhữ ng chi

tiế t kém quan trọng

Đóng gói Che giấu v à bảo vệ các dữ liệu quan trọng qua một giao

diện cók iểm soátModule hóa Chia nhỏ ₫ố i tượ ng/vấn ₫ề thành nhiều module nhỏ ₫ể dễ

can thiệpvàg iải quyế tPhân cấp Phân hạng hoặc sắp xế p trật tự ₫ố i tượ ng theo các quan

hệ trên dướ i

Page 14: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 14/48

14©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Nguyên tắc tối cao

 „Keep it simple:

as simple as possible,

but no simpler!“ 

(Albert Einstein)

Page 15: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 15/48

15©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Các bài toán lập trình cho kỹ sư  ₫iện

Lập trình phần mềm ₫iều khiển (µC, PC, PLC, DCS)

Lập trình phần mềm thu thập/quản lý dữ liệu quá

trình Lập trình phần mềm giao diện ngườ i-máy (₫ồ họa)

Lập trình phần mềm tích hợ p hệ thố ng (COM,

OPC,...) Lập trình phần mềm tính toán, thiế t kế  Lập trình phần mềm mô phỏng

Lập trình phần mềm tố i ư u hóa

...

Page 16: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 16/48

16©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

1.3 Phươ ng pháp luận

Phươ ng pháp: Cách thứ c ti ế n hành một công vi ệc ₫ể có hi ệuquả cao

Phươ ng pháp luận: M ột tậ p hợ  p các phươ ng pháp ₫ượ c sử dụng hoặc bộ môn khoa học nghiên cứ u các phươ ng pháp ₫ ó

Phươ ng pháp luận phục vụ:

— Phân tích hệ thố ng— Thiế t kế hệ thố ng

— Thự c hiện

— Thử nghiệm— ...

Page 17: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 17/48

17©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình tuần tự (Sequential Programming)

Phươ ng pháp cổ ₫iển nhất, bằng cách liệt k ê c ác lệnhkế tiế p, mứ c trừ u tượ ng thấp

Kiểm soát dòng mạch thự c hiện chươ ng trình bằngcác lệnh rẽ nhánh, lệnh nhảy, lệnh gọi chươ ng trìnhcon (subroutines)

 Ví dụ ngôn ngữ  ₫ặc thù:— Ngôn ngữ máy,

— ASSEMBLY 

— BASIC— IL (Instruction List), STL (Statement List)

— LD, LAD (Ladder Diagram)

Page 18: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 18/48

18©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình tuần tự : Ví dụ tính giai thừ a

1: MOV AX, n

2: DEC n3: CMP n, 1

4: JMPI

5: MUL AX, n

6: JMP 2

7: MOV n, AX8: RET

Page 19: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 19/48

19©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình tuần tự : Ưu ₫iểm và nhượ c ₫iểm

Ưu ₫iểm:— Tư duy ₫ơ n giản

— Lập trình ở mứ c trừ u tượ ng thấp, nên dễ kiểm soát sử dụngtài nguyên

— Có thể có hiệu suất cao

— Có thể thích hợ p vớ i bài toán nhỏ, lập trình nhúng, lập trình

hệ thố ng Nhượ c ₫iểm:

— Chươ ng trình khó theo dõi -> dễ mắc lỗi

— Khó sử dụng lại— Hiệu quả lập trình thấp

— Không thích hợ p vớ i ứ ng dụng qui mô lớ n

Page 20: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 20/48

20©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình có cấu trúc (structured programming)

Cấu trúc hóa dữ liệu (xây dự ng kiểu dữ liệu) và cấutrúc hóa chươ ng trình ₫ể tránh các lệnh nhảy.

Phân tích và thiế t kế theo cách từ trên xuố ng (top-down)

Thự c hiện từ dướ i lên (bottom-up)

 Yêu cầu của chươ ng trình có cấu trúc: chỉ sử dụng cáccấu trúc ₫iều khiển tuần tự , tuyển chọn ( if thenelse), lặp (while) và thoát ra (exit).

 Ví dụ các ngôn ngữ  ₫ặc thù:— PASCAL, ALGO, FORTRAN, C,...

— SFC (Sequential Funtion Charts)

— ST (Structured Text)

Page 21: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 21/48

21©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình có cấu trúc: Ví dụ tính giai thừ a (PASCAL)

FUNCTION Factorial(n: INTEGER) : INTEGER 

 VAR X: INTERGER;

BEGIN

X := n;

 WHILE (n > 1) DO

BEGINDEC(n);

X := X * n;

END

Factorial := X;END

END;

Page 22: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 22/48

22©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình có cấu trúc: Ví dụ quản lý sinh viên

struct Date { int Day, Month, Year; };

struct Student

{string name;

Date dob;

int code;

};typedef Student* Students; // cấu trúc m ảng

Students create(int max_items, int item_size );

 void destroy(Students lop);

 void add(Students lop, Student sv); void delete(Students lop, Student sv);

Student find(Students lop, int code);

Page 23: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 23/48

23©   2   0   0   4 ,   H   O

    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình module (modular programming)

 Lậ p trình module là một dạng cải ti ế n của lậ p trình có cấ u trúc.Chươ ng trình ₫ượ c cấ u trúc nghiêm ngặt hơ n, dùng ₫ơ n vị cấ utrúc là module.

Module:— Một ₫ơ n vị cấu trúc ₫ộc lập, ₫ượ c chuẩn hóa dùng ₫ể tạo lập

một hệ thố ng.

— Mỗi module bao gồm phần giao diện (mở ) và phần thự c hiện(che giấu)

— Các module giao tiế p vớ i nhau thông qua các giao diện ₫ượ c

₫ặc tả rất chính xác.  Ví dụ ngôn ngữ tiêu biểu:

— Modula-2, xây dự ng trên cơ sở PASCAL, do Niclaus Wirththiế t kế năm 1977.

Page 24: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 24/48

24©   2   0   0   4 ,   H   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình hướ ng ₫ối tượ ng (Object-Oriented Programming)

 Xây dự ng chươ ng trình ứ ng dụng theo quan ₫ i ể m dự a trên cáccấ u trúc dữ li ệu trừ u tượ ng (lớ  p), các th ể nghi ệm của các cấ u trúc

₫ ó ( ₫ố i tượ ng) và quan h ệ giữ a chúng (quan h ệ lớ  p, quan h ệ ₫ố itượ ng).

Nguyên lý cơ bản:

— Trừ u tượ ng (abstraction)— Đóng gói dữ liệu (data encapsulation)

— Dẫn xuất/thừ a kế ( subtyping/inheritance)

— Đa hình/ ₫a xạ ( polymorphism)

 Ví dụ ngôn ngữ hỗ trợ tiêu biểu:— C++, C#

— Java,

— ADA,

— ...

Page 25: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 25/48

25©   2   0   0   4 ,   H   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

 Ví dụ minh họa: Quản lý sinh viên (C++)

class Date {int Day, Month, Year;

 public: void setDate(int, int, int);

...};class Student {

string name;Date dob;

int code; public:

Student(string n, Date d, int c);...

};

class StudentList {Student* list;

 public: void addStudent(Student*);...

};

Page 26: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 26/48

26©   2   0   0   4 ,   H   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

 Ví dụ minh họa: Tính toán kiểu MATLAB

 Vector a(10, 1.0), b(10, 0.5);

 Vector c = a + b;

...

 Vector d = a - b + 2*c; Matrix A(4,4), B(4,2), C(2,4), D(2,2);

 Vector x(4),u(2),y(2);

...

while (true) {// đọc đầu vào u

y = C*x + D*u;

x = A*x + B*u;

// đư a đầu ra y}

...

CTFMatrix G = ss2tf(A,B,C,D);

...

Page 27: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 27/48

27©   2   0   0   4 ,   H   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình tổng quát (generic programming)

Một tư duy lập trình mở , trên quan ₫iểm tổng quáthóa tất cả nhữ ng gì có thể nhằm ₫ư a ra một khuôn

mẫu giải pháp cho nhiều bài toán lập trình cụ thể.

Ưu ₫iểm:— Giảm tố i ₫a lượ ng mã nguồn

— Tăng nhiều lần giá trị sử dụng lại của phần mềm

— Có thể kế t hợ p tùy ý vớ i các phươ ng pháp luận khác

— Tính khả chuyển cao

Các hình thứ c tổng quát hóa:— Kiểu dữ liệu

— Phép toán cơ bản

— Cấu trúc dữ liệu

— Quản lý bộ nhớ ,...

V d h h C ấ h

Page 28: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 28/48

28©   2   0   0   4 ,   H   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

 Ví dụ minh họa: Các cấu trúc toán học

typedef TMatrix<double> Matrix;

typedef TMatrix<complex<double> > ComplexMatrix;

 Matrix a(4,4), b(4,4);

 Matrix c = a*b;

ComplexMatrix a1(4,4), b1(4,4);

ComplexMatrix c1 = a1*b1;

typedef TPoly<double> Poly;

typedef TMatrix<Poly> PolyMatrix;

typedef TPoly<ComplexMatrix> ComplexMatrixPoly;

TRational<int> IntRational;

TRational<Poly> PolyRational;

...

Page 29: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 29/48

29©   2   0   0   4 ,   H   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình thành phần (component-based programming)

Phươ ng pháp xây dự ng phần mềm dự a trên cácthành phần "IC" có sẵn, hoặc tạo ra các IC ₫ó.

Tiế n hóa từ lập trình hướ ng ₫ố i tượ ng Hầu hế t các ứ ng dụng Windows và ứ ng dụng Internet

ngày nay ₫ượ c xây dự ng theo phươ ng pháp luận này

Các ngôn ngữ tiêu biểu— C/C++, C#

— Delphi, Visual Basic

— Script, HMTL, XML,...— FBD

Page 30: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 30/48

30©   2   0   0   4 ,   H   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình thờ i gian thự c (real-time programming)

 Xây dự ng phần mềm ₫áp ứ ng tính năng thờ i gianthự c của hệ thố ng, ví dụ các hệ thố ng ₫iều khiển

Đặc thù:— Lập trình cạnh tranh (₫a nhiệm, ₫a luồng)

— Cơ chế xử lý sự kiện— Cơ chế ₫ịnh thờ i

— Đồng bộ hóa quá trình— Hiệu suất cao

Ngôn ngữ lập trình: ASM, C/C++, ADA,...

Cần sự hỗ trợ của nền cài ₫ặt— Hệ ₫iều hành— Nền phần cứ ng— Mạng truyền thông

1 4 Q i t ì h hát t iể hầ ề

Page 31: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 31/48

31©   2   0   0   4 ,   H   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

1.4 Qui trình phát triển phần mềm

MÔ HÌNH

PHÂN TÍCH

Phân tích

MÔ HÌNH

THIẾT K Ế

Thiế t kế 

Mã hóaThử nghiệm

THẾ GIỚ ITHIẾT K Ế

THẾ GIỚ ITHỰC

BÀI TOÁN GI Ả I PHÁP?

Tậ h à hâ tí h ê ầ

Page 32: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 32/48

32©   2   0   0   4 ,   H   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Tập hợ p và phân tích yêu cầu

Bở i vì: Khách hàng thườ ng biế t ₫ượ c là họ muố n gì,như ng không biế t lập hoạch các yêu cầu

Cho nên: Cần phải cùng vớ i khách hàng phân hoạchvà làm rõ nhữ ng yêu cầu về phạm vi chứ c năng củabài toán

K ế t quả: Mô hình ₫ặc tả (Specification Model) ấn ₫ịnh

và chỉ rõ yêu cầu của bài toán một cách tườ ng minhtheo một ngôn ngữ mô hình hóa rõ ràng, dễ hiểu ₫ểnhóm phân tích thiế t kế lập trình thự c hiện

Trả lờ i câu hỏi: Khách hàng cần nhữ ng gì và nênlàm gì?

Phâ tí h hệ thố g (S t l i )

Page 33: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 33/48

33©   2   0   0   4 ,   H   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Phân tích hệ thống (System analysis)

Phân tích mố i liên hệ của hệ thố ng vớ i môi trườ ngxung quanh

Tìm ra cấu trúc hệ thố ng và các thành phần quantrọng

Định nghĩa chứ c năng cụ thể của các thành phần

Nhận biế t các ₫ặc ₫iểm của từ ng thành phần Phân loại các thành phần, tổng quát hóa, ₫ặc biệt hóa

Nhận biế t mố i liên hệ giữ a các thành phần

K ế t quả: Mô hình hệ thố ng (System model) Cần một ngôn ngữ mô hình hóa ₫ể trao ₫ổi giữ a các

thành viên trong nhóm phân tích và vớ i nhóm thiế t kế  Trả lờ i câu hỏi: Nhữ ng gì sẽ phải làm?

Thiết kế hệ thống (System Design)

Page 34: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 34/48

34©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Thiết kế hệ thống (System Design)

Dự a trên mô hình hệ thố ng, xây dự ng các mô hình chitiế t phục vụ sẵn sàng mã hóa/cài ₫ặt

Bao gồm:— Thiế t kế cấu trúc (structured design ): chươ ng trình, kiểu dữ 

liệu, ₫ố i tượ ng, quan hệ cấu trúc giữ a các ₫ố i tượ ng và kiểu)

— Thiế t kế tươ ng tác (interaction design ): quan hệ tươ ng tác

giữ a các ₫ố i tượ ng— Thiế t kế hành vi (behaviour design ): sự kiện, trạng thái, phéptoán, phản ứ ng

— Thiế t kế chứ c năng (funtional design ): tiế n trình hành ₫ộng,

hàm, thủ tục) K ế t quả: Mô hình thiế t kế (các bản vẽ và lờ i văn mô tả)

Trả lờ i câu hỏi: Làm như thế nào?

Các bước khác

Page 35: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 35/48

35©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Các bướ c khác

Mã hóa/cài ₫ặt (Coding/Implementation): Thể hiện môhình thiế t kế vớ i một ngôn ngữ lập trình cụ thể

Thử nghiệm (Testing, Verification): Chạy thử , phân tíchvà kiểm chứ ng:— Thử  ₫ơ n vị (Unit Test)

— Thử tích hợ p ( Integration Test)

Gỡ rố i ( Debugging): Tìm ra và sử a các lỗi chươ ng trìnhchạy (các lỗi logic)

 Xây dự ng tài liệu ( Documenting): Xây dự ng tài liệu pháttriển, tài liệu hướ ng dẫn sử dụng

Đào tạo, chuyển giao

Bảo trì, bảo dưỡ ng

Chu trình cổ ₫iển: “Waterfall Model”

Page 36: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 36/48

36©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Chu trình cổ ₫iển: Waterfall Model

Nghiên cứu

khả thi

Nghiên cứu

khả thi

Phân tích

yêu cầu

Phân tích

yêu cầu

Thiết kếThiết kế

Mã hóaMã hóa

Thử nghiệm

đơn vị

Thử nghiệm

đơn vịThử nghiệm

tích hợp

Thử nghiệm

tích hợp

 Đào tạo Đào tạo

Chuyển giaoChuyển giao

Bảo trìBảo trì

X thế hiện na : Song song à lặp

Page 37: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 37/48

37©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

 Xu thế hiện nay: Song song và lặp

Lập trình là gì nằm ở ₫âu?

Page 38: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 38/48

38©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lập trình là gì, nằm ở ₫âu?

Lập trình > Mã hóa

Lập trình ≈ Tư tưở ng thiế t kế + Mã hóa + Thử 

nghiệm + Gỡ rố i

Các bước phát triển chương trình

Page 39: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 39/48

39©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Các bướ c phát triển chươ ng trình

Biên dịch

Mã nguồn

Liên kết

Mã đích

Nạp và chạy

CT chạy được

Thư viện

Môi trường/công cụ phát triển

Page 40: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 40/48

40©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Môi trườ ng/công cụ phát triển

IDE ( Integrated Development Environment)— Hỗ trợ toàn bộ các bướ c phát triển chươ ng trình

— Ví dụ: MS Visual C++, Borland C++ (Builder), Keil-C

Các công cụ tiêu biểu— Trình soạn thảo (Editor)

— Trình biên dịch (Compiler)

— Trình liên kế t (Linker)— Trình nạp (Loader)

— Trình gỡ rố i (Debugger)

— Trình quản l ý dự án (Project Manager)

Môi trường phát triển

Page 41: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 41/48

©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Môi trườ ng phát triển

1.5 Sơ lược về C/C++

Page 42: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 42/48

42©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

1.5 Sơ lượ c về C/C++

Lượ c sử ngôn ng ữ C Tiế nhó atừ hai ngôn ngữ lập trình

— BCPL và B: Các ngôn ngữ “phi kiểu” Dennis Ritchie (Bell Laboratories, AT&T)

— Bổ sung kiểu h óadữ liệu v à c á c yế u tố khác

Ngôn ngữ phát triển hệ ₫iều hành UNIX  Không phụ thuộc phần cứ ng

— Tính khả chuyển

1989: ANSI chuẩn hóa (ANSI-C) 1990: Công bố chuẩn ANSI và ISO

— ANSI/ISO 9899: 1990

Lược sử ngôn ngữ C++

Page 43: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 43/48

43©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Lượ c sử ngôn ng ữ C++

Mở rộng, tiế nhó atừ C Bjarne Stroustrup (Bell Laboratories)

— Đầu nhữ ng năm 1980: “C with classes”— 1984: Tên C++

— 1987: “The C++ Programming Language” 1st Edition

— 1997: “The C++ Programming Language” 3rd Edition

— Chuẩn hóa quố c tế : ANSI/ISO 1996

Bổ sung các ₫ặc tính hỗ trợ :— Lập trình hướ ng ₫ố i tượ ng

— Lập trình tổng quát

— Lập trình toán học,...

Ngôn ngữ “lai”

Tại sao chọn C/C++

Page 44: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 44/48

44©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

Tại sao chọn C/C++

Đáp ứ ng các yêu cầu:— Gần gũi vớ i phần cứ ng

— Hiệu suất cao

— Tươ ng ₫ố i thân thiện vớ i ngườ i lập trình— Khả chuyển

— Chuẩn hóa quố c tế (tươ ng lai vữ ng chắc)

Thế mạnh tuyệt ₫ố i của ANSI-C:— Phổ biế n cho hầu hế t các nền vi xử lý, vi ₫iều khiển, DSP

— Phổ biế n cho “mỗi ngườ i lập trình” trên thế giớ i

Thế mạnh tuyệt ₫ố i của ANSI/ISO C++:— Lập trình hướ ng ₫ố i tượ ng

— Lập trình tổng quát (template)

— Lập trình toán học (dữ liệu trừ u tượ n gvànạp chồng toán tử )

Visual C++, .NET & C#

Page 45: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 45/48

45©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

 Visual C++, .NET & C#

 Visual C++:— Môi trườ ng/công cụ lập trình C++ của Microsoft

— Mở rộng một số yế u tố 

— Thư viện lập trình Windows: Microsoft Foundation Classes(MFC), Active Template Library (ATL)

— Các thư viện chung: GUI, graphics, networking,multithreading, …

.NET (“dot net”)— Kiế n trúc nền tảng phần mềm lập trình phân tán

— Hướ ng tớ i các ứ ng dụng Web, phân tán trên nhiều chủng

loại thiế t bị khác nhau— Các ứ ng dụng trên nhiều ngôn ngữ khác nhau có thể giao

tiế p một cách ₫ơ n giản trên một nền chung

— Phươ ng pháp luận: Lập trình thành phần

 Visual C++, .NET & C#

Page 46: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 46/48

46©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ   N

Chương 1: Mở đầu

V sua C , .N & C

C#— Anders Hejlsberg và Scott Wiltamuth (Microsoft)

— Thiế t kế riêng cho nền .NET

— Nguồn gố c từ C, C++ và Java

— Điều khiển theo sự kiện, hoàn toàn hướ ng ₫ố i tượ ng, ngônngữ lập trình hiển thị

— Integrated Development Environment (IDE)— Tươ ng tác giữ a các ngôn ngữ 

Chúng ta ₫ã học ₫ược những gì?

Page 47: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 47/48

47©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ

   N

Chương 1: Mở đầu

Chúng ta ₫ã học ₫ượ c nhữ ng gì?

Biế t ₫ượ c nhữ ngg ì sẽ phải học, học ₫ể làm gì vàphải học như thế nào

Hàng loạt khái niệm mớ i xung quanh kỹ thuật lậptrình và qui trình công nghệ phần mềm

Tổng quan về các kỹ thuật lập trình

Lượ c sử ngôn ngữ C/C++, thế mạnh của chúng so

vớ i các ngôn ngữ khác

Chủ ₫ề tiếp theo: C/C++ cơ sở 

Page 48: c1 Introduction 7659

8/6/2019 c1 Introduction 7659

http://slidepdf.com/reader/full/c1-introduction-7659 48/48

48©   2   0   0   4 ,   H

   O    À   N   G    M

   I   N   H

   S     Ơ

   N

Chương 1: Mở đầu

p

Tổ chứ c chươ ng trình/bộ nhớ  Dữ liệuvàb iế n Toán tử , biểu thứ c vàc âu lệnh

Điều khiển chươ ng trình: vòng lặp, rẽ nhánh

Mảng và con trỏ Cấu trúc