Lập trình hướng đối tượng (gọi tắt là OOP, viết đầy đủ là object-oriented programming). Trong lập trình hướng đối tượng, cần nắm rõ ba điểm quan trọng cốt lõi đó là tính đóng gói, tính thừa kế và tính đa hình. Đó là thành phần mà ngôn ngữ hướng đối tượng nào cũng cần có. Chúng ta sẽ lần lượt tìm hiểu...
Class
Trong .NET hầu hết cấu trúc chương trình cơ bản là kiểu Class. Trong C# đây là kiểu dữ liệu tham chiếu và do người dùng định nghĩa, các thành viên của nó hoạt động dựa trên định nghĩa này. Ví dụ như: constructors, properties, methods, events v.v... Gọi chung là tập hợp của một trường dữ liệu đại diện cho trạng thái của một Class, mà ta có thể gọi đó là một đối tượng (Object).Sức mạnh, công dụng chính của ngôn ngữ hướng đối tượng là nhóm dữ liệu và chức năng liên quan trong một Class , bạn có thể mô tả phần mềm của bạn phỏng theo các thực thể trong thế giới thực.
Ví dụ:
var p = new Person();
p.FullName = "Tuan Le Minh";
p.Age=26;
p.Address="Da Nang, Viet Nam";
Có thể viết lại như dưới đều đúng:
var p = new Person
{
FullName = "Le Minh Tuan",
Age = 26,
Address = "Da Nang, Viet Nam"
};
Ở ví dụ trên ta tạo class Person được định nghĩa các đặc tính cơ bản như tên, tuổi, địa chỉ...Ta có p là một đối tượng đại diện cho Person
New Keyword
Để sử dụng class trong ví dụ trên, ta cần sắp xếp đối tượng này trong bộ nhớ thông qua từ khóa "new". Nếu không sử dụng từ khóa "new" thì trình biên dịch sẽ thông báo lỗi.Constructors
Khai báo có phần giống như một phương thức và nó cần ở trạng thái Public và có tên trùng với tên Class, không có kiểu dữ liệu trả về (bao gồm không có cả void).Đôi lúc chúng ta cần khởi tạo một đối tượng với dữ liệu nạp sẵn và Constructors giúp ta làm điều đó. Mỗi Class C# đều được cung cấp một Constructor mặc định (ta có thể tái cấu trúc nó), nhưng bạn hoàn toàn có thể tạo nhiều Constructors với yêu cầu là tham số cần khác nhau.
Ví dụ:
This Keyword
Tránh nhầm lẫn khi tên biến thành viên trùng với tham số đầu vào của hàm khởi tạo Constructor.Nhận biết và sử dụng lại một Constructor trong một Constructor khác.
class Animal
{
public string name { get; set; }
//Constructor
public Animal(string name)
{
this.name = name;
}
}
using System;
namespace DemoLearningCSharp
{
public class Animals
{
public int Id { get; set; }
public string Name { get; set; }
public bool Sexiness { get; set; }
public Animals()
{
//Default
}
public Animals(int id, string name)
{
Console.WriteLine("Go first...");
Id = id;
Name = name;
}
public Animals(bool sexiness)
: this(1, "Tiger")
{
Console.WriteLine("I'll follow you...");
this.Sexiness = sexiness;
}
}
}
Khởi tạo đối tượng
using System;
namespace DemoLearningCSharp
{
class Program
{
static void Main(string[] args)
{
var animal1 = new Animals(true);
Console.WriteLine("\nId: {0} \nName: {1} \nSexiness: {2}",
animal1.Id,
animal1.Name,
animal1.Sexiness);
Console.ReadLine();
}
}
}
Result:
Lưu ý khi gọi lại như vậy thì Constructor được gọi sẽ thực thi trước sau đó mới đến Constructor hiện tại. Xem lại 2 constructor bên trên !
Tùy chọn tham số mặc định
public Animals(int id, string name = "Bear", bool sexiness = true)
{
Id = id;
Name = name;
Sexiness = sexiness;
}
Khi khai báo trước giá trị mặc định như trên, bạn có thể bỏ qua Name, Sexiness khi khởi tạo mới đối tượng nếu muốn và giá trị Name, Sexiness sẽ được lấy mặc định. Nếu bạn truyền giá trị mới thì giá trị mặc định được loại bỏ.Thêm một lưu ý, các đối số được gán giá trị mặc định chỉ được nằm cuối cùng. Ví dụ như Constructor trên Id không được gán giá trị sẽ không thể nằm sau các đối số kia. (Phương thức tương tự)
(Ngoài ra this còn có nhiều công dụng khác nhưng ta chỉ tìm hiểu các vấn đề liên quan tới hướng đối tượng)
Static Keyword
Khi thiết kế một class với dữ liệu non-static thì mỗi lần tạo một đối tượng mới, dữ liệu của đối tượng đó sẽ được bảo vệ riêng biệt. Bạn có thể tạo nhiều đối tượng như vậy thông qua class đã thiết kế. Đối với một class được định nghĩa với bất kỳ thành viên nào là static thì bạn không cần phải khởi tạo mới đối tượng để sử dụng thành viên đó. Bạn chỉ cần truy xuất trực tiếp và sử dụng. Các trường hợp có thể định nghĩa static là:
- Trường dữ liệu - Field Data
- Phương thức - Methods
- Hàm khởi tạo - Constructors
- Lớp - Classes
Tính chất cốt lõi của ngôn ngữ hướng đối tượng
Các ngôn ngữ OOP như C#,VB,Java,C++... đều cần có 3 tính chất cơ bản của lập trình hướng đối tượng.- Tính đóng gói - Encapsulation
- Tính kế thừa - Inheritance
- Tính đa hình - Polymorphism
Encapsulation:
Sự ẩn đi quá trình thực thi chi tiết của đối tượng và tính toàn vẹn của dữ liệu. Có nghĩa là trong quá trình thực hiện, có thể ẩn đi các chi tiết không cần thiết tới người sử dụng đối tượng. Ví dụ ta có hàm Close(); Khi gọi hàm này, ta đóng được Form và không cần quan tâm tới chi tiết các dòng lệnh của nó.
Trong đó Access Modifier giúp đảm bảo tính toàn vẹn của dữ liệu. Trong điều kiện lý tưởng, trạng thái của một đối tượng là Private hoặc Protected. Nhưng tùy vào yêu cầu thực tế, chúng có thể được khai báo là Public và điều này dễ mang lại nhiều nguy cơ tiềm ẩn.
Inheritance:
Khả năng tái sử dụng mã nguồn của ngôn ngữ. Điều này cho phép bạn xây dựng các lớp mới dựa trên lớp có sẵn. Ví dụ bạn có một lớp cha (base class) với các chức năng cơ bản và muốn mở rộng chi tiết với từng lớp con (derived class) kế thừa nó.
Polymorphism:
Ngôn ngữ cho phép với cùng một hành vi nhưng từng đối tượng liên quan lại có cách xử lý khác nhau. Cụ thể xem qua ví du dưới đây:
Tính đa hình được thể hiện rõ qua ví dụ trên, khi gọi phương thức Eat(); Lớp cơ sở (base class) định nghĩa phương thức Eat(); Và 2 lớp con kế thừa và triển khai chi tiết phương thức này. Khi bạn sử dụng lớp cơ sở bạn có thể gọi xuống và sử dụng phương thức Eat() tùy theo mục đích của mình. Điều này cũng giống như cánh tay trái và cánh tay phải của bạn vậy, phụ thuộc vào não bộ quyết định sử dụng tay nào.
Interface
Có thể bạn đã biết, C# không cho đa kế thừa và một số ngôn ngữ OOP khác. Đây điều cần thiết để tránh các rắc rối không cần có. Thay vào đó, ta có thể kế thừa từ nhiều Interface khác nhau.(editing...)
[OOP] Lập Trình Hướng Đối Tượng Với C#
Related Tags :C# OOP
No comments:
Post a Comment
Commets Download Photoshop Actions, Lightroom Presets, PSD Template, Mockups, Stocks, Vectors, Fonts. Download free