Bài giảng Tổng quan về .Net và C# - Lập trình hướng đối tượng (OOP) với C# - Phan Trọng Tiến
Tóm tắt Bài giảng Tổng quan về .Net và C# - Lập trình hướng đối tượng (OOP) với C# - Phan Trọng Tiến: ...randa() { Console.WriteLine("Welcome to Veranda"); Console.WriteLine("How Many Chairs Do you have in your Veranda"); NoofChair = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("I have total " + NoofChair + " Chairs in my Veranda"); } q Method với kiểu trả về...iteLine("Enter student's number:"); strNumber = Console.ReadLine(); } public void GetNumber() { Console.WriteLine("Student's number is: {0}", strNumber); } public string StuNumber { //stunumber property set { strNumber = value; } get { return strNumber; } } } ...eOfVisit(); } // derived class to inherit the abstract clas s public class Houseclass : GuestVist { static void Main(string[] args) { Houseclass objHouse = new Houseclass(); objHouse.GuestWelcomeMessage(); } public override void PurposeOfVisit() { Console.WriteLine(...
thư viện ở đó có các component có thể dễ dàng tương thích được và thay đổi bởi lập trình viên 7/5/16 Lập trình hướng đối tượng với C# 5 Class và Object Class q Định nghĩa trừu tượng các đặc tính của đối tượng q Khách hàng q Nhân viên q Xe hơi q Bản thiết kế hoặc khuân mẫu Object q Một bản mẫu của class q “Xe hơi” có một bản mẫu được gọi “Xe hơi của Peters” 7/5/16 Lập trình hướng đối tượng với C# 6 7/5/16 4 Class q Class giống như một bản thiết kế, ví dụ như thiết kế của ngôi nhà, q Sử dụng class chúng ta có thể viết các phương thức riêng và khai báo các biến q Sử dụng object để truy cập các phương thức và các biến của class q Classes và Objects là cơ sở của OOP 7/5/16 Lập trình hướng đối tượng với C# 7 Các thuật ngữ bạn cần biết q Classes q Objects q Properties q Methods q Events q #1 Inheritance q #2 Encapsulation q #3 Polymorphism q #4 Abstraction 7/5/16 Lập trình hướng đối tượng với C# 8 7/5/16 5 Các thuật ngữ q Properties (Thuộc tính) q Thay đổi các đặc tính của đối tượng q Ex: “Màu sắc” của chiếc xe hơi q Methods (Phương thức) q Các hành động của một đối tượng q Ex: “Xe hơi” có phương thức “Tăng tốc” q Events (Sự kiện) q Để thực hiện các tương tác với đối tượng q Ex: “Xe hơi” có sự kiện “Mở cửa” 7/5/16 Lập trình hướng đối tượng với C# 9 #1 Inheritance q “Square” là một “Shape” 7/5/16 Lập trình hướng đối tượng với C# 10 7/5/16 6 #1 Inheritance • “Shape” định nghĩa thuộc tính chung “color” • “Square” thừa kế thuộc tính “color” 7/5/16 Lập trình hướng đối tượng với C# 11 #2 Encapsulation q Che dấu thông tin q Ex: q “Shape” che dấu được dữ liệu bên trong đối tượng q Toạ độ điểm thứ nhất q Toạ độ điểm thứ hai 7/5/16 Lập trình hướng đối tượng với C# 12 7/5/16 7 “Square” có một trường bên trong “_slide” 7/5/16 Lập trình hướng đối tượng với C# 13 #3 Polymorphism q Xuất hiện như các đối tượng khác q Được sử dụng như các đối tượng khác 7/5/16 Lập trình hướng đối tượng với C# 14 7/5/16 8 #3 Polymorphism 7/5/16 Lập trình hướng đối tượng với C# 15 #4 Abstraction q Người dùng không cần hiểu chi tiết về công nghệ bên trong (ví dụ các bộ phận của xe hơi) q Chỉ “hiển thị” các tính năng cần thiết của đối tượng q Miêu tả tính năng chỉ liên quan về đối tượng (Object) gọi là tính trừu tượng 7/5/16 Lập trình hướng đối tượng với C# 16 7/5/16 9 Không có instance từ lớp “Shape” • Không sử dụng toán tử new để khởi tạo từ đối tượng Shape 7/5/16 Lập trình hướng đối tượng với C# 17 Bài tập q Nhận diện các thành phần trong đối tượng của mô hình bên phải: ví dụ thuộc tính, phương thức, thừa kế, tính đa hình 7/5/16 Lập trình hướng đối tượng với C# 18 7/5/16 10 Triển khai OOP trong C# q Class q Object q Variable q Method hoặc Functions q Access Modifiers q Encapsulation q Abstraction q Inheritance q Polymorphism q Abstract Class/Method q Virtual Class/Method q Sealed Class/Method q Static Class/Method q Interface 7/5/16 Lập trình hướng đối tượng với C# 19 Class và Object q Class nên bắt đầu với từ khoá “Class” và tiếp theo là tên của Class q Để truy xuất vào các phương thức và các biến của class, chúng ta sử dụng object ShanuHouseClass objHouseOwner = new ShanuHouseClass(); class ShanuHouseClass { } 7/5/16 Lập trình hướng đối tượng với C# 20 7/5/16 11 Variable q Các biến được sử dụng để lưu trữ các giá trị q Các biến có thể là local hoặc global q Cú pháp: Access-Modifier Data-Type Variable-Name q Mặc định access modifier là private, cũng có thể là public int noOfTV = 0; public String yourTVName; private Boolean doYouHaveTV = true; class ShanuHouseClass { int noOfTV = 2; public String yourTVName = "SAMSUNG"; static void Main(string[] args) { ShanuHouseClass objHouseOwner = new ShanuHouseClass(); Console.WriteLine("You Have total " + objHouseOwner.noOfTV + " no of TV :"); Console.WriteLine("Your TV Name is :" + objHouseOwner.yourTVName); } } 7/5/16 Lập trình hướng đối tượng với C# 21 Method hoặc Function q Là một nhóm các câu lệnh code class ShanuHouseClass { int noOfTV = 2; public String yourTVName = "SAMSUNG"; public void MyFirstMethod() { Console.WriteLine("You Have total " + noOfTV + "no of TV :"); Console.WriteLine("Your TV Name is :" + yourTVName); Console.ReadLine(); } static void Main(string[] args) { ShanuHouseClass objHouseOwner = new ShanuHouseClass(); objHouseOwner.MyFirstMethod(); } } 7/5/16 Lập trình hướng đối tượng với C# 22 7/5/16 12 Method hoặc Function q Cấu trúc của Fucntion: Access-Modifiers Return-Type Method-Name (Parameter-List) q Access-Modifiers q Return-Type: kiểu giá trị trả về như string, int, v.v hoặc kiểu “void” nếu không trả về giá trị q Method-Name: tên của method q Parameter-List: danh sách các tham số hoặc đối số truyền vào function 7/5/16 Lập trình hướng đối tượng với C# 23 Method hoặc Function q Method với kiểu void public void Veranda() { Console.WriteLine("Welcome to Veranda"); Console.WriteLine("How Many Chairs Do you have in your Veranda"); NoofChair = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("I have total " + NoofChair + " Chairs in my Veranda"); } q Method với kiểu trả về public string TVNAME() { Console.WriteLine("Enter Your TV Brand NAME"); YOURTVName = Console.ReadLine(); return YOURTVName; } q Method với Parameter-List public void BedRoom(String MemberName,String Color) { Console.WriteLine(MemberName + " Like " + Color + "Color"); } 7/5/16 Lập trình hướng đối tượng với C# 24 7/5/16 13 Kiểu ref và out trong danh parameter-list q ref và out thường được đặt các đối số dạng tham chiếu trong Method thay vì dạng Value trong C# q out không cần phải khởi gán giá trị trước khi gọi hàm q ref nên khởi gán giá trị như các biến thông thường, //Methods public static void MethodRef(ref int a){ } public static void MethodOut(out int a){ } //Calling MethodRef(ref b); MethodOut(out b); 7/5/16 Lập trình hướng đối tượng với C# 25 Ví dụ ref và out class Program { static void Main(string[] args) { int num = 8; CalcSquare(num); Console.WriteLine("Truoc khi goi ref: {0}", num); RefSquare(ref num); Console.WriteLine("Sau khi goi ref: {0}", num); OutSquare(out num); Console.WriteLine("Sau khi goi out: {0}", num); Console.ReadLine(); } } static void CalcSquare(int inum) { inum = inum * inum; } static void RefSquare(ref int inum) { inum = inum * inum; } static void OutSquare(out int inum) { inum = 3; inum = inum*inum; } 7/5/16 Lập trình hướng đối tượng với C# 26 7/5/16 14 Access Modifiers q Được dùng để giới hạn khả năng truy cập của các variable, method và class q private: có mức độ bảo vệ cao nhất q public: không giới hạn truy cập q internal: giới hạn truy cập trong cùng một project q protected: truy cập được trong class chính và các class dẫn xuất (thừa kế) q protected internal: giới hạn truy cập trong project hoặc lớp dẫn xuất 7/5/16 Lập trình hướng đối tượng với C# 27 Access Modifier public class SampleProtectedInternalClass { protected internal String myProtectedInternal = "Iam Protected Internal Variable"; public void ProtectedInternalMethod() { Console.WriteLine("Protected Internal Variable Example :" + myProtectedInternal); } } public class DerivedClass : SampleProtectedInternalClass { public void DerivedProtectedInternal() { Console.WriteLine("Derived Protected Internal Variable Exam ple :" + myProtectedInternal); } } class ShanuHouseClass { int noOfTV = 2; public String yourTVName = "SAMSUNG"; public void MyFirstMethod() { Console.WriteLine("You Have total " + noOfTV + "no of TV :"); Console.WriteLine("Your TV Name is :" + yourTVName); } static void Main(string[] args) { ShanuHouseClass objHouseOwner = new ShanuHouseClass(); objHouseOwner.MyFirstMethod(); SampleProtectedInternalClass intObj = new SampleProtectedInternalClass(); intObj.ProtectedInternalMethod(); DerivedClass proIntObj = new DerivedClass(); proIntObj.DerivedprotectedInternal(); Console.ReadLine(); } } 7/5/16 Lập trình hướng đối tượng với C# 28 7/5/16 15 Constructor và Properties q Constructor q Là một Method đặc biệt của class q Sử dụng để khởi tạo đối tượng của class khi class được khởi tạo q Tên của Constructor trùng với tên của class q Trong constructor có thể có các tham số q Properties q Là các thành viên của class cho phép truy cập dữ liệu bên trong của class 7/5/16 Lập trình hướng đối tượng với C# 29 Ví dụ Constructor và Properties class Student { private string strNumber; private string strName; private string strSex; public Student() { //Constructor strNumber = ""; strName = ""; strSex = ""; } //Constructor with parameters public Student(string id, string name, string sex) { strNumber = id; strName = name; strSex = sex; } public void SetNumber() { Console.WriteLine("Enter student's number:"); strNumber = Console.ReadLine(); } public void GetNumber() { Console.WriteLine("Student's number is: {0}", strNumber); } public string StuNumber { //stunumber property set { strNumber = value; } get { return strNumber; } } } 7/5/16 Lập trình hướng đối tượng với C# 30 7/5/16 16 Encapsulation q Ẩn các thành viên hay các biến từ bên ngoài class public class HouseSecurityClass { public int noofSecurity; public String SecurityName = String.Empty; } public class HouseClass { private int noofLockerinHosue = 2; public string OwnerName = String.Empty; } q Class “HouseSecurityClass” có 2 biến public, vì vậy “HouseClass” có thể truy cập cả hai. q Clas “HouseClass” có 1 biến pubic và 1 biến private, biến private không thể truy cập ngoài class 7/5/16 Lập trình hướng đối tượng với C# 31 Abstraction q Hiển thị và chia sẻ những thông tin thông dụng cho người dùng public class HouseServerntClass { private int SaftyLoackerKeyNo = 10001; public String roomCleanInstructions = "Clean All rooms"; private void SaftyNos() { Console.WriteLine("My SaftyLoackerKeyNo is" + SaftyLoackerKeyNo); } public void RoomCleanInstruction() { Console.WriteLine(roomCleanInstructions); } } 7/5/16 Lập trình hướng đối tượng với C# 32 7/5/16 17 Inheritance q Được sử dụng để tái sử dụng lại code q Có hai loại: q Single level Inheritance: một lớp cơ sở và một lớp dẫn xuất q Multi level Inheritance: nhiều hơn một lớp dẫn xuất q .Net không hỗ trợ Multiple Inheritance, Interface là giải pháp cho Multiple Inheritance 7/5/16 Lập trình hướng đối tượng với C# 33 Inheritance public class BaseClass { private void PrivateMethod() { Console.WriteLine("private Method"); } public void PublicMethod() { Console.WriteLine("This Method Shared"); } } public class DerivedClass1 : BaseClass { public void DerivedClass1() { Console.WriteLine("Derived Class 1"); } } public class DerivedClass2 : DerivedClass1 { static void Main(string[] args) { DerivedClass2 obj = new DerivedClass2(); obj.PublicMethod(); obj.DerivedClass1(); //obj.privateMethod(); //Sẽ bị lỗi } } 7/5/16 Lập trình hướng đối tượng với C# 34 7/5/16 18 Polymorphism q Có nhiều hơn một khuân dạng, ví dụ cùng tên một phương thức nhưng có các tham biến khác nhau q Có 2 loại polymorphism: q Method Overloading: cùng tên method nhưng khác đối số q Method Overriding: cùng method và các đối số và kiểu dữ liệu nhưng method được sử dụng lại ở lớp dẫn xuất. Có thể được sử dụng trong Abstract Method, Virtual Method và Sealed Method q Có 2 kiểu thực thi: q Compile Time Polymorphism q Run time Polymorphism 7/5/16 Lập trình hướng đối tượng với C# 35 Ví dụ Method Overloading class HouseOwnerClass { //Function with parameter public void BedRoom(String nameandColor) { Console.WriteLine(nameandColor); } // Same Function Name with Different Paramenter public void BedRoom(String MemberName, String Color) { Console.WriteLine(MemberName + " Like " + Color + "Color"); } static void Main(string[] args) { HouseOwnerClass objHouseOwner = new HouseOwnerClass(); objHouseOwner.BedRoom("My Name is Shanu I like Lavender color"); objHouseOwner.BedRoom("SHANU", "Lavender"); Console.ReadLine(); } } 7/5/16 Lập trình hướng đối tượng với C# 36 7/5/16 19 Abstract Class/Method q Abstract Class: là lớp có từ khoá “abstract” abstract class GuestVist { } q Lớp trừu tượng là một lớp cha (super) của tất các các class. q Không thể tạo object từ một lớp trừu tượng q Lớp trừu tượng có thể có cả hai Abstract Method và Method thông thường. q Abstract method không có thân chương trình (khối lệnh) 7/5/16 Lập trình hướng đối tượng với C# 37 Ví dụ Abstract Class/Method abstract class GuestVist { public void GuestWelcomeMessage() { Console.WriteLine("Welcome to our Abst ractHome"); } public void GuestName() { Console.WriteLine("Guest name is: Abstr act"); } public abstract void PurposeOfVisit(); } // derived class to inherit the abstract clas s public class Houseclass : GuestVist { static void Main(string[] args) { Houseclass objHouse = new Houseclass(); objHouse.GuestWelcomeMessage(); } public override void PurposeOfVisit() { Console.WriteLine("Abstract just came fo r a Meetup and spend some time "); } } 7/5/16 Lập trình hướng đối tượng với C# 38 7/5/16 20 Virtual Class/Method q Virtual method là rất hữu ích q So sánh giữa Abstract method và Virtual method: q Giống nhau: đều sử dụng từ khoá override q Khác nhau: q Abstract method: chỉ khai báo trong Abstract class q Abstract method không có thân chương trình, còn Virtual method có thân chương trình hoàn chỉnh. 7/5/16 Lập trình hướng đối tượng với C# 39 Virtual Class/Method abstract class GuestVist { public void Guestwelcomemessage() { Console.WriteLine("Welcome to our AbstractHo me"); } public void GuestName() { Console.WriteLine("Guest name is: Abstract"); } public abstract void purposeofVisit(); // Abstract Method public virtual void NoofGuestwillvisit() // Virtual Method { Console.WriteLine("Total 5 Guest will Visit your Home"); } } class AbstractHouseClass : GuestVist { public override void purposeofVisit() // Abstract method Override { Console.WriteLine("Abstract just for a Meetup and spend som e time "); } public override void NoofGuestwillvisit() // Virtual method override { Console.WriteLine("Total 20 Guest Visited our Home"); } static void Main(string[] args) { AbstractHouseClass objHouse = new AbstractHouseClass(); objHouse.Guestwelcomemessage(); objHouse.purposeofVisit(); objHouse.NoofGuestwillvisit(); Console.ReadLine(); } } 7/5/16 Lập trình hướng đối tượng với C# 40 7/5/16 21 Selead Class/Method q Selead class: không thể được thừa kế bởi các class khác q Sử dụng từ khoá selead q Selead Method: các phương thức không thể viết chồng (overriden) trong lớp dẫn xuất. q Virtual method có thể viết chồng trong lớp dẫn xuất nhưng Virtual Sealed Method thì không 7/5/16 Lập trình hướng đối tượng với C# 41 Ví dụ Sealed Class/Method //Base Class with Sealed Method public class OwnerOfficialroomwithrestriction { public virtual void message() { Console.WriteLine("Every one belongs to this hou se can access my items in my room except my sea led Item"); } public virtual sealed void myAccountsLoocker() { Console.WriteLine("This Loocker can not be inhe rited by other classes"); } } // Deraived method which inherits Selaed Method cl ass class HouseSealedClass : OwnerOfficialroomwith restriction { public override void message() { Console.WriteLine("overrided in the derived class"); } public override void myAccountsLoocker() { Console.WriteLine("The sealed method Over rides"); } } 7/5/16 Lập trình hướng đối tượng với C# 42 7/5/16 22 Static Class/Method q Cả hai Static và Sealed không thể thừa kế q Sự khác nhau giữu Static Class và Selead Class: q Có thể tạo được một object (instance) từ Selead Class, còn Static Class thì không thể. q Trong Static Class, chỉ có Static members là được phép, không thể viết các method không là static q Vấn đề gì sảy ra khi: q Thừa kế một lớp từ một Static class? q Khai báo một non-Static method trong một Static class? q Khi chúng ta tạo object từ một Static class? q Có thể gọi metho Static trong class mà không cần tạo Object được không? q Có thể tạo một Static Method trong một non-Static Class? 7/5/16 Lập trình hướng đối tượng với C# 43 Ví dụ Static Class/Method public class OwnerofficialRoom { public static void AllMyPersonalItems() { Console.WriteLine("No need to create object for me just use my class name to access me :)"); } public void non_staticMethod() { Console.WriteLine("You need to create an Object to Access Me :("); } } class StaticmethodClass { static void Main(string[] args) { // for statci method no need to create object j ust call directly using the classname. OwnerofficialRoom.AllMyPersonalItems(); // for non- static method need to create object to access the m ethod. OwnerofficialRoom obj = new OwnerofficialRoom(); obj.non_staticMethod(); Console.ReadLine(); } } 7/5/16 Lập trình hướng đối tượng với C# 44 7/5/16 23 Interface q Giống như một Abstract class nhưng chỉ khai báo các method q Các method của lớp Interface phải được thi hành ở trong class mà nó kế thừa q Sự khác nhau giữu Abstract class và Interface: q Abstract class có cả hai Abstract method và Non-Abstract method q Tất cả các method trong Interface mặc định là abstract (không có Non- Abstract) q Tất cả các Method khai báo trong Interface nên được viết chồng trong lớp dẫn xuất q Có thể khai báo một non-abstract method có phần thân chương trình hay không? 7/5/16 Lập trình hướng đối tượng với C# 45 Ví dụ Interface interface GuestInterface { void GuestWelcomeMessage(); void NoofGuestes(); } interface FriendsandRelationsInterface { void friendwelcomemessage(); void FriendName(); } class HouseOwnerClass : GuestInterface, FriendsandRelationsInterface { public void GuestWelcomeMessage() { Console.WriteLine("All guests are well come to our home"); } public void NoofGuestes() { Console.WriteLine("Total 15 Guestes has visited"); } public void friendwelcomemessage() { Console.WriteLine("Welcome to our Home"); } public void FriendName() { Console.WriteLine("Friend name is: Afraz"); } static void Main(string[] args) { HouseOwnerClass obj = new HouseOwnerClass(); obj.GuestWelcomeMessage(); obj.NoofGuestes(); obj.friendwelcomemessage(); obj.FriendName(); Console.ReadLine(); } } 7/5/16 Lập trình hướng đối tượng với C# 46 7/5/16 24 Namespaces q Cho phép phân tách các lớp mà có cùng tên q Một namespace có thể có nhiều class q Truy xuất đầy đủ các đối tượng Lập trình hướng đối tượng với C# 47 Namespace CS415 Class A Class B Class C Namespace CS340 Class A Class B Class C CS415.A CS340.A 7/5/16
File đính kèm:
- bai_giang_tong_quan_ve_net_va_c_lap_trinh_huong_doi_tuong_oo.pdf