0

Bài 10: Class, Object và Constructor - Tư duy hướng đối tượng.

🎯 Mục tiêu bài học

  1. Hiểu bản chất của Lớp (Class) và Đối tượng (Object) trong mô hình OOP.

  2. Khai báo thuộc tính (Fields) và phương thức (Methods) để mô tả thực thể.

  3. Sử dụng Constructor để khởi tạo dữ liệu an toàn ngay khi tạo Object.

📖 Phần 1: Phân biệt Class và Object

Trong thế giới thực, khi xây dựng một hệ thống Backend, bạn không làm việc với các biến rời rạc mà làm việc với các thực thể có mối liên hệ với nhau.

  • Class (Lớp): Là bản thiết kế (Blueprint). Nó định nghĩa một thực thể sẽ có những dữ liệu gì và hành vi nào, nhưng bản thân nó không chứa dữ liệu cụ thể. (Ví dụ: Bản thiết kế chung của một Developer).

  • Object (Đối tượng): Là thực thể sống được tạo ra từ Class đó. (Ví dụ: Lập trình viên tên Hiếu, chuyên môn Backend, là một Object cụ thể được đúc ra từ khuôn Developer).

📖 Phần 2: Khai báo Class và tạo Object

Thông thường, mỗi Class được viết trong một file .cs riêng biệt và đặt tên theo chuẩn PascalCase (viết hoa chữ cái đầu mỗi từ).

1. Xây dựng Class (Bản thiết kế)

C#

// Khai báo class đại diện cho một Lập trình viên
class Developer
{
    // 1. Fields (Thuộc tính / Trạng thái)
    public string fullName;
    public string role;
    public int experienceYears;

    // 2. Methods (Hành vi / Chức năng)
    public void WriteCode()
    {
        Console.WriteLine($"{fullName} dang viet code cho he thong {role}.");
    }

    public void ShowProfile()
    {
        Console.WriteLine($"Dev: {fullName} | Vi tri: {role} | Kinh nghiem: {experienceYears} nam");
    }
}

2. Khởi tạo Object (Thực thể sống)

Để tạo ra một đối tượng từ Class, bạn sử dụng từ khóa new.

C#

// Tạo object dev1 từ class Developer
Developer dev1 = new Developer();

// Gán dữ liệu thực tế cho các thuộc tính
dev1.fullName = "Nguyen Minh Hieu";
dev1.role = "Backend C#";
dev1.experienceYears = 2;

// Yêu cầu object thực hiện hành vi
dev1.ShowProfile();
dev1.WriteCode();

📖 Phần 3: Constructor (Hàm khởi tạo)

Nếu bạn khởi tạo một Developer bằng new Developer() nhưng quên gán tên hoặc vị trí, hệ thống có thể bị lỗi khi xử lý dữ liệu rỗng ở các bước sau. Constructor (Hàm khởi tạo) ra đời để ép buộc bạn phải cung cấp những dữ liệu cốt lõi ngay khi Object vừa "chào đời".

  • Đặc điểm: Tên Constructor bắt buộc trùng hoàn toàn với tên Class và không có kiểu trả về (kể cả void).

C#

class Developer
{
    public string fullName;
    public string role;

    // Constructor yêu cầu truyền ngay Tên và Vị trí khi tạo mới
    public Developer(string name, string devRole)
    {
        fullName = name;
        role = devRole;
        Console.WriteLine($"[He thong] Da tao thanh cong ho so cho: {fullName}");
    }
}

// Cách sử dụng: Không thể khởi tạo trống nữa, bắt buộc truyền đủ tham số
Developer myDev = new Developer("Nguyen Minh Hieu", "Backend C#");

💻 Phần 4: Thực hành

Chúng ta sẽ viết một chương trình quản lý Kết nối Database giả lập, sử dụng Constructor để thiết lập chuỗi kết nối ngay khi khởi tạo:

C#

using System;

namespace Lesson10
{
    class DatabaseConnection
    {
        public string dbName;
        public string host;
        public bool isConnected;

        // Constructor thiết lập cấu hình mặc định
        public DatabaseConnection(string database, string hostAddress)
        {
            dbName = database;
            host = hostAddress;
            isConnected = false; // Mặc định vừa tạo ra thì chưa kết nối
        }

        public void Connect()
        {
            Console.WriteLine($"Dang ket noi den {dbName} tai {host}...");
            isConnected = true;
            Console.WriteLine("-> Ket noi thanh cong!");
        }

        public void Disconnect()
        {
            if (isConnected)
            {
                isConnected = false;
                Console.WriteLine($"-> Da ngat ket noi khoi {dbName}.");
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Tạo đối tượng kết nối và bắt buộc truyền cấu hình
            DatabaseConnection db = new DatabaseConnection("ECommerceDB", "127.0.0.1");
            
            db.Connect();
            db.Disconnect();

            Console.ReadLine();
        }
    }
}

🛠 Bài tập thực hành

Yêu cầu: Xây dựng Class mô phỏng một Server lưu trữ:

  1. Tạo Class Server gồm các thuộc tính: serverName (Tên server), ipAddress (Địa chỉ IP), status (Trạng thái - kiểu chuỗi).

  2. Viết Constructor nhận vào 2 tham số serverName và ipAddress. Riêng thuộc tính status hãy gán cứng giá trị là "Offline" ngay bên trong constructor mà không cần nhận từ ngoài vào.

  3. Viết method Start() để đổi status thành "Online" và in ra thông báo máy chủ đã khởi động.

  4. Ở hàm Main, khởi tạo một Server, in ra trạng thái ban đầu, gọi hàm Start() và in lại trạng thái để kiểm tra sự thay đổi.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí