Click to edit Master subtitle style Click to edit Master subtitle style CHƯƠNG 2:
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 4 khác nhau (tùy từng lớp dẫn xuất)
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
(fields)
(methods)
• Lớp (class) gồm có: – Dữ liệu (dùng biến) – Phương thức – 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
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;
class Book {
namespace CreatingClass {
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
this.title = title; this.author = author; this.pages = pages; this.wordCount = 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
(objects/instances)
• Static variable
– 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
class Something {
public static int sharedNum;
}
– 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
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