物件導向程式設計 申論題歷屆試題與參考架構

三等考試,民國 104~115 年共 11 份試卷、48 題,其中 33 題附參考答題架構。考這一科的類科:一般警察・警察資訊管理人員。本頁列出歷年全部題目,參考架構只列開頭的「破題」,完整的答題架構、關鍵字與作答提醒請到站內查看。

▶ 看完整參考架構(物件導向程式設計)

115 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    請說明物件導向語言中多型(polymorphism)之前提(使用情境)和功能,並須繪製統一塑模語言(UML)之類別圖,進而舉簡潔範例程式碼說明之。(30 分)

    (30 分)

    參考架構・破題

    多型(polymorphism)是指同一個訊息(方法呼叫)送給不同型別的物件,會依物件實際型別執行不同的行為。作答應先講前提,再講功能,最後以類別圖與程式碼佐證。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    請說明物件導向語言中(interface)之前提(使用情境)和功能,並須繪製統一塑模語言(UML)之類別圖,進而舉簡潔範例程式碼說明之。 (30 分)

    (30 分)

    參考架構・破題

    介面(interface)是只宣告行為契約(方法簽章)而不規範實作的型別,讓不相關的類別可以承諾提供相同的能力。作答先說明使用情境與功能,再以類別圖與程式碼說明。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    請以物件導向語言設計一個簡易文字模式介面的登入程式。程式需包含一般使用者(User)與高階使用者(Vuser)二個類別。一般使用者類別內之資料需包含有使用者姓名(Name) 、一般密碼(Passwd) 。高階使用者類別內之資料需包含有使用者姓名(Name)、安全密碼(Vpasswd)、權限等級(Vp)。其中密碼皆十個字元,然而安全密碼必須含有英文大小寫和數字。作答內容除程式碼外,亦須繪製統一塑模語言(UML)之類別圖,程式語言可採用 C++、C#、Java 或 Python,程式內變數與函數的命名必須具有可讀性,另亦須撰寫完整的程式碼來驗證程式執行的正確性。(40 分)

    (40 分)

    參考架構・破題

    本題考類別設計、繼承(Vuser 與 User 有共同欄位 Name)、密碼規則驗證與測試程式。建議以共同父類別抽出 Name,再讓兩類別各自處理密碼。

    完整答題架構與關鍵字:到站內看全文

114 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    針對下列 C++程式碼,請說明其輸出與其程式 p.print()、q.split()(Line 28, 29)執行之運作流程邏輯;並請說明在 testPattern()中測試 Pattern 類別split()(Line 27, 29),對於「指令與條件判斷涵蓋度」不足之處。(25 分)01 #include <iostream> 02 #include <string> 03 #include <vector> 04 using namespace std; 05 class Pattern { 06 public: 07 Pattern(string data) { this->data = data; } 08 void split(string symbol) { 09 int start = 0, stop = 0; 10 stop = data.find(symbol); 11 while (stop != string::npos) { 12 if (stop - start != 0) words.push_back(data.substr(start, stop - start)); 13 start = stop + symbol.size(); 14 stop = data.find(symbol, start); 15 } 16 if (start != length) words.push_back(data.substr(start)); 17 } 18 void print() { for (auto& s : words) cout << s << "#"; cout<<endl; } 19 private: 20 string data; 21 vector <string> words; 22 int length; 23 }; 24 void testPattern() { 25 Pattern p("this is a test"); 26 Pattern q("that was so happle"); 27 p.split(" "); 28 p.print(); 29 q.split("ha"); 30 q.print(); 31 } 32 int main() { 33 testPattern(); 34 return 0; 35 }

    (25 分)

  2. 2

    下列 Java 程式碼計算食物(Food)料理(cook)後,動物(Animal)擷取之卡路里量。請完成統一塑模語言 UML 圖;並說明其執行後的輸出,以及多型(Polymorphism)、封裝(Encapsulation)發生所在之程式碼行數。(25 分)01 abstract class Food { 02 public Food(int cal, String type) { _____ 03 this.calorie = cal; Anamial 04 this.type = type; Food 05 } _____ 06 abstract public void cook(int c); _____ 07 public String show(int c) { _____ 08 String result = type+":"; 09 cook(c); 10 result += calorie; 11 return result; 12 } Bread Beef 13 protected int calorie; // 卡路里 additives condiments private String type; 15 } 16 class Bread extends Food { 17 public Bread(int c, int a) { 18 super(c, "Bread"); 19 additives = a; 20 } 21 public void cook(int cal) { calorie += additives*cal; } 22 private int additives; 23 } 24 class Beef extends Food { 25 public Beef(int c) { 26 super(c, "Beef"); 27 condiments = c*2; 28 } 29 public void cook(int cal) { calorie += condiments%cal; } 30 private int condiments; 31 } 32 class Anamial { 33 public Anamial(Food f) {food = f;} 34 public String getCal() { return food.show(2); } 35 private Food food; 36 } 37 public class FoodTest { 38 public static void main(String[] args) { 39 Food f1 = new Bread(3, 2); 40 Food f2 = new Bread(2, 3); 41 Food f3 = new Beef(3); 42 Anamial a1 = new Anamial(f1); 43 Anamial a2 = new Anamial(f2); 44 Anamial a3 = new Anamial(f3); 45 System.out.println(a1.getCal()); 46 System.out.println(a2.getCal()); 47 System.out.println(a3.getCal()); 48 } 49 }

    (25 分)

    參考架構・破題

    本題要做三件事:補完 UML 類別圖、追蹤程式算出三行輸出、指出多型與封裝出現在哪幾行。關鍵是看懂抽象類別 Food 的 show() 在第 09 行呼叫 cook(c),執行時會依實際物件是 Bread 還是 Beef 呼叫不同的 cook(動態繫結)。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    針對下列 C++程式碼,請修正程式碼行數 58「Job jobs ...」的錯誤及修正錯誤後正確執行之輸出;並請說明 Employee 類別 candidate 資料的運作原理,以及程式碼行數 61「e1.arrange()」程式執行之運作流程。 (25 分)01 #include <iostream> 02 #include <string> 03 #include <map> 04 using namespace std; 05 class Job { 06 public: 07 Job(string _name, int _sa, int _sk) { 08 name = _name; 09 salary = _sa; 10 skill = _sk; 11 employee_name = "None"; 12 } 13 string getName() { return name; } 14 int getSalary() { return salary; } 15 int getSkill() { return skill; } 16 void hire(string _name) { employee_name = _name; } 17 void print() { cout << name <<"::"<<employee_name<<endl; } 18 private: 19 string name; 20 int salary; 21 int skill; 22 string employee_name; 23 }; 24 class Employee { 25 public: 26 Employee(string _name, int _sa, int _sk) { 27 name = _name; 28 salary = _sa; 29 skill = _sk; 30 } 31 void match(Job *m) { 32 if ((m->getSalary() >= salary) && (skill >= m->getSkill())) { 33 candidate[m->getName()] = m; 34 } 35 } 36 void arrange() { 37 int score = 0; 38 Job *jb, *jb_wanted; 39 for (auto c = candidate.begin(); c != candidate.end(); ++c) { 40 jb = c->second; // get value of MAP 41 if (jb->getSalary() >= score) { 42 score = jb->getSalary(); 43 jb_wanted = jb; 44 } 45 } 46 jb_wanted->hire(name); 47 } 48 string getName() { return name; } 49 private: 50 string name; 51 int salary; 52 int skill; 53 map <string, Job *> candidate; 54 }; 55 int main() { 56 Employee e1("Tom", 37, 85); 57 Employee e2("John", 35, 75); 58 Job jobs[] ={ new Job("RD", 45, 75), new Job("Sales", 35, 70), 59 new Job("Manager", 55, 80)}; 60 for (int i=0; i<3; i++) e1.match(jobs[i]); 61 e1.arrange(); 62 for (int i=0; i<3; i++) e2.match(jobs[i]); 63 e2.arrange(); 64 for (int i=0; i<3; i++) jobs[i]->print(); 65 return 0; 66 }

    (25 分)

  4. 4

    針對下列 C++程式碼,請說明其輸出與其 inpuScore()、computeAverage()執行之運作流程邏輯;並請說明 computeAverage()設計上的問題。 (25 分)01 #include <stdexcept> 02 #include <iostream> 03 #include <string> 04 using namespace std; 05 class Student{ 06 public: 07 Student(string n) { name = n; math_score = eng_score =average =0; } 08 void checkSmall(int s) { 09 if (s<0) throw out_of_range("small"); 10 cout<<"ok,"; 11 }; 12 void inpuScore(int m_s, int e_s) { 13 try { 14 checkSmall(m_s); checkSmall(e_s); 15 math_score = m_s; 16 eng_score = e_s; 17 } 18 catch(exception &e) { cout<<e.what()<<endl; } 19 } 20 void computeAverage(int n) { 21 try { 22 if (n<=0) throw out_of_range("zero"); 23 average = (math_score+eng_score)/n; 24 } 25 catch(exception &e) { cout<<"exc"<<endl; } 26 catch(out_of_range &e) { cout<<e.what()<<endl; } 27 } 28 void print() { cout << name <<":"<<average<<endl; } 29 private: 30 int math_score; // 數學成績31 int eng_score; // 英文成績32 int average; // 平均成績33 string name; 34 }; 35 void test01() { 36 Student stu("John"); 37 stu.inpuScore(0, 0); 38 stu.inpuScore(100, -1); 39 stu.inpuScore(100, 90); 40 stu.print(); 41 } 42 void test02() { 43 Student stu("Tom"); 44 stu.inpuScore(100, 90); 45 stu.computeAverage(0); 46 stu.print(); 47 } 48 int main() { 49 test01(); 50 test02(); 51 return 0; 52 }

    (25 分)

113 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    請寫出下列 Python 程式碼的執行結果,注意必須解析程式碼內容來說明如何得到執行結果。 (15 分)class X: def init(self, a): self.a = a def fun(self): self.a *= 3 class Y(X): def init(self, b): super().init(3) self.b = b def fun(self): self.a += 2 obj = Y(21) obj.fun() print(obj.a, obj.b)

    (15 分)

  2. 2

    請寫出下列 C++程式碼的執行結果,注意必須解析程式碼內容來說明如何得到執行結果。(15 分)#include <stdio.h> #include <stdlib.h> #define NUM 10 void fun1(int *, int); int main(void) { int a[NUM] = {1,2,3,4,5,6,7,8,9,10}; fun1(a, 5); printf("\n"); return 0; } void fun1(int *b, int size) { if (size > 0) { fun1(b+1, size-1); printf("%d_", *b); } }

    (15 分)

  3. 3

    請以物件導向語言設計一個簡易文字模式介面的班級成績計算程式。程式需包含學生(Student)與班級(Class)二個類別。 學生類別內資料需包含有學生姓名、中英數三科個別成績與平均成績(三科成績加總除以 3) 。函數需包含有輸入學生姓名、輸入學生各科成績、顯示學生姓名與成績(各科成績與平均成績) 、計算學生平均成績。 班級類別內資料需包含有班級名稱、學生類別資料、班級各科平均成績與總平均成績(各科平均成績加總除以 3) 、班級各科成績最高分同學的姓名及成績。函數需包含有計算班級各科平均成績與總平均成績、計算與顯示各科成績最高分學生的姓名及成績。作答內容除程式碼外,亦須繪製統一塑模語言(UML)之類別圖,程式語言可採用 C++、C#、Java 或 Python,程式內變數與函數的命名必須具有可讀性,另亦須撰寫完整的程式碼來驗證程式執行的正確性。 (40 分)

    (40 分)

    參考架構・破題

    這是 40 分的實作題,閱卷看三件事:UML 類別圖是否與程式一致、類別職責切分是否合理(學生管自己的成績、班級管統計)、程式是否完整可執行並附測試資料與輸出。先畫圖再寫碼,命名要有可讀性。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    物件導向程式設計中的單例(Singleton)設計模式,目的在確保整個系統中只有一個此類別的實例化物件,以保障在多使用者環境下關鍵資料唯一性的資料安全。請依下列類別圖實作出一個在單執行緒環境下的單例模式程式碼,且 Main 函數執行結果如下。產品編號:1產品名稱:個人電腦作答可選用 C++、C#、Java 或 Python,但副檔名須依使用的程式語言來命名。

    (一)請撰寫 Program 程式碼。(15 分)

    (二)請撰寫 ProductManager 程式碼。(15 分)

    (30 分)

111 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    下列類別圖及 C#程式碼是一個影像識別軟體 ImageDetector.exe 的類別設計與部分程式碼,請依以下二個程式執行的結果來撰寫各小題的程式碼。(每小題 5 分,共 15 分)影像識別軟體的類別圖:影像識別軟體的部分程式碼:Program.cs class Program { void Main(string[] args) { IFoo foo = null; if (args.Length > 0) { if (args[0] == "1") foo = new FooFeature(); else if (args[0] == "2") foo = new FooFeatureFast(); string text = foo.Run(); Console.WriteLine(text); } else { Console.WriteLine("The arguments is null value."); } } }影像識別軟體程式執行結果(1):C:\> ImageDetector.exe 1 Hi FooFeature Class!影像識別軟體程式執行結果(2):C:\> ImageDetector.exe 2 Hi FooFeatureFast Class!

    (一)請撰寫 IFoo.cs 程式碼。

    (二)請撰寫 FooFeatureFast.cs 程式碼。

    (三)請撰寫 FooFeature.cs 程式碼。

    (15 分)

    參考架構・破題

    本題考介面與多型:Program 以 IFoo 型別接收兩種實作,因此需定義介面 IFoo,再讓 FooFeature、FooFeatureFast 各自實作,輸出文字須與執行結果一致。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    資訊封裝(encapsulation)是物件導向程式設計重要的特性之一,其主要目的是在確保資料存取的安全。下列 UML 類別圖是一個員工資料規劃,包括個人基本資料及薪資等資料。單位內的員工(Employee)分成正職人員(Staff)及約聘人員(Contractor)。正職人員的薪資包含本俸(Salary)及職務津貼(Allowance),約聘人員為單一薪資且須符合國家最低薪資25250 元。查詢總薪資(TotalSalary)時正職人員須加總本俸及職務津貼。建立人員資料時須檢核身分證字號是否符合編碼規則,身分證字號為員工資料查詢及更新時的關鍵欄。請依據上述說明來回答各小題。(每小題 5 分,共 20 分)

    (一)類別圖中有關資訊封裝的設計有誤,請修正繪出正確的類別圖,以符合題目說明之需求。

    (二)請依修正後的類別圖撰寫 Employee 類別的程式碼,無須實作身分證檢查演算式,但須實作出函數及回傳值等程式碼。

    (三)請依修正後的類別圖撰寫 Staff 類別的程式碼,須實作演算式以符合題目說明之查詢需求。

    (四)請依修正後的類別圖撰寫 Contractor 類別的程式碼,須實作演算式以符合題目說明之資料維護需求。

    (20 分)

    參考架構・破題

    資訊封裝的原則是屬性設為私有(private),透過公開方法(getter/setter)存取並在其中檢核。原類別圖多半把屬性設為 public,應修正。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    使用第二題中的類別建立一位員工資料的串列,並以 Staff 及 Contractor類別各建立一筆資料,須檢核身分證字號正確後,再將資料物件加入串列中;完成二筆資料後再以迴圈方式將這二筆資料中的身分證字號、姓名、總薪資列印至螢幕。本題無須撰寫第二題中的類別程式,僅須撰寫本題所須的應用程式碼即可。撰寫的程式碼輸出結果必須與以下輸出畫面相同,變數、函數及類別名稱須依第二題之類別圖中的屬性及方法名稱來宣告,串列及物件名稱須依下列指定名稱來實作程式。 (20 分)串列變數名稱:employees正職人員物件變數名稱:staff約聘人員物件變數名稱:contractor程式執行輸出畫面如下:身分證:A123456789、姓名:王建國、總薪資:80000身分證:B123456789、姓名:李大明、總薪資:31000

    (20 分)

    參考架構・破題

    本題是應用程式:使用第二題的類別,先檢核身分證字號、再加入串列、最後以迴圈輸出。重點是多型與檢核的先後順序。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    請依下列遞迴函數的 C#程式碼,回答程式執行的結果為何?(25 分)static void Main(string[] args) { Sum(9); } public static int Sum(int num) { if (num < 1) { return 0; } else { int result = num + Sum(num - 2); Console.WriteLine(String.Format("Num: {0}",result)); return result; } }

    (25 分)

  5. 5

    物件導向程式設計的類別屬性及方法依讀取的透通度可分為 public、protected 及 private 三種,請回答下圖類別 Program 及類別 Rectangle 所能讀取 Shape 類別中的屬性及方法有那些?(20 分)

    (20 分)

    參考架構・破題

    本題考存取修飾子與繼承的關係:Program 與 Shape 只有關聯(使用)關係,屬於外部類別;Rectangle 繼承 Shape,屬於子類別。依 public、protected、private 的可見範圍分別列出即可,並說明理由。

    完整答題架構與關鍵字:到站內看全文

110 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    請寫出執行下列 Java 程式碼的輸出結果。(15 分)

    (一)public class Testa { public static void main(String[ ] args) { int [ ] a = {1, 2, 3, 4}; swap( a ); System.out.println( "a [0] = " + a [0] ); } public static void swap(int [ ] data) { int temp = data[0]; data[0] = data [ data.length – 1 ]; data [ data.length – 1 ] = temp; } }

    (二)public class Testb{ public static void main(String[ ] args) { T t = new T ( ); swap( t ); System.out.println( " e1 = " + t.e1 + ", e2 = " + t.e2); } public static void swap(T t) { int temp = t.e1; t.e1 = t.e2; t.e2 = temp; } } class T { int e1 = 1 ; int e2 = 2 ; }

    (三)public class Testb{ public static void main(String[ ] args) { T t = new T ( ); swap( t.e1, t.e2 ); System.out.println( " e1 = " + t.e1 + ", e2 = " + t.e2); } public static void swap(int e1, int e2) { int temp = e1; e1 = e2; e2 = temp; } } class T { int e1 = 1 ; int e2 = 2 ; }

    (15 分)

  2. 2

    請設計程式,定義一個名為 Flower 的類別(class) ,該類別中每個物件有三個 private 實例變數(instance variables),分別代表花的名稱(name) 、花瓣個數(petal)和價格(price) ,其資料型態分別為 String, int 和 float。您的類別應包含相關資料宣告、建構函式(constructor)以及存取三個資料的 getter 和 setter 方法(methods)。(30 分)

    (30 分)

    參考架構・破題

    本題考封裝(Encapsulation)的基本實作:以 Java 定義 Flower 類別,屬性一律 private,再以建構函式初始化、以 getter/setter 對外存取。程式雖短,但要把語法與觀念寫完整才拿得到高分。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    Java 程式執行期間的錯誤會以例外(Exception)的形式被丟出。如果例外不作處理,程式便會終止執行。請列舉出任意三種執行期間例外(RuntimeException)的子類別(subclass)名稱,並說明其發生原因。(15 分)請說明在例外處理中使用 finally 子句(clause)的主要目的。 (5 分)

    (20 分)

    參考架構・破題

    本題分兩部分:第一,列舉三種 RuntimeException 子類別並說明成因;第二,說明 finally 子句的用途。都是 Java 例外處理的基本題,重點是名稱寫對、原因寫具體。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    請分別說明 this 及 super 兩個關鍵字(keyword)的使用情境。(10 分)

    (10 分)

    參考架構・破題

    this 代表「目前物件本身」,super 代表「父類別」的成員或建構函式。兩者都是物件導向繼承與多型中常用的關鍵字,作答時要分別說明使用情境並各配簡短程式範例。

    完整答題架構與關鍵字:到站內看全文

  5. 5

    請設計程式從檔案(data.txt)讀入整數資料。若其中有資料重複出現,僅保留首次出現者,去除第二次以及後續之重複資料。最後,按原順序將資料輸出至檔案 unique.txt。(25 分)檔案data.txt內容 檔案unique.txt內容範例一 3 4 5 7 9 5 4 19 4 3 4 5 7 9 19範例二 128 5 7 23 4 128 5 7 23 4

    (25 分)

    參考架構・破題

    本題是檔案輸入輸出加上資料去重:讀入 data.txt 的整數,保留每個數字第一次出現的位置,其餘重複者丟棄,依原順序寫入 unique.txt。核心是「用集合判斷是否出現過,用有序結構保存輸出順序」。

    完整答題架構與關鍵字:到站內看全文

109 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    請說明物件導向語言中 Private, Public, Protected 如何運用?並說明類型(class)和物件(object)在執行時記憶體配置上的主要差異。(25 分)

    (25 分)

    參考架構・破題

    本題分兩部分:一是存取修飾子(access modifier)如何實現封裝與資訊隱藏,二是類別與物件在執行時記憶體配置的差異。兩部分篇幅約各半,最好搭配簡短程式例與對照表。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    請說明物件導向語言中超載(overloading)和覆寫(overriding)之前提(使用情境)和功能。(25 分)

    (25 分)

    參考架構・破題

    超載與覆寫都是多型的表現,但超載發生在同一範疇、編譯時決定(靜態多型);覆寫發生在繼承關係、執行時決定(動態多型)。作答依「前提、功能、比較表、程式例」四部分呈現。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    若有大量資料要處理,想利用多執行緒加速執行已有的 BST()二元搜尋樹建構類別執行,請寫出 Pseudo code。(25 分)

    (25 分)

    參考架構・破題

    BST 插入要沿路徑修改指標,多個執行緒同時插入同一棵樹會發生競爭條件(race condition);整棵樹加一把鎖又等於序列化,沒有加速。因此重點是「如何切分工作免共享」與「必要時如何同步」,再寫出 Pseudo code。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    物件導向的繼承方式主要分為單一繼承與多重繼承兩種,此兩種繼承方法優缺點各為何?JAVA 只有單一繼承,如何解決?請舉例說明。(25 分)

    (25 分)

    參考架構・破題

    單一繼承結構清楚但重用受限;多重繼承彈性大但有菱形問題與名稱衝突。Java 為避免多重繼承的複雜度只允許類別單一繼承,改以介面(interface)多重實作與組合來補足。作答分「比較、Java 解法、程式例」三段。

    完整答題架構與關鍵字:到站內看全文

108 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    若使用者輸入 17、18、19,請問輸出為多少?(25 分)#include<iostream> using namespace std; int main(){ int n; int i; int ans; int h; while( cin >> n ) { ans = 1; h = n/2; i = 2; while( i <= h ) { if( n%i == 0 ) { ans = 0; } i = i+1; } if( ans == 1 ) {cout <<"Y"<<endl;} else if (ans ==2) {cout <<"M"<<endl;} else if (ans ==3) {cout <<"K"<<endl;} else {cout <<"N"<<endl;} } return 0; }

    (25 分)

    參考架構・破題

    這支程式是質數判斷:以 2 到 n/2 去除 n,只要有一個能整除就把 ans 設為 0;最後 ans 為 1 印 Y(質數),否則印 N。依序代入 17、18、19 追蹤即可。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    請閱讀下列程式碼,並回答以下問題:#include<iostream> using namespace std; int main() { int nA =10; int nB =50; nA = nB; nB = nA; cout << "nA=" << nA << " nB=" << nB << endl; return 0; }

    (一) nA = ?(5 分)

    (二) nB = ?(5 分)

    (三)若 nA 與 nB 為相同數值,試問程式碼該如何修改,以達到 nA 與 nB數值互換?(作答請用文字表達,答案不用程式碼)(15 分)

    (25 分)

    參考架構・破題

    這題考指派運算的順序:nA = nB 先把 nA 蓋成 50,原本的 10 就遺失了,接著 nB = nA 只是把 50 指回給 nB。要真正互換,必須先保存其中一個原值。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    若使用者輸入 5,請問輸出值為何?(25 分)#include <iostream> using namespace std; int main() { int n; cin >> n; for(int i = 1;i <= n;++i) { for(int j = 0;j < n-i;++j) cout << "/"; for(int j = 0;j < i*2-1;++j) cout << "*"; for (int j = 0 ; j < n-i ; ++j) cout << "\\"; cout << endl; } system("pause"); return 0; }

    (25 分)

    參考架構・破題

    這是雙層迴圈畫圖題:外層 i 從 1 到 n 決定第幾列,內層三段分別印左邊的斜線、中間的星號、右邊的反斜線。先寫出每段字元數的公式,再代入 n = 5。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    在下方程式碼中,若使用者輸入值為"520",請問輸出值為何?(25 分)#include <iostream> using namespace std ; int main() { int number_input , i , c ; cin >> number_input ; cout << number_input << " = " ; i=2; while ( i <= number_input ) { c=0; while ( number_input % i == 0 ) { number_input /= i ; ++c ; } if ( c > 0 ) { cout << i ; if ( c > 1 ) cout << "^" << c ; if ( number_input > 1 ) cout << " * " ; } ( i >= 3 ) ? ( i += 2 ) : ++i ; } cout << endl ; return 0 ; }

    (25 分)

    參考架構・破題

    這支程式做質因數分解:從 2 開始試除,記錄每個質因數能整除幾次(c),次數大於 1 就以「^次方」表示,因數之間以「 * 」連接。520 = 8 × 65 = 2^3 × 5 × 13。

    完整答題架構與關鍵字:到站內看全文

107 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    表一為用來實現兩數運算的 C#程式碼,Operation.cs 檔案定義了三個類別;IFactory.cs定義了一個介面及兩個類別;Program.cs 則定義了 Program 類別。表一:Operation.cs IFactory.cs namespace FactoryPattern namespace FactoryPattern { { class Operation interface IFactory { { private double _num1; Operation Create(); private double _num2; } public double Num1 class AddFactory : IFactory { { get { return _num1; } public Operation Create() set { _num1 = value; } { } return new OperationAdd(); public double Num2 } { } get { return _num2; } class MultiplyFactory : IFactory set { _num2 = value; } { } public Operation Create() public virtual double Result() { { return new OperationMultiply(); return 0; } } } } } class OperationAdd : Operation { public override double Result() { Program.cs return Num1 + Num2; } namespace FactoryPattern } { class OperationMultiply : Operation class Program { { public override double Result() static void Main(string[] args) { { return Num1 * Num2; IFactory operFactory = new AddFactory(); } Operation oper = operFactory.Create(); } oper.Num1 = 3; } oper.Num2 = 5; Console.WriteLine(oper.Result()); } } }請根據表一回答以下問題:

    (一)在 C# 語言中,關鍵字 namespace 的主要用途為何?(2 分)

    (二)程式進入點在那個類別的那個方法中?(2 分)

    (三)關鍵字 virtual 與 override 的主要用途為何?(2 分)

    (四) class AddFactory : IFactory{….} 的意義為何?(2 分)

    (五) IFactory operFactory = new AddFactory(); 這段程式碼用到了物件導向程式設計三大特性中的那一個特性?(2 分)

    (六)請依據表一的程式碼畫出 UML 類別圖。 (15 分)(請接第二頁)107年公務人員特種考試警察人員、一般警察人員考試及 全五頁107年特 種 考 試 交 通 事 業 鐵 路 人 員 考 試 試 題 第二頁考 試 別:一般警察人員考試等 別:三等考試類 科 別:警察資訊管理人員

    (25 分)

    本題含圖表或公式,請對照原卷 PDF。

  2. 2

    佇列(Queue)是一種先進先出(First in first out, FIFO)的資料結構,我們想使用C++語言及陣列來實作一個 QueueAsArray 類別,此類別宣告於 QueueAsArray.h 檔案中,程式碼如表二所示。表三為主函式 main()的程式碼。表二:QueueAsArray 類別宣告的程式碼QueueAsArray.h class QueueAsArray { public: QueueAsArray(int size); ~QueueAsArray(); void enqueue(double data); //增加一個元素到 Queue的後方void dequeue(); //移除Queue的第一個元素void display(); //列印Queue中的所有元素private: int front; //Queue第一個元素在陣列的位置int rear; //Queue最後一個元素在陣列的位置int size; //Queue中一共有多少個位置double* array; //用來儲存Queue元素的陣列之指標bool isFull(); //檢查Queue是否已經被填滿bool isEmpty(); //檢查Queue是否是空的};表三:主函式 main()的程式碼int main() { QueueAsArray* queue = new QueueAsArray(3); queue->enqueue(3); queue->enqueue(1); queue->enqueue(2); queue->enqueue(5); queue->enqueue(9); queue->dequeue(); queue->enqueue(4); queue->display(); system("pause"); return 0; } enqueue()的功能是把元素加入 Queue 的後方,dequeue()的功能是移除 Queue 的第一個元素,display()是列印 Queue 中所有的元素,圖一描述 QueueAsArray 中 enqueue與 dequeue 的動作原理以及變數 front 及 rear 之改變情況。

    (一)請以 C++程式語言實現 QueueAsArray(int size)、~QueueAsArray()、enqueue()、dequeue() 、 display() 、 isFull() 、 isEmpty() 之 功 能 , 並 將 此 程 式 碼 存 於QueueAsArray.cpp 中,若物件使用到動態記憶體配置,則在執行解構子時要釋放該記憶體空間。(20 分)

    (二)根據表三,請問指標 queue 指向的佇列物件可儲存幾個元素?(2 分)

    (三)根據表三,請問程式執行完畢後,佇列內容為何?(3 分)(請接第三頁)107年公務人員特種考試警察人員、一般警察人員考試及 全五頁107年特 種 考 試 交 通 事 業 鐵 路 人 員 考 試 試 題 第三頁考 試 別:一般警察人員考試等 別:三等考試類 科 別:警察資訊管理人員圖一:在 Queue 中增加元素或刪除元素時,front 及 rear 之變化(請接第四頁)107年公務人員特種考試警察人員、一般警察人員考試及 全五頁107年特 種 考 試 交 通 事 業 鐵 路 人 員 考 試 試 題 第四頁考 試 別:一般警察人員考試等 別:三等考試類 科 別:警察資訊管理人員

    (25 分)

    本題含圖表或公式,請對照原卷 PDF。

  3. 3

    表四的程式碼是以多型的概念來實作圓形以及正方形的面積計算,請依據以下的要求進行程式碼的改寫:

    (一)將 Shape 類別修改成抽象類別。(3 分)

    (二)用常數函式的概念來避免在執行 getArea()函式時,修改到 Circle 或 Square 物件成員的值。(3 分)

    (三)在 Circle 類別中,有一個圓周率 PI 的資料成員,這份程式碼的缺陷是,每生成一個 Circle 物件,就需要一塊記憶體來記錄 PI 值,造成記憶體的浪費,請用 static成員的概念來改善 Circle 類別的程式碼。(3 分)

    (四)當幾何參數小於等於 0 時,執行 Circle 或 Square 的建構子時,物件依然能夠生成,但面積的計算會出錯,例如,當傳入的參數是-2 時,生成的 Square 物件,執行getArea()後會傳回 4。這是類別設計上的瑕疵,為了改善這個狀況,應該利用靜態(static)方法的概念設計一個 Create()的函數,當幾何參數小於等於 0 時,傳回 Null指標,而當幾何參數大於 0 時,則呼叫該類別的建構子。(6 分)表四: Shape, Circle, Square 類別的程式碼Shape.h Shape.cpp class Shape #include "Shape.h" { #include <stdio.h> public: virtual double getArea() Circle::Circle(double r) { return 0; }; { }; _radius = r; } class Circle : Shape { double Circle::getArea() private: { double const PI = 3.1415926; return PI*_radius*_radius; double _radius; } public: Circle(double radius); Square::Square(double length) double getArea(); { }; _length = length; class Square : Shape } { private: double Square::getArea() double _length; { public: return _length*_length; Square(double length); } double getArea(); };

    (五)在表五中我們產生 10 個亂數,亂數的範圍是從-3 到 6,我們把這 10 個亂數儲存在data 陣列中,接下來我們利用 data 陣列的資料來產生 Circle 及 Square 物件,當陣列的 index 是偶數時產生 Circle 物件,奇數時產生 Square 物件,將這些物件以父類別指標 Shape* 的形式記錄下來,並將其加入到 vector 容器中。用 vector 的iterator 功能將 vector 所有的物件取出計算其面積並加總,而後輸出結果。請以 C++語言完成表五的程式碼。(15 分)(請接第五頁)107年公務人員特種考試警察人員、一般警察人員考試及 全五頁107年特 種 考 試 交 通 事 業 鐵 路 人 員 考 試 試 題 第五頁考 試 別:一般警察人員考試等 別:三等考試類 科 別:警察資訊管理人員表五: 第三題的主函式int main() { Shape* s;宣告 vector 類別的變數 v,可用來儲存 Shape*。 (2 分) int data[10]; for (int i = 0; i <= 9; i++) { data[i] = rand() % 10 - 3; // 亂數範圍為 -3 到 6 } for (int i = 0; i <= 9; i++) { if(i%2= =0)利用 Circle 的靜態方法 Create,生成 Circle 物件,並將 Circle* 轉型為 Shape*。 (2 分) else利用 Square 的靜態方法 Create,生成 Square 物件,並將 Square*轉型為 Shape*。 (2 分)將上面產生的 Shape* 加入 vector 容器 v 中。 (3 分) } double sum = 0; //計算面積加總的變數利用 vector 的 iterator, begin(), end() 等功能將容器 v 的 Shape*拿出來進行計算面積,並求其加總。特別要注意的是,必須檢查Shape* 是否為 NULL。 (6 分) cout << sum << endl; system("pause"); }

    (45 分)

    本題含圖表或公式,請對照原卷 PDF。

  4. 4

    複數 z 的極座標表示法為 ( r ,θ ) ,其中 r 為複數 z 到原點的距離,將 z 與原點連成的一直線,此直線與實數軸的夾角為θ 。我們可以將複數 z 表成 z = (r , θ ) z 2 ⎛ r2 ⎞若 z1 = (r1 , θ1 ), z 2 = (r2 , θ 2 ) ,則複數的除法可以表成 = ⎜ ⎜ , θ 2 − θ1⎟ ⎟ z1 ⎝ r1 ⎠請利用 C++程式語言實現複數極座標表示法的除法運算,程式之撰寫請依據以下要求:

    (一)複數之類別名稱為 Complex,有兩個 private 等級的資料成員,分別是_radius 以及_angle,_radius 代表 r,_angle 代表θ 。(3 分)

    (二)請用 inline 函數來實現資料成員的存取。 (3 分)

    (三)實作運算子 / = (註 z 2 / = z1 等同於 z 2 = z 2 / z1 )。(4 分)

    (四)請設計一個 ComplexException 類別用來進行除零的例外處理,ComplexException必 須 繼 承 std::exception 並 複 寫 what() 函 式 , 當 除 0 的 狀 況 發 生 時 , 丟 出DividedByZero 字串。 (5 分)

    (五)請撰寫 main 函式來驗證程式之功能。(5 分)

    (20 分)

    參考架構・破題

    本題考 C++ 類別設計的五個要素:private 資料成員、inline 存取函式、複合指派運算子超載、繼承 std::exception 的自訂例外,以及 main 測試。依五小題順序寫出程式並逐段註解,除法規則為 r2/r1、θ2-θ1,r1 為 0 時丟例外。

    完整答題架構與關鍵字:到站內看全文

106 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    以 C++語言建立如下圖所示之鏈結串列(linked list),再以下列各子題程式碼執行串列操作。class node{ int main(){ public: int i; node():next(NULL){}; char s[4]={ 'R', 'S', 'T', 'U'}; node(char x):data(x), node * List=new node(); next(NULL){}; node *a,*b,*c,*d,*p; char data; for (i=0;i<4;i++) node * next; insert_end(s[i],List); }; a=List->next; b=a->next;c=b->next; void insert_end(char x,node * L){ d=c->next; node* p=L, * q; while (p->next != NULL) p=p->next; //下列各小題程式碼插入此處q=new node(x); } p->next=q; } List a b c d ↘ ↘ ↘ ↘ ↘ R S T U

    (一)假設下列各子題皆獨立,從原建立鏈結串列重新開始。畫出各子題程式碼執行後之鏈結串列圖形,亦需畫出各指標(List, a, b, c, d)位置。(20 分)(1) p = List->next->next; (3) c->data = b->data; b = p->next; c->next = b->next; delete (p); p = b; a->next = b; b = c->next; delete (p); List->next->next=d->next; a = b->next; (2)a->data= List->next->next->next->data; (4) p = new node('A'); a->next->data= c->next->data; List->next->next = p; c = p; p->next = b->next;

    (二)以 C++語言寫出函式 find_data(),找到鏈結串列中 node 之 data 具有值 x 之節點,並回傳指向此節點之指標。若找不到,則回傳 NULL。(10 分)106年公務人員特種考試警察人員、一般警察人員考試及106年特種考試交通事業鐵路 代號:30570全一張考 試 別:一般警察人員考試等 別:三等考試類 科 別:警察資訊管理人員

    (30 分)

    本題含圖表或公式,請對照原卷 PDF。

  2. 2

    繪製 UML 類別圖(Class Diagram),表示關於排球聯盟(league)以下之資訊元件:聯盟(league)由至少 4 個球隊(team)組成。每個球隊(team)由 6 至 12 名球員(player)組成,且皆有 1 名球員擔任隊長(captain) 。每個球隊(team)皆有其隊名(name)及記錄(record)。每名球員(player)皆有號碼(number)及其位置(position) 。球隊(team)倆倆相互(play)比賽(game)。每場比賽(game)都有比數(score)及比賽地點(location)。各球隊(team)可能有教練(coach)指導,但也可能沒有。每名教練(coach)皆有認證等級(accreditation level)及年資(year experience)。每名教練(coach)可以指導(lead)多個球隊(team) 。教練(coach)及球員(player)皆是人員(person),人員皆有名字(name)及地址(address) 。類別圖中必須使用適當的標籤標記所有關聯(Association) 。(20 分)

    (20 分)

    參考架構・破題

    本題要把文字敘述轉成 UML 類別圖,評分重點是:類別與屬性是否齊全、關聯是否都有名稱與多重性(multiplicity)、以及 Person 的一般化(繼承)是否畫對。先列類別,再逐條畫關聯。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    請寫出下列 C++程式執行後之輸出。(10 分)#include <iostream> void g(){ using namespace std; x=10; class AA { cout<< endl<< "BB g:x= "<< x ; public: } int x; void h(){ AA(int x=0){this->x=x;} x=20; virtual void g()=0; cout<<endl<< "BB h:x= " << x ; void h(){ } x=6; }; cout << endl << "AA h:x= " << x ; int main(){ } AA *ap = new BB(-7,-9) ; }; ap->g(); class BB : public AA { ap->h(); public: BB *bp= static_cast<BB*>(ap); int x; cout<<endl<< "bp-> x= "<< bp->x; BB(int x1=0,int x2=0):AA(x2){ bp->g(); this->x=x1; bp->h(); } }

    (10 分)

    參考架構・破題

    本題考三個觀念:虛擬函式的動態綁定、非虛擬函式的靜態綁定,以及子類別同名資料成員遮蔽父類別成員(AA::x 與 BB::x 是兩份不同的變數)。逐行追蹤兩個 x 的值即可。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    請建立 C++程式,可首先寫入 2 字串"第一列文字"及"第二列文字"至檔案"example.txt"中成為 2 列文字。再由檔案"example.txt"中讀出此 2 列文字,將之顯示於螢幕。 (10 分)

    (10 分)

    參考架構・破題

    本題考 C++ 檔案串流:用 ofstream 寫入兩列文字,關閉後再用 ifstream 逐列讀出並輸出到螢幕。重點是標頭檔、開檔檢查、換行、讀取方式與關檔。

    完整答題架構與關鍵字:到站內看全文

  5. 5

    可寫為 a+bi 之數稱為複數(Complex Number),其中 a 與 b 均為實數,i 表示虛數,亦即 i2=-1。a 稱為複數的實部(real part),b 稱為複數的虛部(imaginary part)。複數四則運算如下:‧加法: (a + bi) + (c + di ) = (a + c) + (b + d )i ‧減法: (a + bi) − (c + di) = (a − c) − (b − d )i ‧乘法: (a + bi) ‧(c + di) = (ac − bd ) + (ad + bc)i a + bi (a + bi ) (c − di ) ac + bd bd − ad ‧除法: = = + i c + di (c + di ) (c − di ) c 2 + d 2 c 2 + d 2請以 C++語言,

    (一)宣告 complex(複數)class,包含宣告為 float 型式之成員變數:實部(real)與虛部(imag) ;將實部與虛部皆預設為 0.0 之建構子(constructor) ;可進行四則運算之成員運算符(operator) :+、-、*、/;將實部與虛部各乘以-1 之成員運算符-。 (10 分)

    (二)寫出於複數 class 外部,定義成員 operator *之程式碼。(5 分)

    (三)寫出於複數 class 外部,定義成員 operator /之程式碼。加入例外處理(exception handle)避免分母為 0。 (10 分)

    (四)寫出定義 operator <<之程式碼,使得於主函式中可直接使用 cout<<將複數顯示於螢幕為(real+imag i),例如:(2+3i)。(5 分)

    (30 分)

    本題含圖表或公式,請對照原卷 PDF。

105 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    你是個物件導向程式設計師,你首先寫了兩個 C++的類別,其程式碼如下:Class Rectangle { private: float width; float height; public: Rectangle(float width, float height) : width(width), height(height) { } float getArea() const { return width * height; } }; Class Circle { private: float radius; public: Circle(float radius): radius(radius) { } float getArea() const { return 3.14159f * radius * radius; } };然後你繼續寫一個 main()來完成你的實作。你的同事會幫你完成一個 generateData()的副程式,它會負責產生一堆 Rectangle 或 Circle 裝在一個 vector container,然後回傳。你的目標是將 vector container 裡面的每一個物件的面積通通加總。int main(){… … = generateData(); … }你想要用多形(polymorphism)來完成這件事情。請撰寫未完成的 main()以及你需要對 Rectangle, Circle 兩個 class 的原始程式碼做任何的修改。(25 分)105年公務人員特種考試警察人員、一般警察人員 全一張考試及105年特種考試交通事業鐵路人員考試試題 (背面)考 試 別:一般警察人員考試等 別:三等考試類 科 別:警察資訊管理人員

    (25 分)

    參考架構・破題

    多型要靠「共同基底類別+虛擬函式+以指標或參考操作物件」。原本的兩個類別沒有共同父類別、getArea 也不是 virtual,所以要先抽出抽象類別 Shape,再讓 main 只透過 Shape 指標呼叫 getArea。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    Java 有 public, protected, private 等等 access level modifier 來決定一個 class 的 member或是 method 能否被不同位置的程式碼所存取。舉例來說,在某個 class X 中,分別用public, protected, private 定義的變數或 method,在這個 class X 中的程式碼,都可以有權限進行存取。如下表中的 4 個 YES。但是如果程式碼在這個 class X 以外,例如與 class X 共享一個 package 的其他 class Y, subclass Z, world(也就是其他的 class) ,請問存取權限分別為何?請依下表格式在試卷上填入 YES 或者是 NO。 (註:no modifier 表示程式設計師沒有用 public, protected或 private 來宣告這個變數或者是 method)(25 分)Access Levels Modifier Class Package Subclass World Public YES Protected YES no modifier YES Private YES

    (25 分)

    本題含圖表或公式,請對照原卷 PDF。

  3. 3

    一個跨國公司 X(Company)有許多的部門(Department)以及辦事處(Office)。辦事處是比較大的單位,通常座落在大城市中。每個辦事處裏通常有許多部門。基本上每個部門都必須直屬於某個辦事處,不過有時候在某些地方,X 會認為並不需要設立一個辦事處,所以在某些地方會有獨立的部門存在。當然,部門底下通常會再有許多的部門。每個部門通常掌管一群員工。這些員工通常有著共同的基本資料,基本上員工分成兩種,一種是 manager,另外一種是 employee。Manager 通常掌管一群 employee。請按照上面的資訊,為公司 X 畫出 UML class diagram(運用你所知的所有 UML 工具來畫出。) (25 分)

    (25 分)

    參考架構・破題

    本題考 UML 類別圖的完整運用:類別、屬性與操作、一般化(繼承)、組合/聚合、自我關聯與多重性。關鍵在「部門可隸屬辦事處也可獨立、部門可再含部門」以及「manager 管理 employee」兩處的建模。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    Java 執行續 method()中有 start()以及 run()。請說明這兩個 method 的差異,並說明你如何在 Java 的程式碼中建立一條執行續並啟動一條執行續。(25 分)

    (25 分)

    參考架構・破題

    (題目「執行續」即執行緒 thread。)start() 會向 JVM 要求建立一條新的執行緒,再由新執行緒去呼叫 run();直接呼叫 run() 只是一般方法呼叫,仍在目前執行緒中同步執行,不會產生並行。

    完整答題架構與關鍵字:到站內看全文

104 年(考試時間 120 分鐘) 原卷 PDF

  1. 1

    下圖為一 Link 資料結構的示意圖,其中 DATA 表示 Link 中每個 Node 的資料,其型態為 "整 數 "。 請 撰 寫 此 Node 物 件 。 此 物 件 需 撰 寫 相 關 資 料 結 構 宣 告 、 建 構 子(Constructor)及相關資料封裝(Encapsulation)所需之方法(Method)。(15 分)Head DATA DATA ...... DATA

    (15 分)

    本題含圖表或公式,請對照原卷 PDF。

  2. 2

    物件導向的繼承方式主要分為單一繼承與多重繼承兩種,C++與 JAVA 各屬何種繼承方法?又此二種繼承方法優缺點各為何?(10 分)針對單一繼承的缺點,可用介面(Interface)來解決,請問介面如何解決?請舉例說明。(10 分)

    (20 分)

    參考架構・破題

    C++ 支援多重繼承,Java 的類別只允許單一繼承(extends 一個父類別),但可實作多個介面(implements)。本題要比較兩者優缺點,並說明 Java 如何用介面補足單一繼承的限制。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    物件設計中,請用程式為範例,解釋過載(Overload)及覆寫(Override)兩者為何?(10 分)另請說明函式呼叫中,傳值呼叫(Call by Value)、傳址呼叫(Call by Address)、傳參考呼叫(Call by Reference)三者差別為何,請舉例說明。(15 分)

    (25 分)

    參考架構・破題

    本題分兩部分:多載與覆寫是同名方法的兩種機制(前者編譯期、後者執行期多型);三種參數傳遞方式則差在函式拿到的是「值的複本」、「位址」或「別名」,最好用 swap 範例對照說明。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    請問如何宣告一容器資料結構 Map 之變數 m,其 Key 值型態為字串,value 值型態為整數?(5 分)現在有三筆資料 { ''a'', 7}, { ''b'', -21}, { ''z'', 11} 欲加入此 Map m,程式如何撰寫?(5 分)若需將此 Map m 中 Key 值為 "b" 之項目移除,程式如何撰寫?(5 分)

    (15 分)

    參考架構・破題

    本題考標準函式庫中 Map(鍵值對容器)的宣告、新增與刪除。題目未指定語言,建議以 Java 為主作答,並附 C++ STL 寫法,兩種都寫最保險。

    完整答題架構與關鍵字:到站內看全文

  5. 5

    請舉例說明程式的例外處理(Exception)的 try,catch 及 finally 架構。(10 分)

    (10 分)

    參考架構・破題

    例外處理把「正常流程」與「錯誤處理」分開:try 放可能出錯的程式,catch 捕捉並處理特定例外,finally 不論是否發生例外都會執行,常用來釋放資源。答題要附程式並說明執行流程。

    完整答題架構與關鍵字:到站內看全文

  6. 6

    針對 UML 的類別關係,請繪圖並說明下列關係:

    (一)相依關係(dependence)。(5 分)

    (二)結合關係(association)。(5 分)

    (三)聚合關係(aggregation)。(5 分)

    (15 分)

    參考架構・破題

    三種關係由弱到強是:相依(暫時使用)→ 結合(長期持有、結構性連結)→ 聚合(整體與部分,部分可獨立存在)。每一小題都要畫出 UML 符號、說明語意並舉例。

    完整答題架構與關鍵字:到站內看全文

題目來源:考選部考畢試題查詢平臺(政府資訊公開資料);參考架構為本站自撰,僅供準備方向參考,非官方標準答案。最後更新:。