Bài giảng Kỹ thuật lập trình CKT - Chương 6: Lập trình hướng đối tượng Object-oriented programming - OOP - Nguyễn Thanh Nhã

6.1. Các khái niệm trong OOP
Lập trình hướng đối tượng - Object-oriented programming
- Lập trình hướng đối tượng là một kỹ thuật hỗ trợ, cho phép
lập trình viên trực tiếp làm việc với các đối tượng mà họ định
nghĩa
- Giúp tăng năng suất, đơn giản hoá độ phức tạp khi bảo trì
cũng như mở rộng phần mềm
- Hiện nay có khá nhiều ngôn ngữ lập trình theo hướng đối
tượng như C++, Java, PHP,... và Python
- Python là một ngôn ngữ lập trình hướng đối tượng mạnh. Do
đó, việc tạo ra và sử dụng các đối tượng là hết sức dễ dàng 
pdf 13 trang xuanthi 27/12/2022 3020
Bạn đang xem tài liệu "Bài giảng Kỹ thuật lập trình CKT - Chương 6: Lập trình hướng đối tượng Object-oriented programming - OOP - Nguyễn Thanh Nhã", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_ckt_chuong_6_lap_trinh_huong_do.pdf

Nội dung text: Bài giảng Kỹ thuật lập trình CKT - Chương 6: Lập trình hướng đối tượng Object-oriented programming - OOP - Nguyễn Thanh Nhã

  1. TS. Nguyễn Thanh Nhã 9/25/2019 Chương 6 Lập trình hướng đối tượng Object-oriented programming - OOP Department of Engineering Mechanics – HCMUT 2019 3 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.1. Các khái niệm trong OOP Department of Engineering Mechanics – HCMUT 2019 4 nhanguyen@hcmut.edu.vn 2
  2. TS. Nguyễn Thanh Nhã 9/25/2019 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.1. Các khái niệm trong OOP Các khái niệm chính Biến thành viên (Data member) - Biến được định nghĩa trong lớp hoặc trong đối tượng, thể hiện thuộc tính của đối tượng Phương thức (Method) - Hàm được định nghĩa trong lớp nhằm thực hiện một công việc nào đó Kế thừa (Inheritace) - Một tính chất của các ngôn ngữ lập trình hướng đối tượng cho phép các lớp kế thừa, thừa hưởng các đặc trưng của lớp được thừa kế Department of Engineering Mechanics – HCMUT 2019 7 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.2. Định nghĩa và sử dụng lớp trong Python Department of Engineering Mechanics – HCMUT 2019 8 nhanguyen@hcmut.edu.vn 4
  3. TS. Nguyễn Thanh Nhã 9/25/2019 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.2. Định nghĩa và sử dụng lớp trong Python Ví dụ: class studentEM18: 'Python class student for Engineering Mechanics class intake 2018' stdCount = 0 def __init__(self, name, ID): self.name = name self.ID = ID studentEM18.stdCount += 1 def displayCount(self): print('Total stds in EM18 is: ', studentEM18.stdCount) def displayStudentInfo(self): print('Name: ', self.name, '; ID: ', self.ID) Department of Engineering Mechanics – HCMUT 2019 11 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.2. Định nhĩa và sử dụng lớp trong Python Giải thích • studentEM18 :tênlớp • 'Python class student for Engineering Mechanics class intake 2018': Phần mô tả cho lớp (không bắt buộc, tương tự như chú thích) • stdCount: là một biến thuộc tính của class studentEM18 có giá trị được chia sẻ trong tất cả instance của lớp này. Biến này có thể được truy cập dưới dạng studentEM18.stdCount từ bên trong lớp hoặc bên ngoài lớp. • __init__(self, name, ID): . là một phương thức đặc biệt còn gọi phương thức khởi tạo (constructor) cho class, . Python gọi khi người dùng tạo một instance mới của lớp này . Phương thức khởi tạo được dùng để thiết lập các thuộc tính của lớp . Không thể khai báo 2 phương thức __init__ trong cùng 1 class Department of Engineering Mechanics – HCMUT 2019 12 nhanguyen@hcmut.edu.vn 6
  4. TS. Nguyễn Thanh Nhã 9/25/2019 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.2. Định nghĩa và sử dụng lớp trong Python Có thể thêm, xóa, hoặc sửa đổi các thuộc tính của các lớp và đối tượng tại bất cứ thời điểm nào std1.name = 'Nguyễn Anh C' (Thuộc tính name của std1 đã print(std1.name) bị thay đổi thành giá trị mới) std1.age = 19 (thêm thuộc tính age cho đối print(std1.age) tượng std1) (xóa thuộc tính age của đối del std1.age tượng std1) std1.gender = 'male' (thêm thuộc tính gender cho print(std1.gender) đối tượng std1) Department of Engineering Mechanics – HCMUT 2019 15 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.2. Định nghĩa và sử dụng lớp trong Python Ngoài các cách thông thường để truy cập các thuộc tính và phương thức, Python còn cho phép truy cập thông qua một số hàm có sẵn Hàm Mô tả getattr(obj, name[, default]) Lấy một thuộc tính nào đó của đối tượng, nếu đối tượng này không có thuộc tính đó thì giá trị trả về là default. Khi default không được truyền vào thì giá trị trả về là None. hasattr(obj, name) Kiểm tra một thuộc tính nào đó có tồn tại trong đối tượng này hay không, nếu có thì trả về True và ngược lại. setattr(obj,name,value) Gán giá trị value cho một thuộc tính trong đối tượng. delattr(obj, name) Xoá thuộc tính trong đối tượng. Department of Engineering Mechanics – HCMUT 2019 16 nhanguyen@hcmut.edu.vn 8
  5. TS. Nguyễn Thanh Nhã 9/25/2019 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.2. Định nghĩa và sử dụng lớp trong Python Bài tập ví dụ Định nghĩa một lớp point2D để mô tả điểm trong mặt phẳng xy. - Thuộc tính: các tọa độ x, y - Phương thức: • getX, getY: lấy tọa độ x, y • move2D: dời điểm theo vector độ dời (a, b) • reflectX: lấy đối xứng qua trục x • reflectY: lấy đối xứng qua trục y • reflectO: lấy đối xứng qua gốc O • dispPoint: xuất 2 tọa độ điểm Department of Engineering Mechanics – HCMUT 2019 19 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.3. Lớp kế thừa Department of Engineering Mechanics – HCMUT 2019 20 nhanguyen@hcmut.edu.vn 10
  6. TS. Nguyễn Thanh Nhã 9/25/2019 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.3. Lớp kế thừa Mộtsốtínhchấtcầnlưuý • Khi phương thức __init__ ở lớp con không được khai báo, nó sẽ dùng phương thức __init__ ở lớp cha • Khác với các C++, trong Python chỉ có một loại kế thừa duy nhất là public • Trong Python các thuộc tính, phương thức của lớp không tồn tại khái niệm protected như ở C++ mà chỉ tồn tại ở dạng private và public và chúng được phân biệt dựa theo tên o Kiểu private: Tên được bắt đầu bằng 2 dấu gạch dưới "__" và kết thúc tối đa là 1 dấu gạch dưới. (Ví dụ: __abc, __xyz_, ) o Kiểu public: Tất cả các tên không phải tên của kiểu private và đúng quy tắc đều thuộc kiểu public. Department of Engineering Mechanics – HCMUT 2019 23 Chương 5. Hàm và module trong Python PROGRAMMING FOR ENGINEERINGS 6.3. Lớp kế thừa Ví dụ class Animal: def __init__(self, genus, age): self.genus = genus self.age = age def say(self): pass duck = Duck() def __leg__(self): print(duck.genus) if self.genus == 'Duck': print(duck.age) return 2 duck.say() elif self.genus == 'Dog': print(duck.__leg__()) return 4 class Duck(Animal): Duck def __init__(self): 1 Animal.__init__(self, 'Duck', 1) Quack quack! 2 def say(self): print("Quack quack!") Department of Engineering Mechanics – HCMUT 2019 24 nhanguyen@hcmut.edu.vn 12