You are on page 1of 22

MSSV:

Họ Tên SV:
Lớp:

Đổi tên tập tin thành: A0x_AD01_HoTen_MSSV.docx


Ví dụ: A01_AD01_NguyenVanA_195050123.docx
A0x: x là lớp, AD01 là bài tập 01
Font: Times New Roman – Size: 13 – Line spacing: 1.5 – Aligmenen: Justify
Top – Bottom – Left – Right: 1’ /2.5 cm

Khái niệm phân tích thiết kế hệ thống thông tin


1. Trình bày giải thích chi tiết kèm ví dụ minh họa các giai đoạn của qui trình phát triển
phần mềm (SDLC) (4đ).
1. Thu thập và phân tích thông tin (Requirement Analysis)
Giai đoạn này là đi tìm câu trả lời cho câu hỏi “Các vấn đề hiện tại là gì?”.
Giai đoại đầu tiên của SDLC là về việc quyết định những gì bạn sẽ phát triển.  Có thể nói
giai đoạn này là quan trọng bật nhất của cả quy trình SDLC. Nếu bạn đang phát triển
cho khách hàng, giai đoạn này có thể sẽ bao gồm các cuộc họp để thảo luận về nhu cầu,
mục tiêu và kỳ vọng của họ. Nếu bạn đang phát triển một phần mềm nội bộ, các việc có
thể bao gồm phân tích thị trường hoặc phân tích đối thủ cạnh tranh, phỏng vấn khách
hàng và kiểm tra các mục tiêu của công ty bạn. Ở cấp cao, bạn cần biết những vấn đề bạn
đang cố gắng giải quyết và cách giải quyết.
Kết quả của giai đoạn Requirement Analysis:
Kết quả của giai đoạn này là tài liệu đặc tả yêu cầu phần mềm (Software Requirements
Specification hay SRS), đóng vai trò là điểm khởi đầu cho giai đoạn phát triển tiếp theo.
Điều quan trọng cần lưu ý là giai đoạn đặc tả và phân tích yêu cầu chỉ tập trung vào
những gì hệ thống phần mềm nên làm chứ không phải vào cách nó nên được thực
hiện; nghĩa là, các chi tiết triển khai không được phép ảnh hưởng đến giai đoạn này. Yêu

1
cầu phần mềm có thể được phân thành hai loại: yêu cầu chức năng và yêu cầu phi chức
năng, và SRS cần bao gồm cả hai loại yêu cầu này.

2. Lập kế hoạch (Planning hay Defining)


Giai đoạn này là đi tìm câu trả lời cho câu hỏi “Chúng ta muốn gì? “
Thông thường, bạn thực hiện quá trình lập kế hoạch sau khi phân tích yêu cầu sau khi bạn
đã có đầy đủ dữ liệu và chọn những gì cần phát triển.  Trong giai đoạn SDLC thứ hai này
chúng ta cần xác định một số yếu tố:

 Ai sẽ lãnh đạo dự án

 Kết quả đầu ra hoặc triển khai dự kiến

 Số lượng các developer cần thiết cho dự án

 Dự án sẽ mất khoảng bao nhiêu thời gian

 Ngân sách cần thiết cho dự án

 Mọi cân nhắc về dự án cụ thể khác

Kết quả của giai đoạn lập kế hoạch:


Kết quả đầu ra của giai đoạn lập kế hoạch bao gồm: kế hoạch dự án, thời gian thực hiện
chi tiết, ước tính chi phí và các yêu cầu mua sắm. Các tài liệu trong giai đoạn này thường
bao gồm:

 Project Management Plan

 Project Charter (điều lệ) document

3. Thiết kế (Designing)
Giai đoạn này chúng ta đi tìm câu trả lời cho câu hỏi “Làm thế nào chúng xây được
những gì chúng ta muốn? “
Giai đoạn thứ ba của SDLC tập trung vào việc thiết kế phần mềm mà bạn sẽ phát triển,
bao gồm:

2
 Kiến trúc: Bạn sử dụng ngôn ngữ lập trình nào để xây dựng sản phẩm của mình? Các
phương pháp tốt nhất trong ngành mà bạn đang xây dựng là gì? Cũng bao gồm các câu
hỏi liên quan đến việc sử dụng các mẫu.
 Giao diện người dùng: Bạn mong đợi người dùng tiềm năng sẽ tương tác với sản phẩm
như thế nào? Làm thế nào bạn sẽ làm cho điều đó dễ dàng hơn cho họ?
 Nền tảng: Sản phẩm của bạn sẽ chạy trên nền tảng gì? Trong giai đoạn này, một nhà phát
triển trò chơi sẽ tự hỏi họ sẽ xuất bản bảng điều khiển nào, trong khi một nhà phát triển
thiết bị di động sẽ quyết định xem họ sẽ tạo ứng dụng cho Apple, Android hay cả hai.
 Lập trình: Bạn đã tìm ra ngôn ngữ lập trình, nhưng bây giờ bạn sẽ làm thế nào để vượt
qua những thách thức lập trình trong quá trình phát triển?
 Liên kết: Sản phẩm của bạn sẽ phải giao tiếp với những nội dung nào? Một máy chủ
trung tâm? Các ứng dụng khác? Làm thế nào điều này sẽ xảy ra?
 Bảo mật: Bạn sẽ bảo vệ sản phẩm của mình như thế nào trước những nguy cơ tiềm ẩn?
Bạn có phải tuân theo các yêu cầu bảo mật nhất định không? Bạn có được truy cập vào
thông tin người dùng nhạy cảm cần được bảo vệ không?
Việc thiết kế này gần giống như việc tổng hợp các phương án kiến trúc và thiết kế nội
thất của một ngôi nhà mới trước khi bạn xây dựng nó.

Kết quả của giai đoạn thiết kế:


Vào cuối giai đoạn này, tài liệu thiết kế (Software Design Document – SDD)  được
hoàn thành. SDD sẽ được xem xét bởi tất cả các bên liên quan (stackholders) và dựa trên
các thông số khác nhau như đánh giá rủi ro, tính lâu dài của phầm mềm, các mô-đun thiết
kế, hạn chế về ngân sách và thời gian, phương pháp thiết kế tốt nhất được lựa chọn cho
sản phẩm…

3
Ví dụ về nội dung tài liệu SDD
 

4. Phát triển (Development)


Đã đến lúc “Tạo những gì chúng ta muốn”. 
Giai đoạn phát triển là giai đoạn mà cácdeveloper thực sự viết code và xây dựng ứng
dụng theo các tài liệu thiết kế và các thông số kỹ thuật đã vạch ra, sử dụng ngôn ngữ lập
trình và framework đã được chọn.   Các developer sẽ tuân theo mọi nguyên tắc viết code
của công ty và sử dụng các công cụ khác nhau như trình biên dịch, trình gỡ lỗi và trình
thông dịch.  Các nhiệm vụ được chia thành các đơn vị hoặc mô-đun và được phân bổ cho
các nhà phát triển cụ thể.

4
Kết quả của giai đoạn phát triển: các chứng năng của phần mềm mà chúng ta cần xây
dựng
5. Kiểm thử (Testing)
Liệu “Chúng ta đã đạt được những gì chúng ta muốn chưa? “
Khi code hoàn tất, quá trình kiểm tra bắt đầu và các mô-đun được đánh giá và kiểm tra để
tránh bất kỳ lỗi nào. Phần mềm đã xây dựng được xem xét toàn diện trong quá trình này
và bất kỳ vấn đề nào được tìm thấy đều được giao cho các developers sửa chữa, thay đổi.

Kiểm tra lại và kiểm tra hồi quy được tiến hành cho đến khi phần mềm đúng như kế
hoạch của người sử dụng. Tester thường tham khảo tài liệu SRS để đảm bảo phần mềm
phù hợp với tiêu chuẩn của khách hàng hay yêu cầu.

Kết quả của giai đoạn kiểm thử:


 Sản phẩm hoàn thiện hơn sau các lỗi được chỉnh sửa hoặc các yêu cầu còn thiếu được
phát triển

 Testing report

 User Acceptant Test

6. Triển khai (Deployment)


“Hãy bắt đầu sử dụng những gì chúng ta đã xây dựng”
Ở giai đoạn này, mục tiêu là triển khai phần mềm tới môi trường production để người
dùng có thể bắt đầu sử dụng. Tuy nhiên, nhiều công ty chọn triển khai phần mềm qua các
môi trường triển khai khác nhau như môi trường thử nghiệm (testing) hoặc môi trường
dàn dựng (staging).

Điều này cho phép bất kỳ bên liên quan nào có thể trải nghiệm phần mềm một cách an
toàn trước khi đưa ra sử dụng chính thức. Bên cạnh đó, điều này cho phép mọi sai sót
cuối cùng được phát hiện và chỉnh sửa trước khi phát hành.

Kết quả của giai đoạn triển khai:

5
Giai đoạn Ttriển khai hoàn thành khi phần mềm đã được đưa vào hoạt động thành công
và thỏa mãn tất cả các yêu cầu kinh doanh và kỹ thuật thông qua việc xem xét và ký tên
của các bên liên quan trong  Implementation Report (báo cáo triển khai),  và Maintenance
Manual (Sổ tay Bảo trì) đã được giao cho mhóm bảo trì phần mềm, Training Manual (tài
liệu đào tạo) đã được chuyển cho trainer / user và Tài liệu hướng dẫn sử dụng đã được
chuyển đến người sử dụng.

7. Bảo trì
“Hãy giữ cho sản phẩm của chúng ta ổn định”
Sau khi triển khai một sản phẩm trên môi trường production, việc bảo trì sản phẩm sẽ bắt
đầu. Trong giai đoạn này bất kỳ vấn đề nào xuất hiện cần được khắc phục hoặc bất kỳ cải
tiến nào cần thực hiện sẽ được đánh giá và triển khai. Trong một số trường hợp, quy trình
SDLC có thể lặp lại từ đầu (phát triển chức năng mới, thay đổi lớn trong phần mềm..)

Kết quả của giai đoạn bảo trì:


Một số kết quả của giai đoạn bảo trì là hệ thống hoạt động một cách hiệu quả nhất, phần
mềm được cập nhật khi cần thiết và được nâng cấp khi có yêu cầu.

Tham khảo:
https://itguru.vn/blog/cac-giai-doan-va-phuong-phap-trong-vong-doi-phat-trien-phan-
mem-sdlc/

2. Tìm hiểu và trình bày kèm ví dụ minh học các nguyên lý, đặc trưng của phương pháp
Agile cùng khái niệm Scrum (4đ).

Các nguyên lý được liệt kê sau đây:


1. Ưu tiên cao nhất của chúng tôi là thỏa mãn khách hàng thông qua việc chuyển
giao sớm và liên tục các phần mềm có giá trị.
2. Chào đón việc thay đổi yêu cầu, thậm chí rất muộn trong quá trình phát triển. Các
quy trình linh hoạt tận dụng sự thay đổi trong các lợi thế cạnh tranh của khách hàng.

6
3. Thường xuyên chuyển giao phần mềm chạy tốt tới khách hàng, từ vài tuần đến vài
tháng, ưu tiên cho các khoảng thời gian ngắn hơn.
4. Nhà kinh doanh và nhà phát triển phải làm việc cùng nhau hàng ngày trong suốt
dự án.
5. Xây dựng các dự án xung quanh những cá nhân có động lực. Cung cấp cho họ môi
trường và sự hỗ trợ cần thiết, và tin tưởng họ để hoàn thành công việc.
6. Phương pháp hiệu quả nhất để truyền đạt thông tin tới nhóm phát triển trong nội
bộ nhóm phát triển là hội thoại trực tiếp.
7. Phần mềm chạy tốt là thước đo chính của tiến độ.
8. Các quy trình linh hoạt thúc đẩy phát triển bền vững. Các nhà tài trợ, nhà phát
triển và người dùng có thể duy trì một nhịp độ liên tục không giới hạn.
9. Liên tục quan tâm đến các kỹ thuật và thiết kế tốt để gia tăng sự linh hoạt.
10. Sự đơn giản – nghệ thuật tối đa hóa lượng công việc chưa xong – là căn
bản.
11. Các kiến trúc tốt nhất, yêu cầu tốt nhất và thiết kế tốt nhất sẽ được làm ra
bởi các nhóm tự tổ chức.
12. Nhóm phát triển sẽ thường xuyên suy nghĩ về việc làm sao để trở nên hiệu
quả hơn, sau đó họ sẽ điều chỉnh và thay đổi các hành vi của mình cho phù hợp. 

Đặc trưng của Agile


 Tính lặp (Iterative): Trong khi dự án thực hiện, các phân đoạn sẽ được lặp đi lặp
lại (Interation hoặc Sprint). Các phân đoạn này diễn ra trong thời gian ngắn (thường từ
một đến bốn tuần). Trong mỗi phân đoạn này, nhóm phát triển thực hiện đầy đủ các
công việc cần thiết như lập kế hoạch, phân tích yêu cầu, thiết kế, triển khai và kiểm
thử để có được phần nhỏ của sản phẩm. Các phương pháp Agile sẽ không lập kế
hoạch dài hạn, thay vào đó sẽ phân chia thành những quá trình lập kế hoạch nhỏ, đơn
giản và gọn nhẹ.
 Tính tăng trưởng (Incremental): Cuối mỗi phân đoạn (Sprint), nhóm phát triển
thường cho ra các phần nhỏ của sản phẩm cuối cùng. Các phần nhỏ này thường đáp

7
ứng được các yêu cầu, có khả năng chạy tốt do đã được kiểm thử cẩn thận và có thể sử
dụng được ngay. Theo thời gian, các phân đoạn sẽ tiếp nối nhau và tích lũy dần tới khi
toàn bộ yêu cầu của khách hàng được thỏa mãn. Khác với mô hình truyền thống
Waterfall – vốn chỉ cho phép nhìn thấy sản phẩm tới khi gần hoàn thành dự án, sản
phẩm trong dự án Agile sẽ được phát triển lớn dần theo thời gian, tăng trưởng cho tới
khi đạt được trạng thái đủ để phát hành.
 Vòng phản hồi ngắn và thích ứng thường xuyên: Do các phân đoạn chỉ kéo dài
trong một khoảng thời gian ngắn, việc lập kế hoạch hay có những điều chỉnh, thay đổi
trong quá trình phát triển đều có thể đáp ứng nhanh để phù hợp. Ngoài ra, việc khách
hàng được tham gia vào các quy trình phát triển cũng sẽ giúp ích cho việc đáp ứng và
thay đổi ngay những yêu cầu khác từ phía khách hàng. 
 Giao tiếp thường xuyên và hiệu quả: Trong các nhóm Agile luôn đề cao việc
giao tiếp thường xuyên và trực diện hơn là việc trao đổi qua tài liệu, giấy tờ. Các
nhóm phát triển cũng thường chỉ ở quy mô nhỏ (đối với Scrum là từ 3-9 người), từ đó
sẽ đơn giản hóa được quá trình giao tiếp và thúc đẩy hợp tác hiệu quả hơn. 
 Hướng chất lượng: Đảm bảo chất lượng tuyệt đỉnh luôn là một yêu cầu quan
trọng trong triết lý Agile. Rất nhiều kỹ thuật và công cụ được sử dụng để hướng đến
việc nâng cao chất lượng sản phẩm, chẳng hạn như: Tích hợp Liên tục, Kiểm thử Đơn
vị Tự động, Lập trình cặp, Phát triển Hướng Kiểm thử, Mẫu Thiết kế, Tái cấu trúc mã
nguồn, v.v..
 Phát triển dựa trên giá trị: Một trong những nguyên tắc cơ bản của Agile chính
là “phần mềm chạy tốt là thước đo chính của tiến độ”. Nguyên tắc này giúp nhóm
luôn cố gắng để đạt được kết quả cuối và có thể bỏ đi những công việc dư thừa không
trực tiếp đem lại giá trị cho sản phẩm. Theo cách tiếp cận truyền thống, phạm vi công
việc sẽ cố định, thời gian và chi phí sẽ thay đổi để hoàn thành được phạm vi công
việc. Theo cách tiếp cận của các phương pháp Agile, thời gian và chi phí sẽ là những
phần cố định, khi đó các nhóm Agile luôn cộng tác trực tiếp và thường xuyên với
khách hàng để liên tục ưu tiên những hạng mục tạo ra nhiều giá trị nhất. Nguyên tắc
này giúp nhóm dám loại bỏ đi các công việc dư thừa không trực tiếp mang lại giá trị

8
cho sản phẩm và rút ngắn thời gian để đi đến sản phẩm cuối cùng.Nhờ đó, các dự án
Agile luôn gia tăng được sự hài lòng của khách hàng và cho ra những sản phẩm tối ưu
nhất.

Khái niệm Scrum


Scrum là một khung làm việc để phát triển bền vững các sản phẩm phức tạp'. Có thể
hiểu đây là khung tổ chức công việc tổng quát hướng đến phát triển các sản phẩm
phức tạp, chủ yếu là phần mềm. Tuy vậy, Scrum có thể được dùng như là nền tảng tổ
chức các công việc khác nhau, từ quản trị dự án linh hoạt nói chung, đến phát triển sản
phẩm, thực hiện các chiến dịch marketing, tổ chức dạy học, sản xuất ô tô module hóa
hoặc những công việc cá nhân khác. Hiện nay, định nghĩa Scrum được ghi trong tài
liệu Scrum Guide và được cập nhật thường xuyên bởi chính các tác giả
tại ScrumGuides.
Cần lưu ý rằng Scrum là một khung làm việc (framework) chứ không phải một
phương pháp (method) cụ thể. Khi vận dụng, Scrum cung cấp các nền tảng cơ bản, kết
hợp với các phương pháp hay biện pháp thực hành khác để phát huy tác dụng.
Scrum là một quy trình phát triển phần mềm theo phương pháp Agile. Chính vì
thế, Scrum tuân thủ các nguyên tắc của Agile Manifesto.

Tuy nhiên, Agile và Scrum không phải là một. Hãy nhớ lại, Agile là gì? Agile là một
phương pháp, bao gồm những giá trị cốt lõi và nguyên tắc nhất định còn Scrum là
quy trình “hiện thực hoá” những giá trị và nguyên tắc của Agile.

Vai trò Scrum


Trong Scrum, đội ngũ tham gia phát triển phần mềm được phân chia ra ba vai trò với
trách nhiệm rõ ràng để đảm bảo tối ưu hóa các công việc đặc thù. Ba vai trò này bao
gồm: Product Owner(chủ sản phẩm), Scrum Master và Development Team (Đội sản xuất
hay Nhóm Phát triển).

9
 Product Owner (chủ sản phẩm): Là người chịu trách nhiệm về sự thành công
của dự án, người định nghĩa các yêu cầu và đánh giá cuối cùng đầu ra của các nhà
phát triển phần mềm.
 Scrum Master:    Là người có hiểu biết sâu sắc về Scrum và đảm bảo nhóm có
thể làm việc hiệu quả với Scrum.
 Development Team (Đội sản xuất, hay Nhóm phát triển) Một nhóm liên chức
năng (cross-functional) tự quản lý để tiến hành chuyển đổi các yêu cầu được tổ chức
trong Product Backlog thành chức năng của hệ thống.
Khung làm việc Scrum có gì?
Để có thể dùng Scrum, chúng ta cần hiểu rõ và vận dụng đúng các thành tố tạo nên
Scrum bao gồm các giá trị cốt lõi (còn gọi là “ba chân”, hay ba trụ cột của Scrum),
các vai trò, các sự kiện, và các công cụ (artifacts) đặc thù của Scrum.

Giá trị cốt lỗi Scrum

Scrum là một phương pháp linh hoạt (agile), vì thế nó tuân thủ các nguyên tắc của Tuyên
ngôn Agile (Manifesto for Agile Software Development). Ngoài ra Scrum hoạt động dựa
trên ba giá trị cốt lõi, còn gọi là Ba chân của Scrum bao gồm Minh bạch, Thanh tra và
Thích nghi.

 Minh bạch (transparency): Trong Scrum, tính minh bạch được đề cao như là giá
trị cốt lõi cơ bản nhất. Muốn thành công với Scrum, thông tin liên quan tới quá trình
phát triển phải minh bạch và thông suốt. Các thông tin đó có thể là: tầm nhìn (vision)
về sản phẩm, yêu cầu khách hàng, tiến độ công việc, các khúc mắc và rào cản v.v. Từ
đó mọi người ở các vai trò các nhau có đủ thông tin cần thiết để tiến hành các quyết
định có giá trị để nâng cao hiệu quả công việc. Các công cụ và cuộc họp trong Scrum
luôn đảm bảo thông tin được minh bạch cho các bên.
 Thanh tra (inspection): Công tác thanh tra liên tục các hoạt động trong Scrum
đảm bảo cho việc phát lộ các vấn đề cũng như giải pháp để thông tin đa dạng và hữu

10
ích đến được với các bên tham gia dự án. Truy xét kĩ càng và liên tục là cơ chế khởi
đầu cho việc thích nghi và các cải tiến liên tục trong Scrum.
 Thích nghi (adaptation): Scrum rất linh hoạt như các phương pháp phát triển linh
hoạt (agile software development) khác. Nhờ đó nó mang lại tính thích nghi rất cao.
Dựa trên các thông tin minh bạch hóa từ các quá trình thanh tra và làm việc, Scrum có
thể phản hồi lại các thay đổi một cách tích cực, nhờ đó mang lại thành công cho dự
án.

Quy trình Scrum vận hành

Mô hình quy trình Scrum chi tiết

 Product Owner tạo ra Product Backlog chứa các yêu cầu của dự án với các
hạng mục được sắp theo thứ tự ưu tiên.
 Đội sản xuất sẽ thực hiện việc hiện thực hóa dần các yêu cầu của Product
Owner với sự lặp đi lặp lại các giai đoạn nước rút từ 1 đến 4 tuần làm việc (gọi là
Sprint). Đầu vào là các hạng mục trong Product Backlog, đầu ra là các gói phần
mềm hoàn chỉnh có thể chuyển giao được (Potentially Shippable Product
Increment).
 Trước khi cả nhóm cùng đua nước rút trong Sprint, đội sản xuất cùng họp
với Product Owner để lập kế hoạch cho từng Sprint. Kết quả của buổi lập kế
hoạch (theo cách làm của Scrum) là Sprint Backlog chứa các công việc cần làm
trong suốt một Sprint.

11
 Trong suốt quá trình phát triển, nhóm sẽ phải cập nhật Sprint Backlog  và
thực hiện công việc họp hằng ngày (Daily Scrum) để chia sẻ tiến độ công việc
cũng như các vướng mắc trong quá trình làm việc cùng nhau. Nhóm được trao
quyền để tự quản lí và tổ chức lấy công việc của mình để hoàn thành công việc
trong Sprint.
 Khi kết thúc Sprint, nhóm tạo ra các gói phần mềm có chức năng hoàn chỉnh,
sẵn sàng chuyển giao (shippable) cho khác hàng. Buổi họp Sơ kết Sprint
(Sprint Review) ở cuối Sprint sẽ giúp khách hàng thấy được nhóm đã có thể
chuyển giao những gì, còn những gì phải làm hoặc còn gì phải thay đổi hay cải
tiến.
 Sau khi kết thúc việc đánh giá Sprint, Scrum Master và nhóm cùng tổ chức
họp Cải tiến Sprint (Sprint Retrospective) để tìm kiếm các cải tiến trước khi
Sprint tiếp theo bắt đầu, điều này sẽ giúp nhóm liên tục học hỏi và trưởng thành
qua từng Sprint.

Tham khảo:
https://hocvienagile.com/scrum-la-gi/
https://itviec.com/blog/agile-la-gi-scrum-la-gi/?
utm_source=google&utm_medium=display&utm_campaign=hcm_performancemax&
gclid=CjwKCAjwsfuYBhAZEiwA5a6CDO3Ez5zEB78oR2mYvyp3xVzm1_jz_6_IH
5uptu6awaFEwJp7EZm_IxoCWbUQAvD_BwE

3. So sánh 2 cách tiếp cận: cấu trúc – hướng đối tượng kèm ví dụ minh họa (2đ).
1.1. Lập trình hướng đối tượng 

Lập trình hướng đối tượng (OOP) là kỹ thuật lập trình dựa trên “công nghệ đối tượng”,
tạo ra các đối tượng trong code trừu tượng hóa các đối tượng thực tế trong thế giới thực.

12
Đối tượng trong OOP có thuộc tính và phương thức. Chúng có thể tương tác qua lại lẫn
nhau.

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


OOP có 4 tính chất: 

 Encapsulation – tính đóng gói: các phương thức và dữ liệu có mối quan hệ với
nhau được lưu vào một lớp để thuận tiện cho việc quản lý, sử dụng. Chỉ có phương
thức nội tại của chính đối tượng mới có thể thay đổi trạng thái nội tại của nó.
 Abstraction – tính trừu tượng: chỉ tập trung vào những thuộc tính và phương
thức cần thiết cho việc giải quyết vấn đề trong lập trình và bỏ qua các thông tin
không quan trọng. 
 Inheritance – tính kế thừa: các đối tượng “con” có thể thừa hưởng các đặc tính
có sẵn từ đối tượng “cha” mà không cần định nghĩa lại (tùy theo ngôn ngữ lập
trình).
 Polymorphism – tính đa hình: các đối tượng không cùng một lớp, khi tiếp nhận
cùng một thông điệp thì sẽ phản hồi theo những cách khác nhau.    

13
 Ví dụ về bài toán tìm độ dài lớn nhất đi qua 2 điểm
 Trong bài toán này ta gặp 1 thực thể là dãy điểm. Các thành phần của lớp
dãy điểm bao gồm: Biến nguyên n là số điểm của dãy, Con trỏ x kiểu thực trỏ
đến vùng nhớ chứa dãy hoành độ, Con trỏ y kiểu thực trỏ đến vùng nhứ chứa
dãy tung độ

Các phương thức cần đưa vào theo yêu cầu bài toán bao gồm
- Nhập toạ độ một điểm
- Tính độ dài đoạn thẳng đi qua 2 điểm.

Dưới đây là chương trình viết theo thiết kế hướng đối tượng. Để thưc hiện chương
trình này nhớ đặt tên tệp là CPP, khi viết trong Turbo C++ 3.0 thì đuôi của tệp
được ghi mặc định là CPP. Trong chương trình ta thấy thêm một điều mới là: Các
khai báo biến,mảng có thể viét bất kì chỗ nào trong chương trình miễn là khai báo
trước khi sử dụng.
Làm lại bài toán ở trên:

 HƯỚNG ĐỐI TƯỢNG

 #include<stdio.h>
#include<conio.h>
#include<math.h>
#include<alloc.h>
class daydiem
{
      public:
      int n;
      float *x,*y;
      float do_dai(int i, int j);
      {

14
            return sqrt(pow(x-x[j],2)+pow(y-y[j],2));
      }
      void nhapsl(void);
};
void daydiem::nhapsl(void)
{
      int i;
      printf(“n So diem N= “);scanf(“%d”,&n);
      x=(float*)malloc((n+1)*sizeof(float));
      y=(float*)malloc((n+1)*sixeof(float));
      for(i=1;i<=n;i++)
      {
            printf(“nn nhap toa do x,y cua diem thu %d: “,i);
            scanf(“%f %f”,&x,&y);
      }
}
void main()
{
      daydiem p;
      p.nhapsl();
      int n,i,j,imax,jmax;
      float d,dmax;
      n=p.n;
      dmax=p.do_dai(1,2);imax=1;jmax=2;
      for(i=i;i<=n-1;i++)
      for(j=i+1;j<=n;j++)
      {
            d=p.do_dai(i,j);
            if(d>dmax)

15
            {
            dmax=d;
            imax=i;
            jmax=j;
      }
      printf(“n Doan thang lon nhat co do dai bang: %0.2f”,dmax);
      printf(“n di qua 2 diem co chi so la %d va %d”,imax,jmax);
      getch();
}

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

Lập trình hướng cấu trúc (POP) là kỹ thuật lập trình chia nhỏ một chương trình lớn thành
các chương trình con (còn được gọi là các hàm). Mỗi hàm sẽ đảm nhiệm một chức năng
khác nhau trong hệ thống. Quá trình phân nhỏ sẽ được thực hiện cho đến khi ra được các
hàm đơn giản nhất. Mục đích của việc này là để đơn giản hóa cấu trúc của chương trình,
thuận tiện cho việc kiểm tra, sửa đổi và thực thi một cách hiệu quả. 

16
Lập trình hướng cấu trúc
POP có đặc điểm: 

 Chỉ tập trung vào việc phát triển các hàm, ít chú trọng đến dữ liệu
 Dữ liệu của hệ thống di chuyển từ hàm này qua hàm khác, được dùng chung giữa
các hàm. 
 Tuân theo hình thức tiếp cận top-down khi thiết kế chương trình 
 Dùng con trỏ hoặc biến toàn cục để liên kết các hàm với nhau

Ví dụ: Viết chương trình nhập toạ độ (x,y) của một dãy các điểm,sau đó tìm một
cặp điểm cách xa nhau nhất.
Theo tư tưởng của lập trình cấu trúc có thể tổ chức chương trình như sau:

-Sử dụng 2 mảng số thực toàn bộ x và y để chứa tọa bộ dãy điểm


-Xây dựng 2 hàm:

17
+) Hàm nhapsl để nhập toạ đô n điểm, hàm này có 1 đối là biến nguyên n điểm
và được khai báo như sau:
void nhapsl(int n);
+) Hàm do_dai dung để tính độ dài đoạn thẳng đi qua 2 điểm có toạ độ là i và j
và đươc khai báo như sau:
void do_dai(int i,int j);

Tư tưởng thuật toán:


- Gán giá trị của dmax cho do_dai(điểm thứ nhất, điểm thứ 2)
- Tính độ dài từng cặp điểm
- Nếu độ dài nào lớn hơn thì gán giá trị đó cho dmax đồng thời đọc vị trí của
cặp điểm đó.

Chương trình thực hiện bài toán trên được viết như sau:
 HƯỚNG CẤU TRÚC

 #include<stdio.h>
#include<conio.h>
#include<math.h>
float x[100],y[100];
float do_dai(int i,int j);
{
      return sqrt(pow(x-x[j],2)+pow(y-y[j],2));
}
void nhapsl(int n)
{
      int i;
      for(i=1;i<=n;i++)
      {
            printf(n Nhap toa do cua diem thu %d”,i);

18
            scanf(“%f %f”,&x&y);
      }
}
void main()
{
      int n,i,j,imax,jmax;
      float d,dmax;
      printf(“n So diem: “); scanf(“%d”,&n);
      nhapsl(n);
      dmax=do_dai(1,2); imax=1;jmax=2;
      for(i=1;i<=n;i++)
              for(j=i+1;j<=n;j++)
              {
                      d=do_dai(i,j);
                      if(d>dmax)
                      {
                                dmax=d;
                                imax=i;
                                jmax=j;
                      }
              }
      printf(“nn doan thang lon nhat co do dai bang:%0.2f”,dmax);
      printf(“nn di qua 2 diem co chi so la %d va %d “,imax,jmax);
      getch();

}  

19
2. So sánh lập trình hướng đối tượng và lập trình hướng cấu trúc
Có rất nhiều điểm khác biệt giữa lập trình hướng đối tượng và lập trình hướng cấu trúc
mà bạn nên quan tâm như: 

Trọng tâm

OOP chú ý vào dữ liệu hơn là thuật toán. POP chú ý đến việc xây dựng các hàm và thuật
toán hơn là dữ liệu.  

Sự phân chia

OOP chia nhỏ chương trình thành các đối tượng. POP chia nhỏ chương trình thành các
hàm con. 

Chế độ truy cập

Các từ khóa phạm vi truy cập trong OOP được chia thành Public, Private, Protected và
Default. POP không có thành phần này. 

Hướng tiếp cận khi thiết kế chương trình

OOP tiếp cận từ dưới lên. POP tiếp cận từ trên xuống.

Quá trình thực thi

OOP cho phép các chức năng chạy cùng một lúc. POP cho phép các hàm và chức năng
chạy lần lượt. 

Truy cập dữ liệu

OOP hạn chế truy cập dữ liệu giữa các đối tượng. POP cho phép dữ liệu tự do di chuyển
trong hệ thống và các hàm có thể chia sẻ dữ liệu cho nhau. 

Bảo mật

20
OOP ẩn dữ liệu trong chế độ Public, Protected và Private nên có bảo mật cao. POP không
có chế độ ẩn dữ liệu, độ an toàn thấp. 

Thêm mới dữ liệu

Hoạt động này có thể được thực hiện dễ dàng với các đối tượng trong OOP, còn POP thì
khó hơn. 

Nạp chồng/Đa hình

OOP hỗ trợ nạp chồng các hàm, hàm tạo và toán tử còn POP thì không. 

Ứng dụng

OOP có thể áp dụng trong xây dựng các chương trình có độ phức tạp cao. POP chỉ nên
được dùng với chương trình đơn giản. 

Sự ra đời của phương pháp OOP đã khắc phục được nhược điểm của kỹ thuật  POP
truyền thống, giúp ích cho lập trình viên trong quá trình xây dựng các chương trình. Nếu
bạn muốn tìm hiểu thông tin về so sánh lập trình hướng đối tượng và lập trình hướng
cấu trúc thì đây chính là bài viết dành cho bạn. 

  

Tham khảo:

21
https://vn.got-it.ai/blog/so-sanh-lap-trinh-huong-doi-tuong-va-lap-trinh-huong-cau-
truc
http://blog.vnaking.com/hoc-tap/c/struct-oop

HẾT

22

You might also like