阿摩線上測驗 登入

申論題資訊

試卷:110年 - 110 專技高考_資訊技師:系統分析與資訊安全#104067
科目:系統分析與資訊安全
年份:110年
排序:0

申論題內容

四、抽象資料型態(Abstract Data Type, ADT)是使用資料抽象化的方法建立 的自訂資料型態,包含資料與相關操作兩大部分,請問在 C++、C#與 Java 等語言時,此自訂資料型態稱為什麼?請舉例繪圖說明。(20 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
#include <iostream>
using namespace std;
// 定義一個 Car 類
class Car {
public:
    // 屬性
    string color;
    int doors;
    int engineCapacity;
    // 方法
    void start() {
        cout << "Car is starting." << endl;
    }
    void accelerate() {
        cout << "Car is accelerating." << endl;
    }
    void brake() {
        cout << "Car is braking." << endl;
    }
};
class SUV : public Car {  // 繼承自 Car 類別
public:
    void start() {
        cout << color << " SUV with " << doors << " doors and " << engineCapacity << " cc engine is starting." << endl;
    }
    void accelerate() {  // 覆蓋父類別的方法
        cout << color << " SUV is accelerating quickly." << endl;
    }
};
int main() {
    // 創建一個 SUV 物件
    SUV mySUV;
    mySUV.color = "Red";
    mySUV.doors = 4;
    mySUV.engineCapacity = 3000;
    // 使用 SUV 物件的方法
    mySUV.start();
    mySUV.accelerate();
    mySUV.brake();
    // 輸出 SUV 物件的屬性
    cout << "Color: " << mySUV.color << endl;
    cout << "Doors: " << mySUV.doors << endl;
    cout << "Engine Capacity: " << mySUV.engineCapacity << " cc" << endl;
    return 0;
}
C# 範例
csharp
複製程式碼
using System;
// 定義一個 Car 類
public class Car {
    // 屬性
    public string Color { get; set; }
    public int Doors { get; set; }
    public int EngineCapacity { get; set; }
    // 方法
    public void Start() {
        Console.WriteLine("Car is starting.");
    }
    public void Accelerate() {
        Console.WriteLine("Car is accelerating.");
    }
    public void Brake() {
        Console.WriteLine("Car is braking.");
    }
}
public class SUV : Car {  // 繼承自 Car 類別
    public new void Start() {
        Console.WriteLine($"{Color} SUV with {Doors} doors and {EngineCapacity} cc engine is starting.");
    }
    public new void Accelerate() {  // 覆蓋父類別的方法
        Console.WriteLine($"{Color} SUV is accelerating quickly.");
    }
}
public class Program {
    public static void Main() {
        // 創建一個 SUV 物件
        SUV mySUV = new SUV();
        mySUV.Color = "Red";
        mySUV.Doors = 4;
        mySUV.EngineCapacity = 3000;
        // 使用 SUV 物件的方法
        mySUV.Start();
        mySUV.Accelerate();
        mySUV.Brake();
        // 輸出 SUV 物件的屬性
        Console.WriteLine($"Color: {mySUV.Color}");
        Console.WriteLine($"Doors: {mySUV.Doors}");
        Console.WriteLine($"Engine Capacity: {mySUV.EngineCapacity} cc");
    }
}
Java 範例
java
複製程式碼
// 定義一個 Car 類
public class Car {
    // 屬性
    public String color;
    public int doors;
    public int engineCapacity;
    // 方法
    public void start() {
        System.out.println("Car is starting.");
    }
    public void accelerate() {
        System.out.println("Car is accelerating.");
    }
    public void brake() {
        System.out.println("Car is braking.");
    }
    public static void main(String[] args) {
        // 創建一個 SUV 物件
        SUV mySUV = new SUV();
        mySUV.color = "Red";
        mySUV.doors = 4;
        mySUV.engineCapacity = 3000;
        // 使用 SUV 物件的方法
        mySUV.start();
        mySUV.accelerate();
        mySUV.brake();
        // 輸出 SUV 物件的屬性
        System.out.println("Color: " + mySUV.color);
        System.out.println("Doors: " + mySUV.doors);
        System.out.println("Engine Capacity: " + mySUV.engineCapacity + " cc");
    }
}
class SUV extends Car {  // 繼承自 Car 類別
    @Override
    public void start() {
        System.out.println(color + " SUV with " + doors + " doors and " + engineCapacity + " cc engine is starting.");
    }
    @Override
    public void accelerate() {  // 覆蓋父類別的方法
        System.out.println(color + " SUV is accelerating quickly.");
    }
}
繪圖說明
以下是模擬一輛紅色、四門、3000 cc 的休旅車的類的結構圖:
sql
複製程式碼
+-------------------------+
|         Car             |
+-------------------------+
| - color: String         |
| - doors: int            |
| - engineCapacity: int   |
+-------------------------+
| + start(): void         |
| + accelerate(): void    |
| + brake(): void         |
+-------------------------+
          ^
          |
          |
   +-------------------------+
   |         SUV             |
   +-------------------------+
   | inherits from Car       |
   +-------------------------+
   | + start(): void         |
   | + accelerate(): void    |
   +-------------------------+

解釋

屬性(Properties/Attributes):
color:車的顏色。
doors:車的門數。
engineCapacity:車的引擎容量。
方法(Methods/Operations):
start():啟動車輛。
accelerate():加速車輛。
brake():煞車車輛。
這樣的類結構圖展示了如何將屬性和方法封裝在一個類中,以實現抽象資料型態(ADT)的概念。在 C++、C# 和 Java 中,類都是用來實現這種資料抽象的基本單位。

物件導向程式設計中的三種特性

在物件導向程式設計(OOP)中,物件的三種主要特性是封裝(Encapsulation)、繼承(Inheritance)和多型(Polymorphism)。以下是這三種特性的詳細說明:

  1. 封裝(Encapsulation)

    • 定義:將資料(屬性)與處理資料的方法(函數或方法)封裝在一起,組成一個獨立的單元(物件),並保護資料不被外界直接訪問或修改,只能通過物件的方法進行操作。
    • 例子:將汽車的屬性(如顏色、門數、引擎容量等)和方法(如啟動、加速、煞車等)封裝在一起,形成一個汽車物件。
  2. 繼承(Inheritance)

    • 定義:一個類別(子類別)可以繼承另一個類別(父類別)的屬性和方法,從而重用和擴展現有的程式碼。
    • 例子:可以有一個一般汽車類別,休旅車類別可以繼承一般汽車類別,並擴展其功能。
  3. 多型(Polymorphism)

    • 定義:不同的物件可以對相同的方法呼叫做出不同的反應。這通常通過方法覆蓋(Method Overriding)實現,即子類別可以重新定義父類別的方法。
    • 例子:不同類型的汽車可以有各自不同的加速方法,但它們都可以通過相同的方法名稱(如 accelerate)被呼叫。