BÁO CÁO VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Người báo cáo Trần Bá Châu Mục lục 1) Lập trình hướng đối tượng là gì? 2 2) Các khái niệm cơ bản 2 2 1) Thuộc Tính (Attribute) 2 2 2) Phương Thức (Method) 3 2 3) L[.]
BÁO CÁO VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Người báo cáo: Trần Bá Châu Mục lục 1) Lập trình hướng đối tượng gì? 2) Các khái niệm 2.1) Thuộc Tính (Attribute): 2.2) Phương Thức (Method): 2.3) Lớp (Class): 2.2) Đối tượng (Object): 3) Các tính chất lập trình hướng đối tượng: 3.1) Tính đóng gói (Encapsulation) 3.2) Tính kế thừa (Inheritance) 3.3) Tính đa hình (Polymorphism) 17 3.4) Tính trừu tượng (Abstraction) 20 1) Lập trình hướng đối tượng gì? Lập trình hướng đối tượng (Tiếng Anh: Object Oriented Programming, viết tắt: OOP) mơ hình lập trình dựa khái niệm Class Object Nó sử dụng để tách chương trình phần mềm thành phần đơn giản, tái sử dụng Lập trình hướng đối tượng hiểu đơn giản phương pháp để giải tốn lập trình mà áp dụng code trở nên dễ phát triển dễ bảo trì Đây phương pháp tiên tiến, phù hợp để phát triển hầu hết ứng dụng Phương pháp giải tốn cách chia chương trình thành đối tượng (Object), với đối tượng có thuộc tính (Attribute) phương thức (Method) Có nhiều ngơn ngữ lập trình hướng đối tượng C ++, Java, Python, 2) Các khái niệm 2.1) Thuộc Tính (Attribute): Là đặc điểm, thông tin đối tượng (Vd: Xét với đối tượng người có thuộc tính là: Tên, Tuổi, Màu Da, Màu Tóc, Chiều Cao, Cân Nặng, …) 2.2) Phương Thức (Method): Là hành động mà đối tượng thưc (VD: Vẫn xét với đối tượng người có hành động: đi, nói, ăn, uống, …) 2.3) Lớp (Class): Là nơi định nghĩa thông tin đối tượng, hiểu Lớp kiểu liệu mà biến kiểu liệu coi đối tượng Trong Lớp có thuộc tính (attribute) phương thức (method) Ví dụ: 2.2) Đối tượng (Object): Là thể Lớp, bạn hiểu đối tượng biến Ví dụ từ class Người bên trên, ta tạo Will Smith, 20 tuổi, nhà giàu: 3) Các tính chất lập trình hướng đối tượng: Trong lập trình hướng đối tượng có tính chất tính đóng gói (Encapsulation), tính kế thừa (Inheritance), tính đa hình (Polymorphism) tính trừu tượng (Abstraction) 3.1) Tính đóng gói (Encapsulation) Tính đóng gói kỹ thuật giúp ta che giấu thơng tin bên đối tượng Mục đích tính đóng gói giúp hạn chế lỗi phát triển chương trình Ví dụ Trong ví dụ thuộc tính lớp Student public dẫn tới thuộc tính lớp truy xuất trực tiếp từ nơi khác Trên thực tế ta nên hạn chế tối đa biến có phạm vi truy cập public vi phạm tính đóng gói lập trình hướng đối tượng Để đảm bảo tính đóng gói cho lớp Student, ta nên để phạm vi truy cập thuộc tính private truy xuất tới thuộc tính qua phương thức public ( gọi setter, getter) sau: Với cách làm thông tin đối tượng ẩn đi, ta giao tiếp với đối tượng thơng qua phương thức Các lợi ích mà tính đóng gói đem lại: • Hạn chế truy xuất không hợp lệ tới thuộc tính đối tượng • Giúp cho trạng thái đối tượng ln Ví dụ thuộc tính gpa lớp Student public khó kiểm sốt giá trị, ta thay gpa thành giá trị Ngược lại, ta để thuộc tính gpa private cung cấp hàm setGpa() sau • Thì lúc giá trị thuộc tính gpa ln đảm bảo khơng âm nhỏ (do muốn thay đổi gpa phải thơng qua hàm setGpa()) Giúp ẩn thông tin không cần thiết đối tượng Che giấu liệu phương pháp kỹ thuật mà ta áp dụng để xây dựng nên class mà thơi, khơng phải tính chất đặc trưng lập trình hướng đối tượng, việc ta có áp dụng phương pháp hay khơng hồn tồn khơng bắt buộc Tuy nhiên hệ thống thật, để nâng cao tính bảo mật, giảm phụ thuộc class, tránh lỗi đọc ghi liệu sai cách, … việc áp dụng phương pháp che giấu liệu gần đương nhiên 3.2) Tính kế thừa (Inheritance) Giả sử ta cần viết chương trình lưu thơng tin học sinh giáo viên Với học sinh ta cần lưu thơng tin tên, tuổi, địa chỉ, gpa cịn với giáo viên ta cần lưu thông tin tên, tuổi, địa tiền lương Ta nhận thấy vấn đề lớp Student lớp Teacher có chung nhiều thuộc tính phương thức Vậy làm bình thường code bị trùng lặp nhiều vi phạm nguyên tắc DRY( Don’t Repeat Yourself – đừng lặp lại code) Kế thừa OOP giúp bạn giải vấn đề Kế thừa lập trình hướng đối tượng thừa hưởng lại thuộc tính phương thức lớp Có nghĩa lớp A kế thừa lớp B lớp A có thuộc tính phương thức lớp B Do đó, ta tách thuộc tính phương thức trùng lớp tên Person cho lớp Student Teacher kế thừa lớp Lớp thừa hưởng gọi lớp con( Subclass) lớp bị kế thừa gọi lớp cha ( Parent Class) Trong ngơn ngữ lập trình C++, ta thực kế thừa cú pháp “ :public “ giống chương trình sau Kết chạy chương trình : Có thể thấy lớp Student thừa hưởng phương thức lớp Person Trong kế thừa, lớp khai báo phương thức có tên trùng với phương thức lớp cha phương thức lớp cha bị thay phương thức lớp Ví dụ: Kết chạy chương trình: Có thể thấy phương thức display() lớp Superclass (lớp cha) bị thay phương thức display() lớp Subclass (lớp con) Khi ta cần dùng tốn tử “ :: “ Ví dụ: Kết chạy chương trình : Lưu ý 1: Khi lớp cha có lớp trở lên phải thêm “ #pragma once “vào đầu file lớp cha để file lớp cha gọi lần không dẫn đến lỗi Ví dụ: Khi chạy file source.cpp có lỗi sau: Có thể thấy đoạn code file khơng sai chương trình lại hiển thị lỗi, lý file Person.cpp include nhiều lần dẫn tới trình biên dịch thấy có nhiều lớp Person, ta hiểu đơn giản câu lệnh #include copy paste file include vào file tại, source code file source.cpp include file Person.cpp nhiều lần dẫn đến chương trình báo lỗi Để tránh lỗi ta phải thêm câu lệnh tiền xử lý #pragma once vào file Person.cpp để tránh việc include nhiều lần: Lưu ý 2: • Private (riêng tư): Phương thức có khai báo private truy cập lớp khai báo • Public ( cơng cộng ): Phương thức có khai báo public truy cập lớp khác • Protected (được bảo vệ): phương thức có khai báo protected truy cập thơng qua Tính kế thừa • Default (Mặc định): phương thức khơng khái báo rõ ràng Thơng thường không khai báo, phương thức hiểu public theo mặc định 3.3) Tính đa hình (Polymorphism) Trong lập trình hướng đối tượng cụ thể ngơn ngữ C++ tính đa hình có dạng: • Dạng – Compile time Polymorphism: Một class có nhiều hàm tên khác số lượng tham số kiểu liệu tham số Khi gọi hàm tên q trình biên dịch, compiler định hàm (trong số hàm tên) gọi dựa số lượng tham số kiểu liệu tham số truyển vào hàm Việc định nghĩa hàm tên gọi overloading – nạp chồng phương thức • Dạng – Runtime Polymorphism: Cùng class cho nhiều biến thể, định nghĩa lớp đó, mà lớp Đây phương pháp để định nghĩa lại hành vi lớp sở mà sửa code (còn gọi Implementation) lớp sở Nếu gọi hàm đối tượng lớp dẫn xuất thông qua trỏ lớp sở việc hàm (của lớp sở hay) Runtime Polymorphism thực phương pháp overriding – ghi đè phương thức 3.4) Tính trừu tượng (Abstraction) Tính trừu tượng tính chất đặc trưng lập trình hướng đối tượng, mục tiêu tính trừu tượng ẩn thông tin không cần thiết để tập trung vào tính đối tượng Tính chất giúp bạn trọng tâm vào tính thay phải quan tâm tới cách mà thực Ví dụ tính trừu tượng đời sống: Khi bạn rút tiền ATM bạn không cần quan tâm tới cách mà ATM hoạt động hay thành phần có ATM, mà bạn quan tâm tính rút tiền Trong trường hợp thông tin không cần thiết ATM ẩn đi, tính trừu tượng Tương tự lập trình vậy, sử dụng đối tượng bạn cần quan tâm tới phương thức đối tượng dùng để làm khơng cần quan tâm tới phương thức code Để thực tính trừu tượng C++ bạn sử dụng lớp trừ tượng (abstract class) Lớp trừu tượng lớp mà có đặc điểm sau: • Lớp trừu tượng lớp có phương thức trừu tượng Phương thức trừu tượng phương thức virtual gán giá trị = Có thể thấy phương thức trừu tượng phương thức có phần khai báo, khơng có phần cài đặt => nhìn vào phương thức thứ mà bạn nhìn thấy tính (thay thấy cách cài đặt)