Posts

Showing posts with the label Todo

objects comparation exam questions

 物件比較考題 下面 JAVA 程式輸出是什麼? 觀念 A.equal(B)  比較內容 判斷兩個具有不同參考的物件是否指向相同的值 A==B 比較物件是否相同

What is the relationship between the two categories of "IS-A" and "HAS-A".

 “is-a”、“has-a”兩種類別的關係是甚麼 JAVA 程式設計中,有“is-a”、“has-a”兩種類別的關係,請分別解釋之,並請分別寫 出其 JAVA 程式框架。(16 分 在Java编程中,有两种常见的类之间的关系,分别是"is-a"关系和"has-a"关系,它们用于描述不同类型的类之间的联系。 1. "is-a"关系(继承关系):    - "is-a"关系也称为继承关系,它表示一个类是另一个类的子类或派生类。    - 这种关系通常在类的层次结构中使用,其中一个类继承另一个类的属性和方法,以便重用和扩展功能。    - 在"is-a"关系中,子类继承了父类的特性,因此子类可以被视为是父类的特定类型。    - 例如,如果有一个类Animal,可以创建子类如Dog和Cat,这些子类都是Animal的子类,因为它们都是动物。    Java框架示例:    ```java    class Animal {        // 公共属性和方法    }    class Dog extends Animal {        // Dog类继承了Animal类,是Animal的子类    }    class Cat extends Animal {        // Cat类也继承了Animal类,是Animal的子类    }    ``` 2. "has-a"关系(组合关系):    - "has-a"关系表示一个类包含其他类的对象作为其属性。    - 这种关系通常用于描述类之间的组合或包含关系,其中一个类具有另一个类的实例作为其一部分。    - 在"has-a"关系中,一个类不是另一个类的子类,而是将其包含为组件的一部分。    - 例如,一个Car类可以包含Engine和Whee...

what's parse tree

Image
 剖析樹(parse tree) - 根據一語言的文法(BNF;Backus–Naur form)描述,將此語言某一語句(statement)之語法結構,以階層式樹狀結構來表示。 - y=f(x),x是某語言的語句(statement),Y是剖析樹,f(T)函數是BNF 文法 - 每一步推論最左(右)邊的非終端節點 left(right)-most derivation sequence 不明確文法(ambiguous grammar) - 語言某一語句(statement),依文法推導可得到兩顆或以上的剖析樹,稱該文法模糊 文法定義 一個文法G可以定義為G=(Vn,Vt,S,P) Vn 非終端節點的集合 (nonterminal symbol),如{<assign>,<expr>,<id>} Vt終端節點的集合 (terminal symbol),如{A,B,C} S 開始符號集合(starting symbol),如{<assign>} P 產生規則集合(production rule) 考題 一、根據下列文法,其中非終端(non-terminal)以< >符號標示: <S> → <A> <A> → <A> + <A> | <ID> <ID> → w | x | y | z 請畫出 x+y+x 所對應之剖析樹(parse tree)。(10 分) 請問此文法是否模糊(ambiguous)?請說明。(10 分 答案 (一) (二) 文法為模糊。因為某語言之語句x+y+x可轉換為兩或兩棵以上剖析樹。 (一)為第一棵剖析樹,下面為第二棵。 下面為chatgpt的回答 下面是字符串"x+y+x"所对应的解析树(parse tree): ```    <S>     |    <A>     |    <A>    /|\   x + <A>        |     ...

Various programming language definitions

 各種程式語言定義 程式語言 - Object-Oriented languages(物件導向語言):   + 定義:這些語言的主要特點是使用物件作為資料的基本單元,通過物件之間的相互關係實現複雜的程式邏輯。Object-Oriented languages將資料和相關操作封裝到物件中,並支援繼承和多型等物件導向特性。   +我的回答:以物件為基本單元,物件中包含屬性與方法,透過物件之間的互動完成複雜的操作。並支援封裝、繼承、多型等物件導向特性。有助於模組化與重用程式碼。  +現存語言:Java, C#(,c++) - Functional languages(函數式語言):   + 定義:這些語言的主要特點是強調使用純函數和不可變性。它們不依賴於狀態,函數是不可變的,並且通常不會改變傳遞給它們的參數的狀態。函數式語言通常具有高階函數和閉包,支援遞迴和高階函數。 主要特點是強調使用純函數和不可變性。純函數,即把所有資料變成參數或內部狀態(資料)的函式。不可變性,則是不會改到資料本身。通常支援高階函數。 純函數,把所有資料變成參數或內部狀態(資料)的函式。 不可變性,不會改到資料本身。 高階函式 Higher-order function定義:一個能夠接收函式作為參數(這個被接收的函式稱為回調函式)或者將函式作為返回值輸出的函式,滿足其中之一即可  +現存語言:Haskell, Scala - Logic languages(邏輯語言):   +定義:這些語言 基於邏輯推理和規則 。Prolog是一個常見的邏輯語言,它用於知識表示和符號推理。Logic languages通常 用於人工智慧和專家系統等領 域。  +現存語言:Prolog, Mercury - Script languages(腳本語言):   +定義:這些語言通常用於自動化任務和快速開發。它們 具有解釋性質,通常用於網頁開發、系統管理 、數據處理等應用。JavaScript、Python和Ruby都是常見的腳本語言。  +現存語言:Javascript, python - 最近語言的發展中,像 Functional languages 與 Script languages,都逐漸引進物件導向性質(OO),...

Write complex code

Image
 寫出複數程式碼 可寫為 a+bi 之數稱為複數(Complex Number),其中 a 與 b 均為實數,i 表示虛數, 亦即 i2 = -1。a 稱為複數的實部(real part),b 稱為複數的虛部(imaginary part)。 複數四則運算如下: ‧加法: idbcadicbia )()()()( +++=+++ ‧減法: idbcadicbia )()()()( −−−=+−+ ‧乘法: )( bia + ‧ ibcadbdacdic )()()( ++−=+ ‧除法: i dc adbd dc bdac dicdic dicbia dic bia 2222 )()( )()( + − + + + = −+ −+ = + + 請以 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 分 以下是 C++ 程式碼,包含 Complex(複數) 類別,實現複數的基本四則運算,包括加法、減法、乘法和除法,以及輸出操作子 `<<` 用於將複數顯示在螢幕上: ```cpp #include <iostream> class Complex { public:     float real;     float imag;     Complex(float real = 0.0, float imag = 0.0) : real(real), imag(imag) {}     Co...

Call by value, address and reference exam questions

Image
 傳值傳址與傳參考呼叫考題 物件設計中,請用程式為範例,解釋過載(Overload)及覆寫(Override)兩者為何? 請說明函式呼叫中,傳值呼叫(Call by Value)、傳址呼叫(Call byAddress)、傳參考呼叫(Call by Reference)三者差別為何,請舉例說明。 寫出pass by value, reference, name的值 設計一程序(procedure)或函式(function),此程序或函式在 參數傳遞方式不同時:以值傳遞(passed by value)、以參照傳遞(passed by reference),會產生不同的效果,並說明為何會有不同 高階語言函數傳遞,主要有四種方法 (a)call-by-reference (b)call-by-value (c)call-by-address (d)call-by-name,請就下列程式,利用上述四種參數傳遞方式,將結果輸出 以下的 C 程式碼需要實作一個 SwapAndAdd function。SwapAndAdd() 概念 傳值呼叫:將變數值當做參數傳入函式。無副效應(side effect),即修改函式內的形式參數不會改到實際參數。 傳址呼叫(傳參數呼叫):將變數位址當做參數傳入函式。有副效應(side effect),即修改函式內的形式參數,會改到實際參數。 傳名呼叫:將變數的名稱當做參數傳入函式,取代形式參數。有副效應(side effect),即修改函式內的形式參數,會改到實際參數。

Learning catalog

 學習總目錄 星號要再做一次 物件導向程式語言 宣告變數為 public, private, protected差異性 考題 名詞解釋 建構函式 解構函式 朋友函式 泛用類別 抽象方法 純粹虛擬函式 補充: 方法與函式的異同 寫出建構子的執行結果 物件導向設計 定義 元件圖? 三大特性 甚麼是多型 多型與動態連結的程式碼示範 多重繼承與單一繼承的優缺點 單一繼承的缺點如何用界面解決 繼承考題 寫出子類別物件的資料欄位 單一繼承與多重繼承考題 寫出繼承關係的物件導向程式碼之執行結果 *  寫出多重繼承的程式碼用java  寫出Java多重繼承程式碼的執行結果 “is-a”、“has-a”兩種類別的關係是甚麼 物件導向方法 做系統分析設計的步驟 與結構化分析的不同處 軟體開發的觀點 關於類別的觀點: 類別觀點 Java SOLID 設計原則 策略模式與工廠模式 舉例說明 Java語言 抽象類別、類別與介面的差異 並舉例說明 多型,動態連結、過載與重寫 Java與c# 中override 的差異 傳值呼叫、傳址呼叫與傳參考呼叫的比較   java動態分派概念 考題 程式語言 程式語言基本知識 寫程式考題 寫出程式碼執行結果考題  傳值傳址與傳參考呼叫 程式語言名詞解釋摘要類別(abstract class )、屬性語法(attribute grammar)、自由聯盟(free union)與鋸齒狀陣列(jagged array) 物件比較考題 物件輸出考題 UML UML  定義 三大構成要素 應用舉例 循序圖與溝通圖的異同 類別圖是什麼 類別圖考題  畫跨國公司的類別圖 物件導向塑模活動與工具 資料庫 資料庫SQL 考題 ER model 基數 系統分析 系統分析名詞解釋

Java SOLID design rule

Image
 Java 的SOLID設計原則 SOLID 原則 是一組設計原則,用於提高軟體的可維護性和擴展性。在Java中,SOLID 原則包括: 1. 單一職責原則(Single Responsibility Principle,SRP):一個類別應該只有一個修改的理由,即應該只有一個職責。 2. 開放/封閉原則(Open/Closed Principle,OCP):軟體實體(類別、模組、函數等)應該是可以擴展的,但不可修改。 3. 里氏替換原則(Liskov Substitution Principle,LSP):派生類別必須能夠替換其基底類別而不影響程式的正確性。 4. 介面隔離原則(Interface Segregation Principle,ISP):不應該強迫一個類別實作它用不到的介面。 5. 依賴反轉原則(Dependency Inversion Principle,DIP):高層次的模組不應該依賴低層次的模組,兩者都應該依賴於抽象。 開放封閉原則(OCP, open close principle) - y=f(x) , x為程式碼, f( )為原則 - 物件導向程式設計的基本原則 - SOLID原則的一部分 - 核心思想為   + 軟體實體(如類別、模組、函數)應對擴展(新增)開放,對修改封閉   + 即在擴充功能時,應新增程式碼,而不是修改程式碼,以 降低對現有函數的破壞性更新,確保系統穩定與可靠性 - 實現   + 使用抽象類別與介面   + 設計模式如 策略模式、工廠模式 考題 解釋子類別替代法則(sub-class substitution rule)。(14 分 子类替代法则(Subclass Substitution Principle)是面向对象编程中的一个重要原则,通常简称为Liskov Substitution Principle(LSP),它是SOLID原则中的一部分,由计算机科学家Barbara Liskov提出。LSP的核心思想是:如果S是T的子类,那么在任何基于T的程序中,都可以用S的实例来替代T,而不会导致程序出错或产生意外行为。 具体来说,子类替代法则要求: 1. 子类必须继承自父类。这是LSP的前提,子类需要是父类的扩展或特化。 2. 子类可以替代父类并被视为父类的实例。这意味...

Programming language basic knowledge

 程式語言基礎知識 C語言 UNIX 作業系統是由它所寫的。 在 1970 年中期與 1990 年後期間,對教學有最大的影響力 Fortran 第一個成功可編譯的高階語言。 在過去五十年中,最常用在數學計算中。 Simula-67 第一個使用類別(class)觀念的語言。 第一個完全實現物件導向的程式語言 ALGOL 60 第一個機器無關的語言 。 第一個使用 BNF(Backus–Naur Form)語法的程式語言。