Bài tập hướng đối tượng trong C#



Trước khi đi vào phần bài tập hướng đối tượng trong C#, mình xin nhắc lại một số khái niệm về lập trình hướng đối tượng.

Lập trình hướng đối tượng

Lập trình hướng đối tượng

Object (đối tượng) nghĩa là một thực thể trong thế giới thực, chẳng hạn như bàn, quả bóng, con bò, … Lập trình hướng đối tượng là một phương pháp để thiết kế một chương trình bởi sử dụng các lớp và các đối tượng. Nó làm đơn giản hóa việc duy trì và phát triển phần mềm bằng việc cung cấp một số khái niệm:

  • Đối tượng: Một thực thể có trạng thái và hành vi. Ví dụ như xe đạp, bàn, ghế, … Nó có thể mang tính vật lý hoặc logic.

  • Lớp: Một tập hợp các đối tượng. Nó là một thực thể logic.

  • Tính kế thừa: Khi một đối tượng đạt được các thuộc tính và các hành vi của đối tượng cha, thì đó là tính kế thừa. Điều này làm tăng tính tái sử dụng cho code. Nó được sử dụng để đạt được tính đa hình tại runtime.

  • Tính đa hình: Khi một tác vụ được thực hiện theo nhiều cách khác nhau được gọi là tính đa hình. Ví dụ: như vẽ hình chữ nhật hoặc hình tam giác, … Trong C#, chúng ta sử dụng nạp chồng phương thức (method overloading) và ghi đè phương thức (method overriding) để có tính đa hình. Một ví dụ khác: con mèo kêu meooo, còn chú chó thì sủa goooo.

  • Tính đóng gói: Đó là gắn kết code và dữ liệu cùng với nhau vào trong một đơn vị unit đơn. Ví dụ: có thể bạn đã biết đến viên thuốc con nhộng (hay đơn giản hơn là gói bột giặt), các viên thuốc (hạt bột giặt) khác nhau được đóng gói.

Bài tập Hướng đối tượng trong C#

Trong phần này mình chỉ đưa ra một ví dụ chi tiết minh họa giúp bạn cách tạo project, tạo Class, tạo đối tượng, tính kế thừa trong C#. Còn với các khái niệm khác, bạn có thể click chuột vào các đường link ở trên để tìm hiểu.

Đầu tiên tạo một project mới. Sau đó, tạo 3 class: Person, Teacher, Student, trong đó hai lớp TeacherStudent kế thừa lớp Person.

Bạn có thể tùy ý tạo các thuộc tính và các phương thức cho các lớp này. Chẳng hạn: lớp Person có phương thức setAge(int age), lớp Student có phương thức GoToClass() để in ra thông báo I'm going to class., ...

Bài tập C# này minh họa giúp bạn cách tạo một class, cách tạo một đối tượng, tính kế thừa trong C#.

Chương trình C#

Dưới đây là chương trình C# minh họa lời giải cho bài tập hướng đối tượng trong C#. Bạn nên tạo mỗi class trong một file riêng rẽ, rồi sau đó tạo một class chung có chứa phương thức main() để thao tác với các lớp này:

Lớp Person:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace VietJackCsharp
{
    class Person
    {
        protected int age;
        public void LoiChao()
        {
            Console.WriteLine("Hello VietJack!!!");
        }
        public void SetAge(int n)
        {
            age = n;
        }
    }
}

Lớp Student: Sử dụng dấu hai chấm (:) để nói rằng lớp Student đang kế thừa lớp Person.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace VietJackCsharp
{
    class Student : Person
    {
        public void ThongBaoTuoi()
        {
            Console.WriteLine("Tuoi cua ban la: {0} tuoi", age);
        }
    }
}

Lớp Teacher: Sử dụng dấu hai chấm (:) để nói rằng lớp Teacher đang kế thừa lớp Person.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace VietJackCsharp
{
    class Teacher : Person
    {
        private string mon_hoc;
        public void GiangDay()
        {
            Console.WriteLine("Bat dau giang day!!!");
        }
    }
}

Cuối cùng, bạn tạo một lớp có tên là StudentAndTeacherTest: Đây là lớp chứa phương thức main() và là lớp nơi chúng ta làm việc chính.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace VietJackCsharp
{
    class StudentAndTeacherTest
    {
        static void Main()
        {
            bool debug = false;            Console.WriteLine("\nLap trinh huong doi tuong trong C#");
            Console.WriteLine("----------------------------------\n");
            //tao doi tuong Person va goi phuong thuc Greet()
            Person myPerson = new Person(); //day la constructor mac dinh
            myPerson.LoiChao();            /*tao mot doi tuong Student, thiet lap tuoi cho sinh vien nay la 21, 
              gui loi chao toi anh ta va thong bao tuoi*/
            Student myStudent = new Student(); //day la constructor mac dinh
            myStudent.SetAge(21);
            myStudent.LoiChao();
            myStudent.ThongBaoTuoi();            /*tao mot doi tuong Teacher, thiet lap tuoi cho giang vien nay la 30, 
             *de nghi anh ta chao va bat dau giang day*/
            Teacher myTeacher = new Teacher(); //day la constructor mac dinh
            myTeacher.SetAge(30);
            myTeacher.LoiChao();
            myTeacher.GiangDay();            if (debug)
                Console.ReadLine();            Console.ReadKey();
        }
    }
}

Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.

Sau khi tạo xong mọi thứ, cấu trúc project của chúng ta sẽ có dạng sau:

Bài tập hướng đối tượng trong C#

Kết quả chương trình C#

Biên dịch và chạy chương trình C# trên sẽ cho kết quả:

Bài tập hướng đối tượng trong C#