Lập trình hướng đối tượng - Chương 2: Lớp và đối tượng
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
40 trang |
Chia sẻ: huyhoang44 | Lượt xem: 685 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Lập trình hướng đối tượng - Chương 2: Lớp và đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LỚP VÀ ĐỐI TƯỢNGKhoa Công nghệ thông tinTrường Đại học Ngoại ngữ - Tin học, TP.HCMCHƯƠNG 2: 1Tạo LớpThêm FieldThêm ConstructorThêm Phương thức (method/function)Tạo đối tượngTừ khóa ‘static’Mảng đối tượngNỘI DUNG23 nguyên tắc lập trình hướng đối tượng3Đó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)3 nguyên tắc lập trình hướng đối tượng4TẠO LỚP5Lớ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ìnhLớ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)Tạo lớp6Cú pháp:Tạo lớ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ớp8Tạo lớp9Tạo lớp10Tạo lớpusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CreatingClass{ class Book { }}11Bướ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ừThêm instance variable (field)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; }}12Giả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ớpTừ các Phương thức trong lớp Từ các Constructors Access Modifier của Fieldprivate: field được truy cập trong lớp, ngoài lớp không truy cập đượcpublic: field được truy cập mọi nơi, kể cả ngoài lớpThêm instance variable (field)13Bước 2: Cho biết cách tạo đối tượngXem 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?Thêm các constructors14Thêm các constructorsusing 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; } }}15Giả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ốThêm các constructorspublic Book(){ }16Từ 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; } }}17Phạ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ậpClass scope: Truy cập trong cả lớpMethod scope: Truy cập trong methodBlock scope: Truy cập trong khốiTừ khóa ‘this’18Name hidingTừ khóa ‘this’class Book{ private string title; private string author; private int pages; private int wordCount; public Book(string title) { Console.Write(title); }}19Giải quyết vấn đề Name hiding: Có 3 cáchĐặt tên tham số khác với tên fieldTê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 Từ khóa ‘this’20Từ 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 thisVí dụ: this.title, this.MethodName()Cách dùng thisThông thường không cần dùng thisKhi name hiding xảy ra, dùng this để truy cập đến field của lớpTừ khóa ‘this’21class 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; }}22Bướ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, ?Thêm Methods23Thêm Methods24class 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; }}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ứcprivate: Phương thức chỉ được gọi bên trong lớpPhương thức bắt đầu Get, SetGet: 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)Thêm Methods25TẠO ĐỐI TƯỢNG26Tạo đối tượngclass 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()); }}27TỪ KHÓA ‘static’28Thành viên được đánh dấu staticThà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 variableBiến được đánh dấu static phía trướcBiến này shared cho các đối tượngDùng tên lớp để truy cập biếnTừ khóa ‘static’class Something{ public static int sharedNum;}29Static methodMethod được đánh dấu static phía trướcGọi Method không cần tạo đối tượngDùng tên lớp để gọi methodTrong static method, không được truy cập instance variable Từ khóa ‘static’class Something{ public static void SharedMethod() { }}30Static classClass được đánh dấu static phía trướcTất cả member đều phải là staticThường dùng để tạo các method tiện íchVí dụ 1: Lớp Console, Console.WriteLine()Ví dụ 2:Từ khóa ‘static’static class Something{ public static int shareNumber; public static void SharedMethod() { }}31Static constructorConstructor được đánh dấu static phía trướcDùng để khởi tạo các biến staticHàm static constructor được chạy khi lần đầu tiên dùng lớpTừ khóa ‘static’class Something{ public static int sharedNumber; static Something() { sharedNumber = 8; }}32CLASS ACCESS MODIFIER33Lớp (class) có 2 access modifier:internal: Lớp chỉ được dùng trong 1 project hay 1 assemblypublic: Lớp được dùng trong các project hay các assemblyClass access modifierinternal class Something{}public class Something{}class Something{}34Cho 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ạiChứ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ứcThông báo “không thể hủy đăng ký” nếu chưa có sinh viên nào đăng kýBài tập35MẢNG ĐỐI TƯỢNG36Khai 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 raarrayName: Tên mảng đối tượngsize: Kích thướcCác phần tử sẽ mang giá trị nullMảng đối tượng37Tạ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)Mảng đối tượng38Bổ 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ímCho 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ôngCho 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ôngHiển thị thông tin học phần nếu người dùng không muốn tiếp tụcBài tập về nhà39Lớ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à memberThêm fieldThêm constructorThêm methodAccess modifier của field và methodprivatepublicAccess modifier của classinternalpublicKhái niệm name hiding và từ khóa ‘this’Tạo và sử dụng mảng đối tượngĐIỂM CHÍNH40
Các file đính kèm theo tài liệu này:
- lap_trinh_huong_doi_tuongchuong_02_lop_va_doi_tuong_1745.pptx