Bài giảng Lập trình hướng đối tượng - Chương 2: Lớp và đối tượng
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Chương 2: Lớp và đối tượng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_lap_trinh_huong_doi_tuong_chuong_2_lop_va_doi_tuon.pptx
Nội dung text: Bài giảng Lập trình hướng đối tượng - Chương 2: Lớp và đối tượng
- Click to editCHƯƠNG Master subtitle 2: style LỚP VÀ ĐỐI TƯỢNG Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học, TP.HCM 1
- NỘI DUNG Tạo Lớp Thêm Field Thêm Constructor Thêm Phương thức (method/function) Tạo đối tượng Từ khóa ‘static’ Mảng đối tượng 2
- 3 NGUYÊN TẮC LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 3
- 3 nguyên tắc lập trình hướng đối tượng Đóng gói (Encapsulation) và Giao diện (Interface) Ẩn chi tiết của lớp (Đóng gói), chỉ cung cấp các phương thức cần thiết để dùng (Giao diện) Thừa kế (Inheritance) Tạo lớp mới thừa kế lớp đã có Đa hình (Polymorphism) Khả năng tạo ra các lớp dẫn xuất, cài đặt cùng một method của lớp cơ sở theo những cách khác nhau (tùy từng lớp dẫn xuất) 4
- TẠO LỚP 5
- Tạo lớp Lớp (class) dùng để mô hình các đối tượng thực thành các đối tượng trong chương trình Lớp (class) gồm có: Dữ liệu (dùng biến) (fields) Phương thức (methods) Cách tạo đối tượng (constructors) 6
- Tạo lớp Cú pháp: [access modifier] class [:BaseClassName] { // Khai báo biến (Fields) [access modifier] VarName; // Constructors [public] ClassName([Parameters]) {} // Phương thức (Methods) [access modifier] MethodName([Parameters]) {} } 7
- Tạo lớp Ví dụ: Tạo lớp Book để mô hình quyển sách Trong Visual Studio Click phải lên tên Project Chọn Add → Class Nhập tên lớp: Book 8
- Tạo lớp 9
- Tạo lớp 10
- Tạo lớp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CreatingClass { class Book { } } 11
- Thêm instance variable (field) Bước 1: Thêm các biến (field) vào lớp Giả sử lớp Book chứa các thông tin: tựa sách, tác giả, số trang, số từ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CreatingClass { class Book { private string title; private string author; private int pages; private int wordCount; } } 12
- Thêm instance variable (field) Giải thích: Các field là các biến cục bộ (local variable) Các field có thể truy cập (dùng hoặc thay đổi) mọi nơi trong lớp • Từ các Phương thức trong lớp • Từ các Constructors Access Modifier của Field • private: field được truy cập trong lớp, ngoài lớp không truy cập được • public: field được truy cập mọi nơi, kể cả ngoài lớp 13
- Thêm các constructors Bước 2: Cho biết cách tạo đối tượng Xem xét lại các field: Khi đối tượng tạo ra, field nên có giá trị gì thì hợp lý? Ví dụ: • Khi tạo 1 quyển sách mà không có title được không? • Khi tạo 1 quyển sách, phần lớn một quyển sách có thông tin thông thường gì? • Khi tạo 1 quyển sách, chúng ta muốn cung cấp đầy đủ thông tin không? 14
- Thêm các constructors using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CreatingClass { class Book { private string title; private string author; private int pages; private int wordCount; public Book(string title) { this.title = title; } } } 15
- Thêm các constructors Giải thích: public access modifier: Muốn người ngoài lớp có thể tạo đối tượng Book. Constructor giống method, nhưng có 2 khác biệt: • Tên constructor giống tên lớp (Book) • Không có kiểu trả về Nếu không viết constructor thì trình biên dịch sẽ tạo cho chúng ta constructor không tham số public Book() { } 16
- Từ khóa ‘this’ namespace CreatingClass { class Book { private string title; private string author; private int pages; private int wordCount; public Book(string title) { this.title = title; } } } 17
- Từ khóa ‘this’ Phạm vi của biến (variable scope)?: Là những nơi trong chương trình mà biến có thể truy cập Class scope: Truy cập trong cả lớp Method scope: Truy cập trong method Block scope: Truy cập trong khối 18
- Từ khóa ‘this’ Name hiding class Book { private string title; private string author; private int pages; private int wordCount; public Book(string title) { Console.Write(title); } } 19
- Từ khóa ‘this’ Giải quyết vấn đề Name hiding: Có 3 cách Đặt tên tham số khác với tên field Tên field bắt đầu là m_ (member): • m_title, • m_author, Dùng từ khóa ‘this’ • Đặt tên field và tên tham số giống nhau (name hiding xảy ra) • Dùng từ khóa this khi muốn tham chiếu đến field 20
- Từ khóa ‘this’ Từ khóa ‘this’ this tham chiếu đến đối tượng hiện tại mà chúng ta đang ở trong đó Khi ở trong lớp, có thể truy cập mọi thành viên (field và method) của lớp thông qua this • Ví dụ: this.title, this.MethodName() Cách dùng this • Thông thường không cần dùng this • Khi name hiding xảy ra, dùng this để truy cập đến field của lớp 21
- class Book { private string title; private string author; private int pages; private int wordCount; public Book(string title) { this.title = title; } public Book(string title, string author) { this.title = title; this.author = author; } public Book(string title, string author, int pages, int wordCount) { this.title = title; this.author = author; this.pages = pages; this.wordCount = wordCount; } } 22
- Thêm Methods Bước 3: Hình dung lớp cần cung cấp những chức năng gì (method nào)? Ví dụ: Người dùng lớp Book có muốn Truy cập lấy title của Book? Gán title khác cho Book? Gán số từ cho Book dựa trên nội dung cung cấp, ? 23
- Thêm Methods class Book { private string title; private string author; private int pages; private int wordCount; public string GetTitle() { return title; } public void SetTittle(string title) { this.title = title; } public void SetWordCoutFromText(string text) { wordCount = text.Split(' ').Length; } } 24
- Thêm Methods Giải thích: Access Modifier của method: • public: người dùng ở ngoài lớp có thể gọi phương thức • private: Phương thức chỉ được gọi bên trong lớp Phương thức bắt đầu Get, Set • Get: Phương thức trả về giá trị • Set: Phương thức gán giá trị (thường kiểm tra giá trị trước khi gán) 25
- TẠO ĐỐI TƯỢNG 26
- Tạo đối tượng class Program { static void Main(string[] args) { Book book = new Book("Mindset", "Carol Dweck"); Console.WriteLine(book.GetTitle()); book.SetTittle("Mindset: How You Can Fulfil Your Potential"); Console.WriteLine(book.GetTitle()); } } 27
- TỪ KHÓA ‘STATIC’ 28
- Từ khóa ‘static’ Thành viên được đánh dấu static Thành viên này không thuộc đối tượng (object/instance) Thành viên được shared cho các đối tượng (objects/instances) Static variable Biến được đánh dấu static phía trước Biến này shared cho các đối tượng Dùng tên lớp để truy cập biến class Something { public static int sharedNum; } 29
- Từ khóa ‘static’ Static method Method được đánh dấu static phía trước Gọi Method không cần tạo đối tượng Dùng tên lớp để gọi method Trong static method, không được truy cập instance variable class Something { public static void SharedMethod() { } } 30
- Từ khóa ‘static’ Static class Class được đánh dấu static phía trước Tất cả member đều phải là static Thường dùng để tạo các method tiện ích • Ví dụ 1: Lớp Console, Console.WriteLine() • Ví dụ 2: static class Something { public static int shareNumber; public static void SharedMethod() { } } 31
- Từ khóa ‘static’ Static constructor Constructor được đánh dấu static phía trước Dùng để khởi tạo các biến static Hàm static constructor được chạy khi lần đầu tiên dùng lớp class Something { public static int sharedNumber; static Something() { sharedNumber = 8; } } 32
- CLASS ACCESS MODIFIER 33
- Class access modifier Lớp (class) có 2 access modifier: internal: Lớp chỉ được dùng trong 1 project hay 1 assembly public: Lớp được dùng trong các project hay các assembly internal class Something public class Something { { } } class Something { } 34
- Bài tập Cho bài toán đăng ký học phần (DangKyHP). Hãy thiết kế lớp đối tượng theo yêu cầu sau: • Thông tin đối tượng “học phần” (HocPhan): Mã học phần, tên học phần, số lượng đăng ký tối đa và số lượng đăng ký hiện tại • Chức năng: Cho phép người dùng đăng ký một SV vào lớp, hủy đăng ký một SV và hiển thị thông tin học phần, sao cho: • Thông báo “không thể đăng ký” nếu số đăng ký đã bằng định mức • Thông báo “không thể hủy đăng ký” nếu chưa có sinh viên nào đăng ký 35
- MẢNG ĐỐI TƯỢNG 36
- Mảng đối tượng • Khai báo thuộc tính ClassName[] arrayName; • Tạo mảng đối tượng arrayName = new ClassName[size]; • Trong đó: • ClassName: Tên lớp mà đối tượng được tạo ra • arrayName: Tên mảng đối tượng • size: Kích thước • Các phần tử sẽ mang giá trị null 37
- Mảng đối tượng • Tạo mới phần tử thứ i trong mảng đối tượng arrayName[i] = new ClassName(); !!!Số lần khởi tạo đối tượng là số lượng mảng (dùng vòng lặp) 38
- Bài tập về nhà Bổ sung vào chương trình đăng ký học phần một lớp quản lý học phần (MangHocPhan) bao gồm các chức năng: • Tạo danh sách các học phần được mở gồm các thông tin được người dùng nhập từ bàn phím • Cho phép đăng ký thêm một sinh viên cho một học phần trong danh sách học phần có sẵn. Mỗi lần đăng ký xong, hỏi lại người dùng có tiếp tục không • Cho phép hủy đăng ký một sinh viên của một học phần nào đó. Mỗi lần hủy đăng ký xong, hỏi lại người dùng có tiếp tục không • Hiển thị thông tin học phần nếu người dùng không muốn tiếp tục 39
- ĐIỂM CHÍNH Lớp nên nằm trong một file riêng (C# không bắt buộc) Cách tạo lớp, các phần trong lớp gọi là member Thêm field Thêm constructor Thêm method Access modifier của field và method private public Access modifier của class internal public Khái niệm name hiding và từ khóa ‘this’ Tạo và sử dụng mảng đối tượng 40