Diễn Đàn Teen Việt -Thế Giới 9x pro
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

giáo trình ngôn ngữ lập trinh C ++ <phần 2>

Go down

giáo trình ngôn ngữ lập trinh C ++ <phần 2> Empty giáo trình ngôn ngữ lập trinh C ++ <phần 2>

Bài gửi by luongbv93 25th November 2011, 09:07

CHƯƠNG 1

GIỚI THIỆU VỀ CÁC PHƯƠNG PHÁP LẬP TRÌNH

Nội dung của chương này tập trung trình bày các phương pháp lập trình:

• Phương pháp lập trình tuyến tính

• Phương pháp lập trình hướng cấu trúc

• Phương pháp lập trình hướng đối tượng.

1.1 LẬP TRÌNH TUYẾN TÍNH

Đặc trưng cơ bản của lập trình tuyến tính là tư duy theo lối tuần tự. Chương trình sẽđược thực
hiện theo thứ tự từđầu đến cuối, lệnh này kế tiếp lệnh kia cho đến khi kết thúc chương trình.

Đặc trưng

Lập trình tuyến tính có hai đặc trưng:

• Đơn giản: chương trình được tiến hành đơn giản theo lối tuần tự, không phức tạp.

• Đơn luồng: chỉ có một luồng công việc duy nhất, và các công việc được thực hiện tuần tự
trong luồng đó.

Tính chất

• Ưu điểm: Do tính đơn giản, lập trình tuyến tính được ứng dụng cho các chương trình đơn
giản và có ưu điểm dễ hiểu.

• Nhược điểm: Với các ứng dụng phức tạp, người ta không thể dùng lập trình tuyến tính để
giải quyết.

Ngày nay, lập trình tuyến tính chỉ tồn tại trong phạm vi các modul nhỏ nhất của các phương pháp
lập trình khác. Ví dụ trong một chương trình con của lập trình cấu trúc, các lệnh cũng được thực
hiện theo tuần tự từđầu đến cuối chương trình con.

1.2 LẬP TRÌNH HƯỚNG CẤU TRÚC

1.2.1 Đặc trưng của lập trình hướng cấu trúc

Trong lập trình hướng cấu trúc, chương trình chính được chia nhỏ thành các chương trình con và
mỗi chương trình con thực hiện một công việc xác định. Chương trình chính sẽ gọi đến chương
trình con theo một giải thuật, hoặc một cấu trúc được xác định trong chương trình chính.

Các ngôn ngữ lập trình cấu trúc phổ biến là Pascal, C và C++. Riêng C++ ngoài việc có đặc trưng
của lập trình cấu trúc do kế thừa từ C, còn có đặc trưng của lập trình hướng đối tượng. Cho nên
C++ còn được gọi là ngôn ngữ lập trình nửa cấu trúc, nửa hướng đối tượng.

Đặc trưng

Đặc trưng cơ bản nhất của lập trình cấu trúc thể hiện ở mối quan hệ:

Chương trình = Cấu trúc dữ liệu + Giải thuật

Trong đó:

• Cấu trúc dữ liệu là cách tổ chức dữ liệu cho việc xử lý bởi một hay nhiều chương trình
nào đó.

• Giải thuật là một quy trình để thực hiện một công việc xác định

Trong chương trình, giải thuật có quan hệ phụ thuộc vào cấu trúc dữ liệu:

• Một cấu trúc dữ liệu chỉ phù hợp với một số hạn chế các giải thuật.

• Nếu thay đổi cấu trúc dữ liệu thì phải thay đổi giải thuật cho phù hợp.

• Một giải thuật thường phải đi kèm với một cấu trúc dữ liệu nhất định.

Tính chất

• Mỗi chương trình con có thểđược gọi thực hiện nhiều lần trong một chương trình chính.

• Các chương trình con có thểđược gọi đến để thực hiện theo một thứ tự bất kì, tuỳ thuộc
vào giải thuật trong chương trình chính mà không phụ thuộc vào thứ tự khai báo của các
chương trình con.

• Các ngôn ngữ lập trình cấu trúc cung cấp một số cấu trúc lệnh điều khiển chương trình.

Ưu điểm

• Chương trình sáng sủa, dễ hiểu, dễ theo dõi.

• Tư duy giải thuật rõ ràng.

Nhược điểm

• Lập trình cấu trúc không hỗ trợ mạnh việc sử dụng lại mã nguồn: Giải thuật luôn phụ
thuộc chặt chẽ vào cấu trúc dữ liệu, do đó, khi thay đổi cấu trúc dữ liệu, phải thay đổi giải
thuật, nghĩa là phải viết lại chương trình.

• Không phù hợp với các phần mềm lớn: tư duy cấu trúc với các giải thuật chỉ phù hợp với
các bài toán nhỏ, nằm trong phạm vi một modul của chương trình. Với dự án phần mềm
lớn, lập trình cấu trúc tỏ ra không hiệu quả trong việc giải quyết mối quan hệ vĩ mô giữa
các modul của phần mềm.

Vấn đề

Vấn đề cơ bản của lập trình cấu trúc là bằng cách nào để phân chia chương trình chính thành các
chương trình con cho phù hợp với yêu cầu, chức năng và mục đích của mỗi bài toán. Thông
thường, để phân rã bài toán trong lập trình cấu trúc, người ta sử dụng phương pháp thiết kế trên
xuống (top-down).

1.2.2 Phương pháp thiết kế trên xuống (top-down)

Phương pháp thiết kế top-down tiếp cận bài toán theo hướng từ trên xuống dưới, từ tổng qúat đến
chi tiết. Theo đó, một bài toán được chia thành các bài toán con nhỏ hơn. Mỗi bài toán con lại
được chia nhỏ tiếp, nếu có thể, thành các bài toán con nhỏ hơn nữa. Quá trình này còn được gọi là
quá trình làm mịn dần. Quá trình này sẽ dừng lại khi các bài toán con không cần chia nhỏ thêm nữa. Nghĩa là khi mỗi bài toán con đều có thể giải quyết bằng một chương trình con với một giải
thuật đơn giản.

Ví dụ, sử dụng phương pháp top-down để giải quyết bài toán xây một căn nhà mới. Chúng ta có
thể phân rã bài toán theo các bước như sau:

• Ở mức thứ nhất, chia bài toán xây nhà thành các bài toán nhỏ hơn nhưlàm móng, đổ cột,
đổ trần, xây tường, lợp mái.

• Ở mức thứ hai, phân rã các công việc ở mức thứ nhất như việc làm móng nhà có thể phân
rã tiếp thành các công việc đào móng, gia cố nền, làm khung sắt, đổ bê tong; công việc đổ
cột được phần rã thành …

• Ở mức thứ ba, phân rã các công việc của mức thứ hai như việc đào móng có thể phân chia
tiếp thành các công việc nhưđo đạc, cắm mốc, chăng dây, đào và kiểm tra móng. Việc gia
cố nền được phân rã thành …

Quá trình phân rã có thể dừng ở mức này, bởi vì các công việc con thu được nhưđo đạc, cắm
mốc, chăng dây, đào… có thể thực hiện được ngay, không cần chia nhỏ thêm nữa.

Lưu ý:

• Cùng sử dụng phương pháp top-down với cùng một bài toán, nhưng có thể cho ra nhiều
kết quả khác nhau. Nguyên nhân là do sự khác nhau trong tiêu chí để phân rã một bài toán
thành các bài toán con.

Ví dụ, vẫn áp dụng phương pháp top-down để giải quyết bài toán xây nhà, nhưng nếu sử dụng
một cách khác để phân chia bài toán, ta có thể thu được kết quả khác biệt so với phương pháp ban
đầu:

• Ở mức thứ nhất, chia bài toán xây nhà thành các bài toán nhỏ hơn nhưlàm phần gỗ, làm
phần sắt, làm phần bê tông và làm phần gạch.

• Ở mức thứ hai, phân rã các công việc ở mức thứ nhất là làm phần gỗ có thể chia thành các
công việc như xẻ gỗ, gia công gỗ, tạo khung, lắp vào nhà. Việc làm sắt có thể chia nhỏ
thành…

Rõ ràng, với cách làm mịn thế này, ta sẽ thu được một kết quả khác hẳn với cách thức đã thực
hiện ở phần trên.

1.3 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

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

Trong lập trình hướng đối tượng:

• Người ta coi các thực thể trong chương trình là các đối tượng và sau đó trừu tượng hoá đối
tượng thành lớp đối tượng.

• Dữ liệu được tổ chức thành các thuộc tính của lớp. Nguời ta ngăn chặn việc thay đổi tuỳ
tiện dữ liệu trong chương trình bằng các cách giới hạn truy nhập như chỉ cho phép truy
nhập dữ liệu thông qua đối tượng, thông qua các phương thức mà đối tượng được cung
cấp…

• Quan hệ giữa các đối tượng là quan hệ ngang hàng hoặc quan hệ kế thừa: Nếu lớp B kế
thừa từ lớp A thì A được gọi là lớp c ơ sở và B được gọi là lớp dẫn xuất
Ngôn ngữ lập trình hướng đối tượng phổ biến hiện nay là Java, C++, C#...Mặc dù C++ cũng có
những đặc trưng cơ bản của lập trình hướng đối tượng nhưng vẫn không phải là ngôn ngữ lập
trình thuần hướng đối tượng.

Đặc trưng

Lập trình hướng đối tượng có hai đặc trưng cơ bản:

• Đóng gói dữ liệu: dữ liệu luôn được tổ chức thành các thuộc tính của lớp đối tượng. Việc
truy nhập đến dữ liệu phải thông qua các phương thức của đối tượng lớp.

• Sử dụng lại mã nguồn: việc sử dụng lại mã nguồn được thể hiện thông qua cơ chế kế
thừa. Cơ chế này cho phép các lớp đối tượng có thể kế thừa từ các lớp đối tượng khác. Khi
đó, trong các lớp dẫn xuất, có thể sử dụng các phương thức (mã nguồn) của các lớp cơ sở
mà không cần phải định nghĩa lại.

Ưu điểm

Lập trình hướng đối tượng có một sốưu điểm nổi bật:

• Không còn nguy cơ dữ liệu bị thay đổi tự do trong chương trình. Vì dữ liệu đã được đóng
gói vào các đối tượng. Nếu muốn truy nhập vào dữ liệu phải thông qua các phương thức
được cho phép của đối tượng.

• Khi thay đổi cấu trúc dữ liệu của một đối tượng, không cần thay đổi mã nguồn của các đối
tượng khác, mà chỉ cần thay đổi một số thành phần của đối tượng dẫn xuất. Điều này hạn
chế sựảnh hưởng xấu của việc thay đổi dữ liệu đến các đối tượng khác trong chương
trình.

• Có thể sử dụng lại mã nguồn, tiết kiệm tài nguyên, chi phí thời gian. Vì nguyên tắc kế
thừa cho phép các lớp dẫn xuất sử dụng các phương thức từ lớp cơ sở như những phương
thức của chính nó, mà không cần thiết phải định nghĩa lại.

• Phù hợp với các dự án phần mềm lớn, phức tạp.

1.3.2 Một số khái niệm cơ bản

Trong mục này, chúng ta sẽ làm quen với một số khái niệm cơ bản trong lập trình hướng đối
tượng. Bao gồm:

• Khái niệm đối tượng (object)

• Khái niệm đóng gói dữ liệu (encapsulation)

• Khái niệm kế thừa (inheritance)

• Khái niệm đa hình (polymorphism)

Đối tượng (Object)

Trong lập trình hướng đối tượng, đối tượng được coi là đơn vị cơ bản nhỏ nhất. Các dữ diệu và
cách xử lí chỉ là thành phần của đối tượng mà không được coi là thực thể. Một đối tượng chứa các
dữ liệu của riêng nó, đồng thời có các phương thức (hành động) thao tác trên các dữ liệu đó:

Đối tượng = dữ liệu + phương thức
Lớp (Class)

Khi có nhiều đối tượng giống nhau về mặt dữ liệu và phương thức, chúng được nhóm lại với nhau
và gọi chung là lớp:

• Lớp là sự trừu tượng hoá của đối tượng

• Đối tượng là một thể hiện của lớp.

Đóng gói dữ liệu (Encapsulation)

• Các dữ liệu được đóng gói vào trong đối tượng. Mỗi dữ liệu có một phạm vi truy nhập
riêng.

• Không thể truy nhập đến dữ liệu một cách tự do như lập trình cấu trúc

• Muốn truy nhập đến các dữ liệu đã được bảo vệ, phải thông qua các đối tượng, nghĩa là
phải sử dụng các phương thức mà đối tượng cung cấp mới có thể truy nhập đến dữ liệu
của đối tượng đó.

Tuy nhiên, vì C++ chỉ là ngôn ngữ lập trình nửa đối tượng, cho nên C++ vẫn cho phép định nghĩa
các biến dữ liệu và các hàm tự do, đây là kết quả kế thừa từ ngôn ngữ C, một ngôn ngữ lập trình
thuần cấu trúc.

Kế thừa (Inheritance)

Tính kế thừa của lập trình hướng đối tượng cho phép một lớp có thể kế thừa từ một số lớp đã tồn
tại. Khi đó, lớp mới có thể sử dụng dữ liệu và phương thức của các lớp cơ sở như là của mình.
Ngoài ra, lớp dẫn xuất còn có thể bổ sung thêm một số dữ liệu và phương thức. Ưu điểm của kế
thừa là khi thay đổi dữ liệu của một lớp, chỉ cần thay đổi các phương thức trong phạm vi lớp cơ sở
mà không cần thay đổi trong các lớp dẫn xuất.

Đa hình (Polymorphsim)

Đa hình là khái niệm luôn đi kèm với kế thừa. Do tính kế thừa, một lớp có thể sử dụng lại các
phương thức của lớp khác. Tuy nhiên, nếu cần thiết, lớp dẫn xuất cũng có thểđịnh nghĩa lại một
số phương thức của lớp cơ sở. Đó là sự nạp chồng phương thức trong kế thừa. Nhờ sự nạp chồng
phương thức này, ta chỉ cần gọi tên phương thức bị nạp chồng từđối tượng mà không cần quan
tâm đó là đối tượng của lớp nào. Chương trình sẽ tựđộng kiểm tra xem đối tượng là thuộc kiểu
lớp cơ sở hay thuộc lớp dẫn xuất, sau đó sẽ gọi phương thức tương ứng với lớp đó. Đó là tính đa
hình.

1.3.3 Lập trình hướng đối tượng trong C++

Vì C++ là một ngôn ngữ lập trình được mở rộng từ một ngôn ngữ lập trình cấu trúc C nên C++
được xem là ngôn ngữ lập trình nửa hướng đối tượng, nửa hướng cấu trúc.

Những đặc trưng hướng đối tượng của C++

• Cho phép định nghĩa lớp đối tượng.

• Cho phép đóng gói dữ liệu vào các lớp đối tượng. Cho phép định nghĩa phạm vi truy nhập
dữ liệu của lớp bằng các từ khoá phạm vi: public, protected, private.
• Cho phép kế thừa lớp với các kiểu kế thừa khác nhau tuỳ vào từ khoá dẫn xuất.

• Cho phép lớp dẫn xuất sử dụng các phương thức của lớp cơ sở (trong phạm vi quy định).

• Cho phép định nghĩa chồng phương thức trong lớp dẫn xuất.

Những hạn chế hướng đối tượng của C++

Những hạn chế này là do C++ được phát triển từ một ngôn ngữ lập trình thuần cấu trúc C.

• Cho phép định nghĩa và sử dụng các biến dữ liệu tự do.

• Cho phép định nghĩa và sử dụng các hàm tự do.

• Ngay cả khi dữ liệu được đóng gói vào lớp, dữ liệu vẫn có thể truy nhập trực tiếp như dữ
liệu tự do bởi các hàm bạn, lớp bạn (friend) trong C++.

TỔNG KẾT CHƯƠNG 1

Chương 1 đã trình bày tổng quan về các phương pháp lập trình hiện nay. Nội dung tập trung vào
ba phương pháp lập trình có liên quan trực tiếp đến ngôn ngữ lập trình C++:

• Lập trình tuyến tính

• Lập trình hướng cấu trúc

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

C++ là ngôn ngữ lập trình được mở rộng từ ngôn ngữ lập trình cấu trúc C. Do đó, C++ vừa có
những đặc trưng của lập trình cấu trúc, vừa có những đặc trưng của lập trình hướng đối tượng.


luongbv93
luongbv93
Admin

Tổng số bài gửi : 117
Points : 354
Reputation : 0
Join date : 18/11/2011
Age : 30
Đến từ : Hà Nội

https://diendanteenviet.forumvi.com

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết