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.

class Animal
{
    public string name { get; set; }
    //Constructor
    public Animal(string name)
    {
        this.name = name;
    }
}
Nhận biết và  sử dụng lại một Constructor trong một Constructor khác.

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
Một Class được định nghĩa là static thì không thể kế thừa class, interface khác. Và các thành viên đều phải là kiểu static. Ngược lại thành viên có thể là static hoặc không


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:
Animals Class
Elephant Class

Tiger Class
Program Class
Result

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...)

thumbnail [OOP] Lập Trình Hướng Đối Tượng Với C#

data:label.name author

premiumpng.com

Design Publisher

Download 0
No comments
Template in .PSD format

MR Laboratory License

Free for personal purpose use . More info


Buy Now This Template

No comments:

Post a Comment

Commets Download Photoshop Actions, Lightroom Presets, PSD Template, Mockups, Stocks, Vectors, Fonts. Download free

Newer Post Older Post Home

Copyright © 2021 MR Laboratory All rights reserved.

Setting