Lập trình hướng đối tượng - Chương 1: Các khái niệm cơ bản trong Lập trình hướng đối tượng

1. Lịch sử phát triển của các ngôn ngữ lập

trình

2. Đối tượng và các khái niệm liên quan

3. Khái niệm thực hiện ẩn (hidden

implementation) trong LTHDT

4. Khái niệm tái sử dụng trong LTHDT

5. Khái niệm kế thừa trong LTHDT

6. Khái niệm đa hình trong lập trình hướng

đối tượng

pdf36 trang | Chuyên mục: C/C++ | Chia sẻ: tuando | Lượt xem: 489 | Lượt tải: 0download
Tóm tắt nội dung Lập trình hướng đối tượng - Chương 1: Các khái niệm cơ bản trong Lập trình hướng đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 tượng mới và
các tương tác giữa các đối tượng này với các đối
tượng đã có trong hệ thống.
Bước 5. Tái sử dụng đối tượng (Object reuse).
Đây là một trong những thử nghiệm quan trọng của
các đối tượng và lớp trong thiết kế phần mềm. Chúng
ta cần phải sử dụng lại các lớp và các đối tượng trong
phần mềm (thông qua tính kế thừa và tương tác giữa
các đối tượng)
H.Q. Thắng - C.T. Dũng BM CNPM 52
9. Phân tích và thiết kế hướng đối tượng
Một số đặc điểm cần lưu ý khi phát triển các
lớp
1. Chúng ta cần phân biệt rõ việc tạo ra lớp, sau đó mới
nghĩa tới việc phát triển và hoàn thiện lớp trong quá
trình giải quyết bài toán
2. Việc phát hiện ra các lớp cần thiết cho chương trình là
một trong những nhiệm vụ chính của thiết kế hệ thống, 
nếu chúng ta đã có những lớp này (trong một thư viện
lớp nào đó chẳng hạn) thì công việc sẽ dễ dàng hơn
3. Khi phân tích hay phát triển các lớp không nên tập
trung vào để biết tất cả về một lớp, chúng ta sẽ biết tất
cả các thuộc tính này khi phát triển hệ thống (learns as 
you go) 
27
H.Q. Thắng - C.T. Dũng BM CNPM 53
9. Phân tích và thiết kế hướng đối tượng
Một số đặc điểm cần lưu ý khi phát triển các
lớp (tiếp)
4. Khi tiến hành lập trình cần tuân thủ theo các thiết kế đã
làm. Không nên băn khoăn rằng chúng ta sẽ không sử
dụng phương pháp lập trình truyền thống và cảm thấy
choáng ngợp trước số lượng lớn các đối tượng.
5. Luôn luôn giữ nguyên tắc: mọi vấn đề cần giải quyết
theo phương án đơn giản nhất, không nên phức tạp
hóa. Sử dụng nguyên lý của Occam Razor: Lớp đơn
giản nhất bao giờ cũng là lớp tốt nhất, hãy bắt đầu
bằng những cái đơn giản và chúng ta sẽ kết thúc bằng
những hệ thống phức tạp
H.Q. Thắng - C.T. Dũng BM CNPM 54
10. Extreme programming
 Các tư tưởng của Extreme Programming
(XP) rất thú vị và rất cơ bản. XP chứa
đựng cả những quan điểm về phương
pháp và kỹ thuật lập trình và có rất nhiều
những chỉ dẫn ở trong đó. Một số những
chỉ dẫn mang tính chất xuyên suốt và có
thể trở thành các phương pháp lập trình. 
Trong XP hai tư tưởng quan trọng nhất
là: 
 Viết kiểm thử trước (write tests first)
 Lập trình theo cặp (pair programming)
28
H.Q. Thắng - C.T. Dũng BM CNPM 55
10. Extreme programming
 Viết kiểm thử trước
 Kiểm thử (testing) thông thường luôn được thực
hiện ở giai đoạn cuối cùng trong quá trình phát
triển phần mềm. 
 Trong XP quan điểm này được thay đổi hoàn toàn. 
Kiểm thử được coi trọng là một công việc hàng đầu, 
có trọng số quan trong ít nhất là bằng với lập trình
và trên thực tế trong XP quan niệm rằng chúng ta
phải viết kiểm thử trước khi chúng ta tiến hành lập
trình. Theo quan điểm này chúng ta phải đảm bảo
kiểm thử phải được thực hiện thành công tại mọi
thời điểm trong khi tích hợp chương trình.
H.Q. Thắng - C.T. Dũng BM CNPM 56
10. Extreme programming
Viết kiểm thử trước có hai hiệu ứng quan trọng:
 Thứ nhất: thúc đẩy việc xác định rõ ràng hơn giao diện
của các lớp. Quan điểm này của XP đã chỉ ra khi viết
các kiểm thử chúng ta đã chỉ ra rõ ràng hơn, đầy đủ
hơn giao diện của các lớp (ở đấy có thể sử dụng các
công cụ như các biểu đồ UML, các thẻ CRC, ...
 Thứ hai: Chúng ta có khả năng thực hiện kiểm thử mỗi
khi chúng ta compile phần mềm. Lịch sử phát triển của
các NNLT đã qua triển như thế: Assembly kiểm tra cú
pháp (syntax), trong lập trình hướng thủ tục đã thực
hiện kiểm tra các ngữ nghĩa (semantic) điều đó giúp
chúng ta loại bỏ lỗi. Các ngôn ngữ LTHDT kiểm tra
ngữ nghĩa của các phần mềm ở mức độ cao hơn nũa
và tiến tới có thể định nghĩa các trường hợp kiểm thử
để kiểm tra khi compile phần mềm.
29
H.Q. Thắng - C.T. Dũng BM CNPM 57
10. Extreme programming
 Lập trình theo cặp Pair programming
 Tư tưởng lập trình theo cặp phủ nhận các tư tưởng
cá nhân chủ nghĩa (individualism). 
 Trong tư tưởng lập trình theo cặp này công việc viết
mã được tổ chức theo hai người: một người thực
hiện lập trình và người kia thì suy nghĩ về nó, cách
tiến hành nó. Người suy nghĩ về chương trình có
thể nghĩ được rộng hơn và nhìn thấy xa hơn, chỉ
không chỉ gói gọn trong vấn đề hiện tại, còn người
viết mã thì quan tâm thực hiện những vấn đề hiện
tại để viết mã tốt.
 Khi mã code bị tắc đơn giản là họ có thể đổi chỗ
cho nhau và như thế có thể là một cách giải quyết
vấn đề tắc nghẽn của viết mã.
H.Q. Thắng - C.T. Dũng BM CNPM 58
11. Một số lý do để ngôn ngữ C++ thông dụng
 Một trong những nguyên nhân C++ trở thành phổ biên
là nó đã chuyển ngôn ngữ lập trình C thành ngôn ngữ
lập trình hướng đối tượng.
 C++ là ngôn ngữ kế thừa và mở rộng từ ngôn ngữ C, 
trên thực tế không đưa vào các mô hình lập trình mới. 
Tất cả các chương trình đã có sẵn của C sẽ chạy
được trong C++
 C++ có những đặc tính phát triển tốt hơn ngôn ngữ C:
 TRong C++ có đặc tính tham chiếu của các biến (references) 
cho phép quản lý địa chỉ của các biến hay lấy ra giá trị của các
biến ở các địa chỉ tương ứng.
 Quản lý tên hàm và biển đã được mở rông thông qua cơ chế
chồng hàm function overloading,
30
H.Q. Thắng - C.T. Dũng BM CNPM 59
11. Một số lý do để ngôn ngữ C++ thông dụng
 Tư tưởng phân vùng các biến namespaces 
cho phép quản lý các biến được tốt hơn.
 Tính hiệu quả
 Các phần mềm xây dựng trở nên dễ hiểu hơn
 Hiệu quả sử dụng của các thư viện
 Khả năng sử dụng lại mã thông qua templates
 Quản lý lỗi
 Cho phép xây dựng các phần mềm lớn hơn
H.Q. Thắng - C.T. Dũng BM CNPM 60
 Tính khả chuyển cao: "Viết một lần, chạy bất cứ đâu"
 Cơ bản cú pháp khá giống C++ 
 Độ an toàn cao:
 Trong Java, khái niệm con trỏ (pointer) được thay bằng tham 
chiếu đối tượng. Người lập trình không có quyền can thiệp 
trực tiếp lên các địa chỉ phần cứng.
 Hỗ trợ quản lý bộ nhớ. (Garbage collector)
 Bộ thư viện chất lượng tốt, đầy đủ và liên tục cập nhật
 Miễn phí - Ngôn ngữ của giới "nghiên cứu" 
 Tốc độ chấp nhận được (80% so với C++)
 Cho phép xây dựng các ứng dụng ở quy mô lớn 
(Enterprise features) – J2SEE 
JAVA
31
H.Q. Thắng - C.T. Dũng BM CNPM 61
13. Quá trình dịch một mã nguồn phần mềm
 Mọi ngôn ngữ lập trình đều được xây dựng theo một
cú pháp với các từ khoá dễ hiểu cho người sử dụng. 
Vì thế để chuyển từ những mã nguồn của ngôn ngữ
lập trình sang ngôn ngữ mã máy (machine 
instructions) cần tới chương trình dịch (translators). 
Thông thường chương trình dịch được chia làm hai
loại: thông dịch (interpreters) và biên dịch (compilers).
 Interpreters: Thông dịch dịch các mã nguồn thành các
công việc và máy tính (CPU) sẽ thực hiện ngay những
lệnh này.
Ưu điểm:
 Khả năng sửa lỗi tức thì (vì mã nguồn có sẵn khi gặp lỗi)
 Thích hợp cho những công cụ phát triển phần mềm nhanh
 Nhược điểm: Cần nhiều tài nguyên của máy tính
hơn
H.Q. Thắng - C.T. Dũng BM CNPM 62
13. Quá trình dịch một mã nguồn phần mềm
 Biên dịch dịch trực tiếp các mã nguồn thành các ngôn
ngữ mã máy. Kết quả là chúng ta thu được một tệp
chứa các mã máy. Thông thường quá trình biên dịch
thực hiện qua một số bước và thường phức tạp hơn
so với thông dịch. Một số biên dịch dịch các thư viện
thành các chương trình riêng biệt sau đó có một công
cụ liên kết (linker) liên kết những chương trình riêng
biệt này thành chương trình thực hiện được. Quá trình
này được gọi là biên dịch độc lập. Biên dịch độc lập
thể hiện nhiều ưu điểm:
 Cho phép khả năng tạo các thư viện
 Trợ giúp cho việc sửa và gỡ rối các lỗi (khi thực hiện biên dich
từng chương trình nhỏ)
32
H.Q. Thắng - C.T. Dũng BM CNPM 63
14. Các đặc điểm của quá trình biên dich
độc lập
 Các công cụ biên dịch tự động đóng vai trò rất
quan trọng trong quá trình phát triển các phần
mềm lớn.
 Thông thường chúng ta thường chia các phần
mềm lớn thành các thành phần nhỏ hơn. 
Trong C, C++, Java đấy là các hàm (function).
 Khi xây dựng hàm chúng ta chú ý tới các yếu
tố sau:
 Tên hàm
 Đối số của hàm
 Kiểu dữ liệu trả về của hàm
H.Q. Thắng - C.T. Dũng BM CNPM 64
14. Các đặc điểm của quá trình biên dich độc
lập
 Như thế việc đầu tiên là chúng ta phải khai báo và
định nghĩa các biến và các hàm.
Khai bao hàm (Function declaration syntax)
Trong C/C++ chúng ta có thể khai báo hàm như sau:
int func1(int,int);
Định nghĩa hàm (Function definitions
int func1(int length, int width) { .. }
Khai báo biến (Variable declaration syntax): int a;
Khai báo các thư viện sử dụng (Including 
headers)
33
H.Q. Thắng - C.T. Dũng BM CNPM 65
14. Các đặc điểm của quá trình biên dich độc lập
 C/C++ sử dụng các header file. Header file chứa
các giao diện (khai báo về các biến các hằng số
và các hàm sử dụng trong thự viện tương ứng. 
Thông thường các header file có phần mở rộng
của tên là .h (headerfile.h)
 Khi chúng ta muốn sử dụng thư viện nào thì gọi
tên thư viên đó bằng cách trong phần mềm của
mình chúng ta sẽ đưa vào từ khóa: #include
 Một số thư viện chuẩn thông dụng của C++ 
iostream.h cstdlib.h conio.h
H.Q. Thắng - C.T. Dũng BM CNPM 66
Với C++
34
H.Q. Thắng - C.T. Dũng BM CNPM 67
H.Q. Thắng - C.T. Dũng BM CNPM 68
Với Java
 Vừa biên dịch, vừa 
thông dịch
 Biên dịch từ mã nguồn 
 mã Bytecode (mã 
máy của máy ảo Virtual 
Machine)
 Thông dịch từng lệnh 
trong mã ByteCode 
mã lệnh máy trong máy 
tính chương trình được 
dịch.
35
H.Q. Thắng - C.T. Dũng BM CNPM 69
H.Q. Thắng - C.T. Dũng BM CNPM 70
15. Ví dụ, câu hỏi, bài tập
Các câu hỏi tuần 1:
1. Khái niệm đối tượng và các tính chất của đối
tượng
2. Các khái niệm liên quan: thực hiện ẩn, khởi tạo, 
giải phóng đối tượng
3. Phân tích thiết kế hướng đối tượng
4. Khái niệm UML, CRC 
5. Khái niệm Extreme programming
6. Quy trình dịch một mã nguồn phần mềm và các
khái niệm liên quan
36
H.Q. Thắng - C.T. Dũng BM CNPM 71
15. Ví dụ, câu hỏi, bài tập
Bài tập tuần 1:
(1) Làm quen với một công cụ lập trình
(C++, VC, Java, C#)
(2) Viết chương trình nhập mảng các số
nguyên, sắp xếp (theo các giải thuật
khác nhau) và tìm kiếm (theo các giải
thuật khác nhau) một số nhập vào từ bàn
phím và đếm xem số này xuất hiện bao
nhiêu lần trong mảng

File đính kèm:

  • pdflap_trinh_huong_doi_tuong_chuong_1_cac_khai_niem_co_ban_tron.pdf
Tài liệu liên quan