TỔNG QUAN VỀ PHƯƠNG PHÁP LUẬN LẬP TRÌNH
Đặt vấn đề
Mặc dù các nhà khoa học đã nỗ lực để xây dựng một nền tảng khoa học cho lập trình, nhưng phương pháp giảng dạy chủ yếu vẫn mang tính thủ công.
+ Nó thường được dạy theo ngữ cảnh của một (hoặc một vài) ngôn ngữ lập trình
+ Có sự mập mờ giữa các công cụ, các khái niệm và các cách khác nhau về quan điểm lập trình/phương pháp lập trình
Dạy lập trình giống như việc xây dựng cầu, nơi một số người chỉ tập trung vào cầu gỗ, trong khi người khác chỉ chú trọng vào cầu sắt, mà không xem xét việc kết hợp giữa hai chất liệu này Điều này dẫn đến một chương trình đào tạo thiếu tính toàn diện và bị hạn chế bởi các yếu tố kỹ thuật như công cụ và ngôn ngữ lập trình.
Khoa học cung cấp cho chúng ta sự hiểu biết sâu sắc về các vấn đề, từ đó giúp chúng ta có khả năng dự đoán và khái quát hóa Trong lĩnh vực thiết kế, khoa học cho phép các nhà thiết kế tạo ra mọi loại cầu bằng nhiều chất liệu khác nhau như sắt, gỗ, hoặc sự kết hợp của cả hai, dựa trên những khái niệm thiết kế nhất định.
+ và các luật (Laws) mà chúng tuân theo.
Trong khoa học lập trình, việc thiết kế chương trình cần dựa trên các khái niệm chung về lập trình Lập trình có thể được coi là hoạt động kết nối giữa việc đặc tả hệ thống và thực thi chương trình theo bản đặc tả Do đó, lập trình bao gồm hai bước chính.
+ Thiết kế kiến trúc chương trình và các trừu tượng
+ Mã hóa bản thiết kế, sử dụng ngôn ngữ lập trình cụ thể
Thiết kế kiến trúc chương trình và các trừu tượng
Các hoạt động độc lập với ngôn ngữ lập trình là những công việc quan trọng nhất trong lập trình, tập trung vào việc xây dựng kiến trúc chương trình và các thiết kế trừu tượng Các thiết kế trừu tượng được coi là công cụ giải quyết vấn đề thực tế, đóng vai trò then chốt trong quá trình phát triển phần mềm Chúng có thể được phân loại theo thứ bậc, với mức độ khái quát tăng dần khi lên cao hơn Sự trừu tượng không chỉ là một khái niệm trong lập trình mà còn xuất hiện trong cuộc sống hàng ngày, thường bị lãng quên.
Ví dụ: Một số trừu tượng như:
+ Cây bút chì - Công cụ viết
Trong thiết kế chương trình, "bút chì" được mô tả chi tiết hơn so với "công cụ để viết", nhưng cả hai đều là những trừu tượng Để tạo ra một bản thiết kế chương trình độc lập, cần dựa trên các khái niệm lập trình chung nhằm xây dựng các trừu tượng Việc kết hợp nhiều phương pháp luận lập trình trong một chương trình có thể bị coi là sai lầm, nhưng thực tế, điều này hoàn toàn tự nhiên và hợp lý, vì một chương trình tốt thường sử dụng đa dạng các phương pháp luận lập trình.
Mã hóa bản đặc tả, sử dụng ngôn ngữ lập trình cụ thể
Sử dụng kỹ thuật mã hóa cụ thể như ngôn ngữ lập trình, công cụ và các tiêu chuẩn để chuyển đổi bản thiết kế chương trình thành mã nguồn thực tế Quá trình này tương tự như việc xây dựng một cây cầu từ bản thiết kế, có thể sử dụng các vật liệu như gỗ, sắt hoặc sự kết hợp giữa chúng, tùy thuộc vào yêu cầu và mục đích sử dụng.
Hoạt động lập trình bao gồm hai phần cơ bản: kỹ thuật và công cụ Kỹ thuật đề cập đến các công cụ và phương pháp thực hành cần thiết, cùng với các tiêu chuẩn cho phép thực hiện lập trình hiệu quả.
Nền tảng khoa học của lập trình bao gồm các lý thuyết giúp ta hiểu rõ hơn về hoạt động này Khoa học không chỉ giải thích kỹ thuật một cách trực tiếp mà còn hỗ trợ chúng ta trong việc phân tích, tổng hợp và áp dụng kiến thức để đề xuất các cải tiến hoặc phát triển kỹ thuật mới.
Khoa học và kỹ thuật cần phải kết hợp chặt chẽ để giải quyết triệt để các vấn đề Thiếu kỹ thuật, chúng ta chỉ có thể làm việc với các cơ chế một cách đơn giản Ngược lại, thiếu khoa học, công việc sẽ trở nên thủ công và thiếu hiểu biết sâu sắc.
Phương pháp luận là gì?
Phương pháp luận là cách tiếp cận nhằm giải quyết vấn đề, trong đó phương pháp luận lập trình đề cập đến cách thức viết chương trình từ góc độ lý thuyết Từ khía cạnh kỹ thuật, nó còn được gọi là kỹ thuật lập trình.
Phương pháp luận ra đời từ nhu cầu nhận thức khoa học về các phương pháp nghiên cứu trong khoa học xã hội, bao gồm thống kê, mô tả, điều tra bằng bảng hỏi và phỏng vấn Việc lựa chọn đúng phương pháp có thể dẫn đến thành công, trong khi lựa chọn sai có thể gây ra thất bại, như trong trường hợp chọn sai phương pháp trong các cuộc cách mạng Do đó, việc hiểu rõ và áp dụng phương pháp luận là rất cần thiết để đạt được kết quả mong muốn.
Hiện nay, có nhiều cách hiểu gần giống nhau về phương pháp luận.
Có ba cách hiểu phổ biến nhất:
- Luận về một phương pháp
- Hệ thống các phương pháp
- Khoa học hoặc lý thuyết về phương pháp
Phương pháp luận được định nghĩa là một phần của logic học, tập trung vào việc nghiên cứu các phương pháp một cách hậu nghiệm Nó không tạo ra hay đề xuất các phương pháp mới, mà chỉ có nhiệm vụ chọn lọc và tổng hợp những phương pháp đã có Khi đối diện với nhiều con đường khác nhau dẫn đến cùng một mục tiêu, phương pháp luận sẽ hướng dẫn chúng ta tìm ra con đường ngắn nhất và hiệu quả nhất.
Phương pháp luận là hệ thống các nguyên lý và quan điểm, đặc biệt liên quan đến thế giới quan, đóng vai trò chỉ đạo trong việc xây dựng và áp dụng các phương pháp nghiên cứu Nó bao gồm lý luận về phương pháp, hệ thống các phương pháp và nguyên tắc giải quyết vấn đề hiệu quả Phương pháp luận có nhiều cấp độ, từ phương pháp luận ngành cho đến phương pháp luận chung và phương pháp luận triết học, mỗi cấp độ phục vụ cho việc xác định và áp dụng phương pháp trong các lĩnh vực nghiên cứu cụ thể Mặc dù mang tính lý luận cao và có màu sắc triết học, phương pháp luận không đồng nhất với phương pháp luận triết học Phương pháp luận của Triết học Mác - Lênin đáp ứng yêu cầu của nhận thức khoa học hiện đại và hoạt động cải tạo thế giới.
Phân tích các khái niệm cho thấy phương pháp chính là cách thức con người sử dụng để đạt được mục đích, trong khi phương pháp hệ là nhóm các phương pháp phục vụ cho việc hoàn thành nhiệm vụ, thường liên quan đến nghiên cứu khoa học Phương pháp và phương pháp hệ gắn liền với hoạt động thực tiễn, trong khi phương pháp luận là lý luận về phương pháp, liên quan đến tư duy mà không trực tiếp áp dụng vào thực tiễn Sự khác biệt giữa phương pháp luận và phương pháp luận triết học nằm ở phân loại cấp độ.
Vai trò của phương pháp luận
Phương pháp luận triết học có vai trò quan trọng trong nhận thức và thực tiễn, bởi nó hướng dẫn việc tìm kiếm, xây dựng, lựa chọn và áp dụng các phương pháp cho hoạt động này Nó đóng vai trò định hướng trong quá trình khám phá và sử dụng các phương pháp một cách hiệu quả.
Phương pháp luận là hệ thống tri thức lý luận quan trọng, định hướng cho việc củng cố và phát triển thế giới quan của cá nhân và cộng đồng Nó giúp con người hiểu rõ vị trí và vai trò của mình trong thế giới Việc trang bị một thế giới quan đúng đắn là cần thiết để xây dựng xã hội vững mạnh và phát triển bền vững.
Chức năng của phương pháp luận
Phương pháp luận đóng vai trò định hướng cho con người, khuyến khích các hoạt động mà cá nhân cần tuân thủ và thực hiện để đạt được những kết quả cụ thể.
Phương pháp luận là yếu tố then chốt trong việc tìm kiếm và áp dụng các phương pháp nghiên cứu Nó cung cấp những quan điểm và nguyên tắc chỉ đạo, giúp định hướng cho quá trình xây dựng và lựa chọn phương pháp một cách hiệu quả.
Các cấp độ phương pháp luận
Các cấp độ của phương pháp luận có nhiều loại đó là:
– Phương pháp luận ngành: là phương pháp luận sử dụng cho từng ngành khoa học cụ thể;
Phương pháp luận chung là phương pháp được áp dụng cho một nhóm ngành có đặc điểm và mối liên hệ tương đồng, tạo cơ sở vững chắc cho việc áp dụng trong thực tiễn.
Phương pháp luận chung nhất là một hệ thống khái quát các quan điểm và nguyên tắc cơ bản, được áp dụng cho các phương pháp luận chung và cho tất cả các ngành khoa học Nó đóng vai trò là nền tảng cho các phương pháp cụ thể trong từng lĩnh vực nghiên cứu.
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Lịch sử hình thành của lập trình hướng đối tượng
Lập trình hướng đối tượng (OOP) là phương pháp xây dựng phần mềm dựa trên sự tương tác giữa các đối tượng Trong OOP, các đối tượng giao tiếp với nhau thông qua việc gửi và nhận thông điệp, từ đó thực hiện các hành động hoặc phương thức để hoàn thành nhiệm vụ.
Khi hoàn thành các công việc trong thế giới xung quanh, bạn đang tương tác trong một hệ thống đối tượng Chẳng hạn, để đến cửa hàng, bạn tương tác với đối tượng ô tô, bao gồm nhiều thành phần phối hợp với nhau Bạn khởi động xe bằng cách đưa chìa khóa vào ổ khóa, gửi một tín hiệu điện tử đến đối tượng khởi động, từ đó kích hoạt cỗ máy Tiếp theo, bạn điều khiển xe thông qua các đối tượng như hộp số, chân ga, chân thắng và vô lăng Mỗi lần tương tác, đối tượng sẽ phản hồi lại với bạn; ví dụ, khi khởi động, xe sẽ thông báo rằng máy đã hoạt động hay không Tương tự, khi bạn gài số và nhấn ga, xe sẽ phản hồi bằng cách di chuyển, và khi bạn đánh lái, xe sẽ quẹo theo hướng bạn chỉ định.
Khi người dùng phần mềm muốn in tài liệu, họ chỉ cần nhấn nút in Phần mềm sẽ kết nối với máy in và thông báo cho người dùng Nếu máy in hết giấy hoặc không tìm thấy máy in, thông báo sẽ cho biết việc in không thành công; ngược lại, nếu tài liệu được in thành công, người dùng sẽ nhận được thông báo xác nhận.
Khái niệm lập trình hướng đối tượng bắt đầu xuất hiện vào những năm 1960 với ngôn ngữ Simula và phát triển mạnh mẽ trong thập niên 70 với Smalltalk Mặc dù số lượng lập trình viên sử dụng ngôn ngữ này không nhiều, nhưng phương pháp lập trình hướng đối tượng vẫn tiếp tục tiến bộ Đến giữa thập niên 80, lập trình hướng đối tượng đã có sự hồi sinh mạnh mẽ, với C++ và Eiffel trở thành những ngôn ngữ phổ biến trong cộng đồng lập trình viên Trong thập niên 90, lập trình hướng đối tượng ngày càng phát triển, đặc biệt với sự ra đời của Java Năm 2002, Microsoft giới thiệu ngôn ngữ C# cùng với NET Framework, đồng thời cải tiến Visual Basic thành một ngôn ngữ lập trình hướng đối tượng.
Những khái niệm cơ bản của lập trình hướng đối tượng
*Lập trình hướng đối tượng
Lập trình hướng đối tượng được xây dựng trên nền tảng của khái niệm lập trình cấu trúc và sự trừu tượng hóa dữ liệu
Phương pháp lập trình hướng đối tượng mô tả trực tiếp các đối tượng trong thế giới, lấy chúng làm nền tảng cho thuật toán Thiết kế hệ thống xoay quanh dữ liệu, với chương trình được chia thành các lớp đối tượng Dữ liệu được đóng gói để che giấu và bảo vệ, trong khi các đối tượng tương tác với nhau thông qua thông báo Chương trình được thiết kế theo cách từ dưới lên (bottom-up) và từ trên xuống (top-down).
*Đối tượng Đối tượng = Dữ Liệu + Phương Thức
Là khái niệm trừu tượng phản ánh các thực thể trong thế giới thực o Có thể là 1 thực thể vật lí o Có thể là 1 khái niệm trừu tượng
Một đối tượng bao gồm hai thành phần chính: trạng thái (state) và hành vi (behavior) Trạng thái dữ liệu hay thuộc tính (attribute) là các đặc điểm đặc trưng của đối tượng, trong khi hành vi hay thao tác (method) là những hành động mà đối tượng có khả năng thực hiện.
Có 2 loại đối tượng:đối tượng trừu tượng và đối tượng thực
Được định nghĩa là sự thể hiện của 1
Chính là các thực thể trong hệ hướng đối tượng
Ví Dụ 1: o Một con người là một đối tượng
Họ tên,chiều cao,cân nặng là thuộc tính của tất cả con người
Hành vi của con người là ngồi,đứng,dậy
Ví Dụ 2: o Một sinh viên trừu tượng gồm các thuộc tính:
Mã sinh viên,họ tên,ngày sinh o Một sinh viên thực:
Class và Object
Phương thức của lớp tương ứng với các hành động của đối tượng.
Lớp và đối tượng, mặc dù có mối liên hệ tương ứng lẫn nhau, nhưng bản chất lại khác nhau:
• Lớp là sự trừu tượng hoá của các đối tượng Trong khi đó, đối tượng là một thể hiện của lớp.
Đối tượng là một thực thể cụ thể, có thực trong hệ thống, trong khi lớplà khái niệm trừu tượng, chỉ tồn tại dưới dạng ý niệm để mô tả các đặc tính chung của nhiều đối tượng.
• Tất cả các đối tượng thuộc về cùng một lớp có cùng các thuộc tính và các phương thức.
Một lớp đóng vai trò là nguyên mẫu cho một đối tượng, xác định các hành động khả thi và thuộc tính cần thiết cho một nhóm đối tượng cụ thể.
Lớp là khái niệm trừu tượng trong phát triển hệ thống, trong khi đối tượng là thực thể cụ thể tồn tại trong quá trình hoạt động của hệ thống.
Tính kế thừa (inheritance)
Tính kế thừa trong lập trình cho phép tạo ra lớp con từ lớp cha có sẵn, mở rộng và tận dụng các thuộc tính cùng phương thức của lớp cha Lớp con có thể kế thừa mà không cần định nghĩa lại các phương thức, hoặc có thể tái định nghĩa (override) và thêm các phương thức riêng Điều này giúp tối ưu hóa việc tái sử dụng mã nguồn, nâng cao hiệu quả phát triển phần mềm.
Tính kế thừa được chia ra làm 3 loại:
Cú pháp khai báo: class lopcon : phamvidulieu lopcha
Cú pháp khai báo: class lopcon : phamvitruycap lopcha1, phamvitruycap lopcha2,
// nội dung của lớp con
Cú pháp khai báo: class lopcon : phamvitruycap lopcha {
// nội dung của lớp con
}; Ưu điểm của kế thừa :
Cho phép xây dựng một lớp mới từ một lớp đã có
Lớp mới được gọi là lớp con subclass ( ) hay lớp dẫn xuất
Lớp đã có gọi là lớp cha ( superclass) hay lớp cơ sở
Cho chia sẻ những thông tin chung nhằm tái sử dụng đồng thời giúp dễ dàng nâng cấp và bảo trì
Các vấn đề trong kế thừa :
Kiểu kế thừa: public protected, và private :
Khi một lớp kế thừa từ lớp cơ sở có phạm vi truy cập là public, các thành viên public của lớp cơ sở sẽ trở thành các thành viên public trong lớp kế thừa, trong khi các thành viên protected vẫn giữ nguyên phạm vi protected Ngược lại, các thành viên private của lớp cơ sở không thể được truy cập trực tiếp từ lớp kế thừa, nhưng có thể được truy cập thông qua các phương thức public và protected của lớp cơ sở.
Khi một lớp kế thừa từ một lớp cơ sở với mức truy cập là protected, các thành viên public và protected của lớp cơ sở sẽ được chuyển thành các thành viên protected trong lớp kế thừa.
Khi một lớp kế thừa từ một lớp cơ sở với phạm vi truy cập là private, các thành viên có phạm vi public và protected của lớp cơ sở sẽ trở thành các thành viên private trong lớp kế thừa.
Truy cập Public Protected Private
Lớp kế thừa Có Có Không
Bên ngoài Có Không Không
Tính đóng gói (encapsulation)
Encapsulation, also known as information hiding, is a fundamental concept in programming that groups together properties, methods, and other components into a single unit or object.
+ Tính đóng gói được triển khai bằng cách sử dụng access modifier•public: Có thể truy cập từ bất cứ đâu
• private: Chỉ có thể truy cập ở bên trong class
• protected: Chỉ có thể truy cập ở bên trong class và các class kế thừa từ class đó
• internal: Giống như public nhưng chỉ hạn chế trong 1 assembly
Tính đóng gói (Encapsulation) là cơ chế che giấu dữ liệu (Data Hiding) trong lập trình hướng đối tượng, nơi lớp (class) bảo vệ một số dữ liệu, hàm và phương thức bằng cách đặt chúng ở dạng private Điều này đảm bảo rằng dữ liệu chỉ được truy cập và sử dụng đúng cách thông qua các hàm và phương thức public mà lớp cung cấp Do đó, các thuộc tính và phương thức private không thể được truy cập từ bên ngoài lớp đó.
Tính đóng gói trong lập trình được thể hiện khi các đối tượng có trạng thái private bên trong một lớp, ngăn chặn việc truy cập trực tiếp từ bên ngoài Thay vào đó, các đối tượng khác chỉ có thể tương tác thông qua các phương thức public, giúp bảo vệ dữ liệu và duy trì tính toàn vẹn của đối tượng.
*Lợi ích tính đóng gói:
Bạn có thể tạo lớp read-only hoặc write-only bằng việc cài đặt phương thức setter hoặc getter.
Bạn có quyền kiểm soát dữ liệu của mình Nếu bạn muốn giá trị của id chỉ nhận các số lớn hơn 100, hãy triển khai logic này trong lớp setter.
Tính đa hình(polimorphism)
Tính đa hình cho phép thực hiện một hành động theo nhiều cách khác nhau, bao gồm hai hình thức chính: Method overloading (đa hình khi biên dịch) và Method overriding (đa hình ở thời điểm thực thi) Method overloading xảy ra khi trong một lớp, các phương thức có cùng tên nhưng khác kiểu trả về và tham số truyền vào Ngược lại, Method overriding diễn ra khi các phương thức trong lớp con kế thừa từ lớp cha, với nội dung thực hiện khác nhau tùy thuộc vào logic nghiệp vụ, và chỉ được xác định tại thời điểm thực thi.
Tính đa hình chủ yếu được chia thành hai loại:
Tính đa hình tại thời điểm biên dịch (Compile time Polymorphism) được thực hiện thông qua việc nạp chồng hàm và nạp chồng toán tử Nạp chồng hàm (Function Overloading) cho phép sử dụng cùng một tên gọi cho các hàm có cùng mục đích nhưng khác nhau về kiểu dữ liệu tham số hoặc số lượng tham số Điều này cho phép lập trình viên khai báo và định nghĩa nhiều hàm với cùng một tên, mang lại sự linh hoạt trong việc sử dụng.
+, Đây là trường hợp một đối tượng bị ràng buộc với chức năng của chúng ngay tại thời gian chương trình đang chạy.
Đa hình thời gian chạy là một khái niệm quan trọng trong lập trình hướng đối tượng, cho phép lớp con ghi đè phương thức của lớp cha bằng cách sử dụng cùng tên phương thức Điều này giúp tái sử dụng mã nguồn và tăng tính linh hoạt trong việc triển khai các chức năng khác nhau.
Tính trừu tượng
Tính trừu tượng giúp tổng quát hóa một đối tượng bằng cách ẩn đi các thông tin chi tiết bên trong và chỉ hiển thị những thông tin bên ngoài Nhờ vào những thông tin bên ngoài này, chúng ta có thể hiểu được chức năng và vai trò của đối tượng đó.
Tính chất này được thể hiện qua việc sử dụng interface hoặc abstract class
Ví dụ: Bài toán quản lý sinh viên chúng ta chỉ cần quản lý các thông tin như
Mà lại không cần quản lý thêm các thông tin:
Tại vì chúng thực sự không cần thiết.
Trừu tượng hoá đối tượng theo chức năng là quá trình mô hình hoá lớp dựa trên các hành động của các đối tượng Quá trình này giúp xác định các phương thức chính của lớp, từ đó tạo ra một mô hình rõ ràng và hiệu quả cho việc phát triển phần mềm.
• Tập hợp tất cả các hành động có thể có của các đối tượng.
• Nhóm các đối tượng có các hoạt động tương tự nhau, loại bỏ bớt các hoạt động cá biệt, tạo thành một nhóm chung.
• Mỗi nhóm đối tượng đề xuất một lớp tương ứng.
• Các hành động chung của nhóm đối tượng sẽ cấu thành các phương thức của lớp tương ứng.
Trừu tượng hóa đối tượng dựa trên dữ liệu là quá trình mô hình hóa các thuộc tính của lớp từ các thuộc tính của các đối tượng tương ứng Quá trình này giúp tạo ra một cái nhìn tổng quát và có hệ thống về các đối tượng trong lĩnh vực nghiên cứu.
• Tập hợp tất cả các thuộc tính có thể có của các đối tượng.
• Nhóm các đối tượng có các thuộc tính tương tự nhau, loại bỏ bớt các thuộc tính cá biệt, tạo thành một nhóm chung.
• Mỗi nhóm đối tượng đề xuất một lớp tương ứng.
• Các thuộc tính chung của nhóm đối tượng sẽ cấu thành các thuộc tính tương ứng của lớp được đề xuất.
• Giảm thiểu những chi tiết không cần thiết
Trừu tượng hóa dữ liệu là một yếu tố quan trọng trong lập trình, giúp tập trung vào các hành vi cốt yếu của thực thể mà không cần mô tả chi tiết mọi thuộc tính Việc áp dụng tính trừu tượng mang lại nhiều ưu điểm, bao gồm việc giảm thiểu sự phức tạp, tăng khả năng tái sử dụng mã và cải thiện khả năng bảo trì ứng dụng.
Tính trừu tượng giúp lập trình viên đơn giản hóa các đối tượng bằng cách chỉ tập trung vào những thuộc tính và phương thức cần thiết, từ đó nâng cao khả năng bảo trì của hệ thống.
Tính trừu tượng giúp chúng ta tập trung vào những cốt lõi cần thiết của đối tượng thay vì quan tâm đến cách nó thực hiện.
Tính trừu tượng cung cấp nhiều tính năng mở rộng khi sử dụng kết hợp với tính đa hình và kế thừa trong lập trình hướng đối tượng.
Tính ứng dụng
Tính ứng dụng: hầu hết trong phần mềm OOP tập trung vào các đối tượng thao tác hơn là logic để thao tác chúng.
OOP là nền tảng của các design pattern hiện nay.
Mục tiêu của lập trình hướng đối tượng (OOP) là tối ưu hóa quản lý mã nguồn, tăng khả năng tái sử dụng và tóm gọn các thủ tục thông qua việc sử dụng các đối tượng OOP dựa trên khái niệm Class và Object, giúp phân chia một chương trình phần mềm thành các phần đơn giản và có thể tái sử dụng.
Thành phần private và public của lớp
Để bảo vệ dữ liệu khỏi việc truy cập trái phép từ bên ngoài, lập trình hướng đối tượng sử dụng các từ khóa để quy định phạm vi truy cập của các thuộc tính và phương thức trong lớp Một cách tổng quát, lập trình hướng đối tượng phân chia thành hai mức truy cập cho các thành phần của lớp.
• Private: Truy nhập trong nội bộ lớp.
• Protected: Thành phần được bảo vệ, được hạn chế truy nhập như thành phần private • Public: Truy nhập tự do từ bên ngoài
Thành phần private trong một lớp là khu vực riêng biệt, không chia sẻ với lớp khác, cho phép truy cập chỉ trong phạm vi nội bộ của lớp đó Các thành phần private chỉ có thể được truy cập từ các phương thức trong lớp hoặc giữa các phương thức của lớp với nhau Điều này có nghĩa là các thành phần private không thể được truy cập từ bên ngoài lớp hay từ các đối tượng khác Thông thường, các thành phần như thuộc tính và phương thức sẽ được đặt vào khu vực private của lớp.
Tất cả thuộc tính dữ liệu của lớp được đặt trong vùng private để bảo vệ chúng khỏi sự truy cập tự do từ bên ngoài, đảm bảo tính an toàn và bảo mật cho dữ liệu.
Các phương thức trung gian đóng vai trò là các bước tính toán đệm cho các phương thức khác và được đặt trong vùng private để thực hiện việc đóng gói trong lập trình hướng đối tượng Điều này giúp các đối tượng và chương trình bên ngoài không cần biết và cũng không thể truy cập vào cách tính toán cụ thể bên trong của lớp.
Thành phần public là khu vực cho phép Lớp chia sẻ thông tin với tất cả các chương trình và đối tượng bên ngoài Nó có thể được truy cập từ cả bên trong và bên ngoài lớp học.
• Bên trong lớp: từ phương thức lớp vào các thuộc tính dữ liệu của lớp, hoặc giữa các phương thức của lớp với nhau
Bên ngoài lớp, các đối tượng từ chương trình bên ngoài có thể truy cập vào các phương thức của lớp thông qua vùng chia sẻ public Thông thường, các thành phần quan trọng trong lớp sẽ được đặt trong khu vực này để đảm bảo khả năng tương tác và sử dụng hiệu quả.
Các phương thức set và get cho phép truy cập gián tiếp vào các thuộc tính dữ liệu của lớp, giúp các đối tượng bên ngoài tương tác với chúng Đồng thời, những phương thức này cũng cung cấp chức năng hoạt động và cách cư xử của đối tượng lớp đối với môi trường xung quanh, thể hiện rõ vai trò và chức năng của các đối tượng trong lập trình.
Một số ngôn ngữ lập trình hướng đối tượng
Ngôn ngữ Java, được phát triển bởi Sun Microsystems và hiện thuộc sở hữu của Oracle Corporation, là ngôn ngữ lập trình hướng đối tượng phổ biến nhất hiện nay Java cung cấp cho các nhà phát triển đầy đủ công cụ để xây dựng ứng dụng web và giải pháp phần mềm, đồng thời cho phép các sản phẩm được phát triển bằng Java hoạt động trên mọi nền tảng.
C++ là một ngôn ngữ lập trình phổ biến, nổi bật với tính năng con trỏ (pointer) và được xem là phiên bản nâng cấp của C Ngôn ngữ này mạnh mẽ và đa năng, kết hợp tốc độ của C với khả năng áp dụng mô hình lập trình hướng đối tượng (OOP) C++ được coi là ngôn ngữ "bậc trung" vì nó tích hợp các đặc điểm của ngôn ngữ bậc cao và bậc thấp, đồng thời hỗ trợ cả lập trình thủ tục và lập trình chức năng.
Ngôn ngữ lập trình Python là một ngôn ngữ thông dịch phổ biến, bậc cao và đa năng, nổi bật với triết lý thiết kế chú trọng vào sự dễ đọc của mã nguồn thông qua việc sử dụng whitespace Mặc dù không hoàn toàn tuân theo mô hình lập trình hướng đối tượng (OOP), Python vẫn hỗ trợ OOP trong nhiều khía cạnh, kết hợp tính linh hoạt và đơn giản để phát triển các sản phẩm phức tạp Đặc biệt, Python đóng vai trò quan trọng trong các lĩnh vực như khoa học dữ liệu và học máy (machine learning).
Và còn rất nhiều ngôn ngữ lập trình khác
Uư điểm phương pháp luận lập trình hướng đối tượng
Nâng cao hiệu năng phát triển phần mềm
Ba yếu tố quan trọng của lập trình hướng đối tượng là:
Tính mô-đun trong phát triển phần mềm giúp tách biệt các nhiệm vụ dựa trên những đối tượng cụ thể, với mỗi đối tượng đảm nhận một nhiệm vụ riêng biệt.
Tính mở rộng: các đối tượng có thể được mở rộng dễ dàng, bao gồm mở rộng thuộc tính và các hành vi mới.
Tính tái sử dụng: các đối tượng cũng có thể được sử dụng lại trong một ứng dụng hoặc nhiều ứng dụng khác nhau.
Lập trình hướng đối tượng mang lại hai yếu tố quan trọng giúp cải thiện hiệu năng phát triển phần mềm, vượt trội hơn so với kỹ thuật lập trình truyền thống dựa trên thủ tục.
Nâng cao khả năng bảo trì phần mềm
Phần mềm lập trình theo hướng đối tượng dễ bảo trì nhờ thiết kế mô-đun, cho phép thay đổi một phần mà không ảnh hưởng đến các phần khác Điều này đặc biệt hữu ích cho các dự án lớn, yêu cầu nhiều sự điều chỉnh.
Phần mềm phát triển nhanh hơn
Lập trình hướng đối tượng (OOP) mang lại tính tái sử dụng cao, giúp tăng tốc độ phát triển phần mềm Các phần mềm được xây dựng theo OOP thường sở hữu thư viện đối tượng phong phú, với mã nguồn được tối ưu hóa, cho phép tái sử dụng trong các dự án tương lai.
Giảm thiểu chi phí phát triển
Việc tái sử dụng phần mềm giúp giảm chi phí phát triển cho nhà sản xuất, khi mà phần lớn công sức thường được dành cho phân tích đối tượng và thiết kế phần mềm Nhờ đó, tổng chi phí phát triển phần mềm giảm đáng kể.
Chất lượng phần mềm cao hơn
Chất lượng phần mềm chịu ảnh hưởng bởi nhiều yếu tố, trong đó kinh nghiệm và trình độ của nhóm phát triển đóng vai trò quan trọng Phương pháp phát triển phần mềm hiệu quả thường dẫn đến sản phẩm có chất lượng cao hơn.
Phát triển phần mềm nhanh chóng và tiết kiệm chi phí cho phép các nhà sản xuất tập trung nhiều hơn vào kiểm thử, dẫn đến phần mềm cuối cùng có ít lỗi và chất lượng cao hơn.
Nhược điểm phương pháp luận lập trình hướng đối tượng
Đường cong học tập sâu
Lập trình hướng đối tượng là một phương pháp lập trình yêu cầu tư duy logic và phân tích cao, điều này có thể gây khó khăn cho những người mới bắt đầu Để thành thạo phương pháp này, các lập trình viên cần thời gian để học hỏi và làm quen với các khái niệm cơ bản.
Phương pháp lập trình hướng đối tượng là một quy trình phức tạp, yêu cầu phần mềm phải dựa vào sự tương tác của đối tượng Để thực hiện điều này, lập trình viên cần hiểu rõ các khái niệm cơ bản như lớp, đối tượng, phương thức và thuộc tính Bên cạnh đó, việc nắm vững bốn tính chất cơ bản của lập trình hướng đối tượng, bao gồm Tính trừu tượng (Abstraction), Tính đóng gói (Encapsulation), Tính kế thừa (Inheritance) và Tính đa hình (Polymorphism), là điều cần thiết để phát triển phần mềm hiệu quả.
Lập trình viên cần có nhiều thời gian để làm chủ phương pháp này
Chương trình chậm và có kích thước lớn hơn
Phần mềm lập trình hướng đối tượng thường có tốc độ chậm hơn so với phần mềm lập trình thủ tục do yêu cầu nhiều câu lệnh hơn để thực thi Lập trình viên cần viết nhiều dòng mã để đảm bảo các thuộc tính của phương pháp này, dẫn đến kích thước chương trình lớn hơn.
Phương pháp lập trình hướng đối tượng không phù hợp với mọi loại vấn đề
Mỗi phương pháp khác nhau sẽ phù hợp với một vấn đề khác nhau. Lập trình hướng đối tượng cũng vậy.
Nhiều vấn đề có thể được giải quyết hiệu quả hơn khi lập trình viên áp dụng phương pháp lập trình chức năng, lập trình logic hoặc lập trình thủ tục, trong khi lập trình hướng đối tượng có thể không mang lại hiệu quả tối ưu.
Lập trình hướng đối tượng là một phương pháp hiệu quả nhưng không hoàn hảo Bài viết này sẽ giúp bạn cân nhắc các ưu và nhược điểm của phương pháp này, từ đó áp dụng một cách tốt nhất trong công việc của mình.
Xu hướng phát triển
Lập trình hướng thành phần (component-oriented programming)
Tư duy lập trình hưởng thành phần được xây dựng theo ý tưởng:
Giải quyết bài toán phần mềm bằng cách xây dựng các thành phần độc lập, mỗi thành phần đảm nhiệm một nhiệm vụ cụ thể Sau đó, các thành phần này được kết hợp để tạo ra phần mềm đáp ứng các yêu cầu đã xác định Trong xu hướng lập trình hướng thành phần, nhiều phương pháp lập trình mới đã xuất hiện và đang phát triển mạnh mẽ.
• Lập trình hướng agent (agent-oriented programming)
• Lập trình hưởng aspect (aspect-oriented programming)
Lập trình hướng agent có hai đặc trưng cơ bản:
• Thứ nhất là khả năng tự chủ của mỗi agent để hoàn thành nhiệm vụ riêng của nó
Tinh tổ chức xã hội giữa các agent là yếu tố quan trọng, cho phép các agent phối hợp, cộng tác và cạnh tranh lẫn nhau nhằm hoàn thành nhiệm vụ chung của toàn hệ thống.
Lập trình hướng aspect là một xu hướng phát triển từ lập trình hướng thành phần, trong đó mỗi thành phần đảm nhận một luồng công việc hoặc khía cạnh cụ thể của vấn đề Bằng cách tổng hợp các thành phần từ các luồng khác nhau, chúng ta có thể tìm ra giải pháp cho bài toán của mình Lập trình hướng aspect nổi bật với những đặc trưng cơ bản riêng biệt.
• Tinh đóng gói theo luồng công việc, hoặc đóng gói theo khía cạnhcủa vấn đề
• Tính đơn điệu theo luồng, trong một luồng công việc, các nhiệm vụ được thực hiện liên tiếp nhau, tuần tự như trong lập trình tuyến tính
DEMO
Tổng quan về phần mềm
3.1.1 Lý do chọn đề tài
Công nghệ thông tin đang ngày càng trở nên thiết yếu trong cuộc sống hằng ngày, giúp công việc trở nên nhanh chóng và hiệu quả hơn Sự phát triển của CNTT đã tạo ra nhiều cơ hội nghề nghiệp mới, trong đó có việc phát triển phần mềm quản lý sinh viên, nhằm mục đích tối ưu hóa quy trình quản lý Chúng tôi chọn đề tài “Phát triển phần mềm quản lý sinh viên” để nghiên cứu sâu về ngôn ngữ C++ trong lập trình hướng đối tượng, từ đó xây dựng một ứng dụng cụ thể, củng cố kiến thức và định hướng cho việc phát triển các ứng dụng quản lý sinh viên theo hướng dịch vụ trong tương lai.
3.1.2 Mục tiêu của đề tài
Khái niệm phân tích và giải quyết bài toán lập trình hướng đối tượng bao gồm việc xác định các đối tượng lớp và mối quan hệ giữa chúng trong một hệ thống thông tin Mục tiêu của đề tài này là nghiên cứu môi trường phát triển và ngôn ngữ C++, từ đó xây dựng những ứng dụng cụ thể.
Ngôn ngữ lập trình C++, được phát triển bởi Bjarne Stroustrup vào năm 1979, đã trải qua sự suy giảm trong mức độ phổ biến gần đây Nguyên nhân không phải do C++ bị thay thế bởi công nghệ mới, mà là do sự thay đổi trong loại ứng dụng được ưa chuộng hiện nay.
Hiện nay, ứng dụng web và di động đang chiếm ưu thế trên Internet, trong khi C++ không phải là lựa chọn lý tưởng cho các lĩnh vực này Mặc dù có thể lập trình web bằng C++, nhưng việc sử dụng các ngôn ngữ như PHP, Javascript hoặc ASP.NET sẽ mang lại hiệu quả và tối ưu hơn cho các ứng dụng lớn.
Trong lĩnh vực phát triển ứng dụng di động, Java và Kotlin chiếm ưu thế cho Android, trong khi Objective-C và Swift là lựa chọn hàng đầu cho iOS C++ dường như không có chỗ đứng trong lĩnh vực này Tương tự, trong lập trình phần mềm trên máy tính, C++ cũng không thể vượt qua Java và C# Việc viết chương trình bằng C++ thường phức tạp hơn so với nhiều ngôn ngữ lập trình khác, khiến cho quá trình debug trở nên khó khăn và làm giảm niềm vui trong lập trình.
Các tính chất lập trình hướng đối tượng
Class “ Sinhvien” kế thừa từ “Nguoi” bao gồm các thuộc tính “ name,age, display(), getName(), setName() từ class “Nguoi”.
- Tính đóng gói: các thuộc tính trong class không thể truy cập từ bên ngoài mà phải thông qua phương thức public.
- Trong code để thể hiện tính đa hình có 2 cách:
• Method Overloading (compile time polymorphism).
• Method Overriding (run time polymorphism).
- Method Overloading: là cách nạp chồng các method có cùng tên nhưng khác tham số.
- Method Overriding: Đây là một phương pháp được ghi đè lại các method ảo của một lớp cha nào đó (được khai báo bằng từ khóa virtual).
Encapsulation, also known as information hiding, groups together properties, methods, and various components into a single object or unit This principle is essential for organizing and managing data effectively in programming.
- Tính đóng gói được triển khai bằng cách sử dụng access modifier•public: Có thể truy cập từ bất cứ đâu.
• private: Chỉ có thể truy cập ở bên trong class.
• protected: Chỉ có thể truy cập ở bên trong class và các class kế thừa từ class đó.
• internal: Giống như public nhưng chỉ hạn chế trong 1 assembly.
Đa hình (polymorphism) là khái niệm chỉ sự tồn tại nhiều hình thái khác nhau trong lập trình, đặc biệt khi có cấu trúc cấp bậc giữa các lớp Những lớp này liên quan với nhau thông qua tính kế thừa, cho phép các đối tượng khác nhau có thể được xử lý một cách đồng nhất.
TỔNG K쨃ĀT, K쨃ĀT LUÂoN
Tổng kết
Bài báo cáo trình bày tổng quan về ngôn ngữ lập trình hướng đối tượng, nêu rõ các tính chất đặc trưng và giới thiệu một số ngôn ngữ lập trình tiêu biểu Tuy nhiên, bài viết vẫn còn thiếu sót và mong nhận được ý kiến đóng góp từ thầy cô.
- Tìm hiểu được về lập trình hướng đối tượng.
- Thu được nhiều kinh nghiệm trong việc thiết kế lập trình hướng đối tượng.
- Khó khăn trong việc phân chia công việc trong nhóm Khó khăn để phân chia công việc sao cho mỗi người có thể làm độc lập với nhau.
Do hạn chế về thời gian, chúng tôi chưa thể triển khai đầy đủ các chức năng mong muốn, bao gồm hiệu ứng âm thanh và xử lý đồ họa còn chưa hoàn thiện.
- Tìm hiểu được các tính chất của Lập trình hướng đối tượng:
- Rút ra được những kinh nghiệm làm việc nhóm
- Biết tổ chức - phân công công việc đồng đều giữa các thành viên và đảm bảo đúng tiến độ.
- Có năng lực thuyết phục và trình bày từ đó đưa ra được những phương pháp tốt nhất để giải quyết được vấn đề.
- Tôn trọng và giúp đỡ các thành vien trong nhóm.
- Có trách nhiệm với công việc mình được giao.
- Biết lắng nghe người khác.
- Chưa phân bố được thời gian làm báo cáo hợp lí.
- Vẫn còn thiếu sót trong việc lựa chọn nội dung.