• Xây dựng lớp, đối tượng, phương thức Method và thuộc tính Property trong C#.NET... Nguyên lý Lập trình hướng đối tượng• Nguyên lý Closed The Open-Closed Principle: – Các thực thể phần
Trang 2• Xây dựng lớp, đối tượng, phương thức (Method)
và thuộc tính (Property) trong C#.NET
Trang 4• Truyền giá trị (value)
• Truyền tham chiếu (reference)
• Truyền tham chiếu ra (out)
• Phương thức trả về nhiều giá trị
– Dùng Struct – Dùng Array – Dùng đối số tham chiếu ra
Trang 51 Nguyên lý Lập trình hướng đối tượng
• Nguyên lý Closed (The
Open-Closed Principle):
– Các thực thể phần mềm (hàm, đơn thể, đối tượng, …) nên được xây dựng theo hướng mở cho việc mở rộng (be opened for extension) nhưng đóng đối với việc sửa đổi (be closed for modification)
Trang 6Nguyên lý Lập trình hướng đối tượng (tt)
• Nguyên lý Nghịch đảo phụ thuộc (The
Dependency Inversion Principle):
– Các thành phần trong phần mềm không nên phụ thuộc vào những cái riêng, cụ thể
(details) mà ngược lại nên phụ thuộc vào những cái chung, tổng quát (abstractions) của những cái riêng, cụ thể đó.
– Những cái chung, tổng quát (abstractions) không nên phụ vào những cái riêng, cụ thể (details) Sự phụ thuộc này nên được đảo ngược lại.
Trang 7Nguyên lý Lập trình hướng đối tượng (tt)
• Nguyên lý Thay thế Liskov (The Liskov
Substitution Principle):
– Lớp B chỉ nên kế thừa từ lớp A khi và chỉ khi với mọi hàm F thao tác trên các đối tượng của A, cách cư xử (behaviors) của F không thay đổi khi ta thay thế (substitute) các đối tượng của A bằng các đối tượng của B.
Trang 8Nguyên lý Lập trình hướng đối tượng (tt)
• Nguyên lý Phân tách interface (The
Interface Segregation):
– Không nên buộc các thực thể phần mềm phụ thuộc vào những interface mà chúng không
sử dụng đến.
Trang 9• Lớp là một kiểu cấu trúc mở rộng, được
định nghĩa để tạo nên một kiểu dữ liệu
mới, bao gồm các thuộc tính và phương thức
• Khai báo: sử dụng từ khoá class, theo cú
pháp sau
Trang 10• Nếu không khai báo lớp cơ sở thì C# mặc
định xem lớp cơ sở là object
• Lớp luôn là kiểu dữ liệu tham chiếu trongC#
Trang 13của đối tượng (hoặc của lớp)
• Mỗi phương thức thường được định
nghĩa là một hàm, các thao tác để thực
hiện hành vi đó được viết tại nội dung của hàm
• Trong C#, tất cả các câu lệnh, phương
thức… được “gói” trong một class, và tất
cả các class được “gói” trong một
namespace
Trang 14• Khai báo phương thức: giống C++, tuy
nhiên, mỗi phương thức thường được khai báo bởi từ khóa public, private,
protected,…)
• Phương thức có trị trả về
Trang 16• Thuộc tính là một đặc tính mới được giới
thiệu trong ngôn ngữ C# làm tăng sức
Trang 17• Thuộc tính chỉ ghi: sử dụng từ khóa set
Trang 19cùng tên nhưng khác tham số.
• Khi chạy chương trình, tùy tình huống mà hàm thích hợp nhất được gọi
Trang 20• Là cơ chế cho phép định nghĩa một lớp
mới (còn gọi là lớp dẫn xuất - drived
class) dựa trên một lớp đã có sẵn (còn gọi
là lớp cơ sở - base class)
• Lớp dẫn xuất có hầu hết các thành phần giống như lớp cơ sở (bao gồm tất cả các phương thức và biến thành viên của lớp
cơ sở, trừ các phương thức private,
phương thức khởi tạo, phương thức hủy
Trang 21• Lưu ý: lớp dẫn xuất chỉ truy xuất các
thành phần dữ liệu private của lớp cơ sởbằng cách truy cập gián tiếp thông qua các phương thức public, hoặc các
properties của lớp cơ sở
Trang 24• Gọi phương thức thiết lập của lớp cơ sở
– Nếu lớp cơ sở có phương thức tạo lập có tham số thì lớp dẫn xuất cũng phải định nghĩa phương thức tạo lập có tham số theo
Trang 26phương thức ảo (virtual method).
– Để thực hiện được đa hình ta phải thực hiện các bước sau
• Lớp cơ sở đánh dấu phương thức ảo bằng từ
khóa virtual hoặc abstract
• Các lớp dẫn xuất định nghĩa lại phương thức ảo
này (đánh dấu bằng từ khóa override).
Trang 28của class mà thôi
• Truy cập đến một biến hoặc một phương thức static:
– tenlop.tenbien – tenlop.tenphuongthuc
Trang 29• Tầm vực của biến là vùng đoạn mã mà từ
đấy biến có thể được truy xuất
• Trong một phạm vi hoạt động (scope),
không thể có hai biến cùng tên
Trang 31• Đệ qui (recursive function) là một hàm mà
nó gọi chính nó hoặc trực tiếp hoặc gián tiếp thông qua các hàm khác Mỗi hàm đệ qui chứa hai phần:
– Trường hợp cơ sở (base case) được định nghĩa không đệ qui
– Trường hợp đệ qui (recursive case) hay bước đệ qui (recursion step) được định nghĩa dựa trên giá trị đã được định nghĩa trước đó nhằm giảm vấn đề ban đầu thành vấn đề nhỏ hơn để cuối cùng vấn đề đó sẽ hội tụ trên
trường hợp cơ sở
Trang 32• Truyền giá trị: tương tự như trong C++
Giá trị truyền được chép vào một ô nhớ
và được truyền vào hàm
• Truyền tham chiếu (reference): Một
Trang 34• Truyền tham chiếu ra (out): sử dụng từ
khóa out để không cần phải khởi tạo tham
số trước khi dùng