程設一.

Slides:



Advertisements
Similar presentations
系統分析與設計 楊子青 H-1 H 、物件導向技術 n 物件導向的基本概念 – 物件、類別 – 封裝、繼承 – 同名異式 ( 多型 ) 、超荷 ( 過載 ) n 物件導向分析與設計及塑模工具 n UML 塑模工具.
Advertisements

第四章 类、对象和接口.
第三讲 面向对象(上).
JAVA 编 程 技 术 主编 贾振华 2010年1月.
<<會計資訊系統課程講義>> 統一塑模語言(UML)語法精要 -- 物件導向概念、需求分析及系統分析
6. 6 Overloading methods and constructors 6
C语言程序设计 主讲教师 :张群燕 电话:
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
TQC+ 物件導向程式認證-JAVA.
第一章 面向对象程序设计.
程設一.
第二章 JAVA语言基础.
JAVA程序设计 (03) JAVA Programming
再回首: Java关键字 数据类型:byte boolean char double float int long short ,
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
程式設計實作.
Q1: 追蹤程式: 印出結果? 搶答 while (i<=n) { p=p*i; i=i+2; }
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
H、物件導向技術 物件導向的基本概念 物件、類別 封裝、繼承 同名異式(多型) 、超荷(過載) 物件導向分析與設計及塑模工具 UML塑模工具.
物件導向程式設計 (Object-Oriented rogramming)
第二章 C# 基础知识.
Java基础 JavaSE异常.
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
Classes Lecturer: 曾學文.
CHAPTER 9 建構方法 ROBERT.
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第六章 类的扩展与继承.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
本單元介紹何謂變數,及說明變數的宣告方式。
软件建模精要 面向对象软件建模技术.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Java软件设计基础 5. 继承与多态.
Java语言程序设计 第五部分 Java异常处理.
第9章 類別圖與物件圖 9-1 類別圖與物件圖的基礎 9-2 類別圖的符號 9-3 類別關係 9-4 物件圖 9-5 繪製類別圖與物件圖
Java程序设计 第9章 继承和多态.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
Data Structure.
Java程序设计 第2章 基本数据类型及操作.
第5讲 使用类和对象编程(三) 内部类 实例 程序控制结构 选择语句.
Chapter 5 Recursion.
第三章 C# 基础知识.
第7章 繼承/多型/介面 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章 Java基本语法 讲师:复凡.
Interfaces and Packages
第二章 Java语法基础.

#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
遞迴 Recursion.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
Class 2005/05/25.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
Data Structure.
C#快速導讀 流程控制.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
第6章 继承和多态 伍孝金
Presentation transcript:

程設一

配分 項目 備註 正課 20% 實習課 平常表現10%、統一作業10% 統一會考 60% 筆試30%、上機考30% 自學檢則(加分) 10% [時間地點]:中午12:00 or 下午17:00在主顧322 or 主顧324 [計分方式]: 一顆星每題加0.5分,兩顆星每題加1分,最高加到10分

綱要 各種程式語言 英打 靜宜賽碼場 JDK安裝 Eclipse for JAVA JAVA程式語言介紹

各種程式語言 第一代 機器語言 第二代 組合語言 第三代 高階語言(程序導向語言) Ex: FORTRAN、COBOL、PASCAL、Ada、C、BASIC、Perl 第四代 極高階語言(物件導向語言) Ex: C++、JAVA、VB、PHP、C#、Python、smalltalk 第五代 LISP、PROLOG

程式的用途 自用 協助處理反覆的例行性工作 破壞 病毒、木馬 每天將c開頭的單字換成a開頭的單字 寫一個daemon程式來取代人工

程式的開發 編譯器 Source code execute 選擇一個開發平台 EX: JDK e.g. 賽碼場

程式的開發– 實例 C、C++:編譯 JAVA:編譯+直譯 載入階段 執行階段 compiler linker loader Source code Object code Execute code RAM 執行 .obj .exe (binary code) JAVA:編譯+直譯 靜態宣告:載入階段時執行,ex: int a[10]; 動態宣告:執行階段時執行,ex: int* a = new int[10]; compiler Source code Byte code JVM .class interpreter Compiler:將高階程式翻譯成組合語言程式 Linker: 連結函式庫 Loader: 載入到memory

英打 https://10fastfingers.com/typing-test/english 一分鐘測試英打速度

常見的JAVA程式開發軟體 1、Eclipse 2、IntelliJ IDEA 3、Jcreator 4、靜宜賽碼場

Example - Eclipse Project Package Java檔 Java檔 Java檔 Class Package method method Class

Example - Eclipse Project name Package name

靜宜賽碼場 網頁版 沒辦法寫程式 用來加課程、看資訊 軟體版 可寫程式

靜宜賽碼場 – 註冊 註冊 http://coding.pu.arping.me/

靜宜賽碼場 – 註冊 輸入可收到信的email

靜宜賽碼場 – 註冊

靜宜賽碼場 – 註冊 填寫「學習家族組名」 Ex: 資工一A Ex: 資訊工程系 Ex: 中文姓名 Ex: 410616594

靜宜賽碼場 – 註冊

靜宜賽碼場 – 加選課程 登入「網頁版」賽碼場來加選課程 1 確定是否真的有登入成功 3 4 2

靜宜賽碼場 – 軟體版 路徑: 執行:

靜宜賽碼場 – 軟體版 6 1 3 4 2 5

練習 kb_practice_helloJava

JDK( Java SE Development Kits) http://www.oracle.com/technetwork/java/javase/downloads/index.html 手機、嵌入式系統 大型網站開發 JAVA JAVA ME JAVA EE 1 JAVA SE (JDK) 一般應用程式適用

2 3 點選安裝

檢查是否有這選項

靜宜賽碼場 -評判伺服器訊息 Local端程式正確 (尚未通過server端驗證) 點選

靜宜賽碼場 -評判伺服器訊息 Server端程式正確 (已通過server端驗證且上傳) 當local端驗證無誤,則點選

靜宜賽碼場 -評判伺服器訊息 語法出錯

靜宜賽碼場 – 評判伺服器訊息 沒有輸出 (可能沒印出data)

靜宜賽碼場 – 評判伺服器訊息 輸出的格式有錯

靜宜賽碼場 – 評判伺服器訊息 執行時間超時 (可能你的程式進入無限迴圈)

JAVA的程式儲存 1、你的程式碼會儲存在java檔內 2、你的java檔會儲存在資料夾(專案)內 (賽碼場檔名固定取名main.java) 內存 可切割

JAVA的程式結構 與檔名同名 存在此包中 class method method2 class2 Note: 寫入你的程式流程 1、JAVA檔的檔名要跟內部的其中一個class名稱相同,並且為public class 2、一個java檔內只能有一個public class 3、一個project只會有一個main method,會從多個java檔中找尋一個main method為程式的進入點 ----------------------------------- Import Java提供的類別 method2 class2 Note: 1、JAVA程式由多個class所組成 2、class由多個method所組成

JAVA的程式結構 class method method class method method class method method (程式的進入點) method method class method 1、JAVA檔的檔名要跟內部的其中一個class名稱相同,並且為public class 2、一個java檔內只能有一個public class 3、一個project只會有一個main method,會從多個java檔中找尋一個main method為程式的進入點 method class method method

Example 1、有幾個class? 幾個method? 2、是否可改寫成如下 ? 3、程式的執行流程?

Solution 1、執行流程 1 2 3 4 6 5 7 2、1個class 3個method

Example 可改成method的寫法

寫程式的準則 – 排版 Note: 1、分號:表示一行的結束 2、分層 (1)按enter 或 (2)利用tab鍵 寫入你的程式碼 1、JAVA檔的檔名要跟內部的其中一個class名稱相同,並且為public class 2、一個java檔內只能有一個public class 3、一個project只會有一個main method,會從多個java檔中找尋一個main method為程式的進入點 Note: 1、分號:表示一行的結束 2、分層 (1)按enter 或 (2)利用tab鍵

Example 要排版 有排版: 沒排版: 按tab鍵 來縮排

寫程式的準則 – 命名 變數的命名須有意義 變數的名稱開頭習慣小寫 不好 好

寫程式的準則 – 命名 有效的變數: 1、開頭不能是數字 2、不可夾帶下列符號 「-」 「:」 Note: 關鍵字:藍色 識別字:黑色

練習 – 排版 kb_Recursive_HanoiTower

輸出 [語法] 放你的data e.g. 換行 e.g. 不換行

e.g. 合併輸出 利用「+」運算子

練習 basic_output

變數宣告 Def:利用變數來儲存data值 語法: [變數型態] [變數名稱] = data值; e.g.

Data type Ex:

Data type range 2147483647

相異型態資料的合併 利用「+」運算子 Ex: 將字串、整數合併印出 Ex: 將多個浮點數合併印出

「=」運算子 Def:Assign的意思,即給值,並非相等的意思 e.g.

Example 宣告、給值 分開寫 宣告、給值 寫在一起 多個變數 可利用「+」運算子來合併各data印出

Example a = ???

練習 basic_dataType

輸入 [語法] e.g. 讀取一列: 讀取一個:

Scanner Method:

Scanner 宣告 使用

如何除錯? 如何除錯 ? 利用「印出值」的方式 如何確保s的值符合預期 ?

練習 kb_inputOutput1 輸入三個data, 第一個為int型態的data 第二個為double型態的data 第三個為String型態的data 使用Scanner取得此三個data,並且 印出此三個data

Operator(運算子) 前置加 後置加

資料型態的對應 兩個整數相除結果 得整數 兩個數相除,若其中一數為浮點數得浮點數

資料型態的對應 Case1: Case2:

Example 改成int height才對 what's wrong ??

練習 CP1Easy01:攝氏轉華氏

如何限制小數點位數 無窮小數 無窮小數

如何限制小數點位數 語法: format EX: 僅顯示小數第二位

練習 CP1Easy04

% 應用:切割整數 Ex: 右到左切割

/ 應用:切割整數 Ex: 左到右切割

練習 basic_money

++、-- 前置加:這一行就加 後置加:下一行才加

練習 若有兩個整數x=1、y=2,如何運用第三個變數z,將x與y兩數的內容交換? kb_swap

if、else 用途:條件判斷,用在2選1的情況 語法: Ex : 不是做case1就是做case2

else if 用途:條件判斷,用在n選1的情況(n>=3) 搭配if、else使用 語法: 4選1, 從case1~case4選其中執行

練習 輸入2個整數a、b,若a>=b或a==10則執行a-b並印出,否則執行a+b並印出 kb_practice_ifelse

練習 kb_practice_ifelse2 考試成績有六個級別 A B C D E F 分別對應分數 90+ 80+ 70+ 60+ 60 60- 利用if else技巧,輸入分數印出對應的級別 kb_practice_ifelse2

練習 輸入一個整數,若是奇數,輸出字串Odd,否則輸出字串Even。 P1Test-023

Example

Example 下列兩者的差異?

if…else VS else if if…else:2選1 else if: n選1,

練習 Calculate Body Mass Index (BMI)

練習 Given three numbers x, y, and z, find out if x, y, and z can represent the lengths of the sides of a triangle. kb_FindOutIfTriangle

練習 1032-P1-下9週-Test1-判斷閏年 (30 points) 1、西元年份是400的倍數 認知: 1、西元年份是400的倍數 2、西元年份是4的倍數但不是100的倍數 閏年

統一作業

統一作業

統一作業

練習 kb_guessNum

switch 語法:

Example

程設二

迴圈 種類 for while do … while

for 語法: Ex1: Ex2:

For執行流程 功能:印出5次字串 1、 2、 4、 3、

累加 sum=1 sum=3

練習 kb_practice_for1 輸入一個整數n 1、若n值大於5,則印出 ”Fail” 2、否則利用for迴圈方式印出n次 ”hello”

練習 kb_practice_for2 輸入一個整數n , 1、若n<1 或 n>100則輸出"Fail"

練習 P1Test-018 輸入一個整數n 利用for迴圈計算n!的值

練習 kb_game

for 如何不執行完迴圈就先行離開? Ex: 「break」 執行到第5次就離開迴圈

for 如何不執行完迴圈內部程式碼就執行下一次迴圈? Ex: 「continue」 在迴圈執行到第三次時才會印出”Bye”

練習 kb_break

HW P1Test-006 輸入兩個整數,計算兩個整數之間所有奇數的和

練習 kb_gcd 輸入兩個整數,計算兩個整數的最大公因數

分析 [case1] input: 6 8 output: 2 [case1] input: 8 6 output: 2 [法一] Step1: 新增一個gcd變數 Step2: 用for迴圈,遞增方式,i初值=1,i終值=max 判斷兩數是否可被i整除,若可整除則gcd=i [法二] 用for迴圈,遞減方式,i初值=任取輸入的其中一數,i終值=1 判斷兩數是否可被max整除,若可整除則離開for

巢狀迴圈 - for Def:兩層for迴圈 Ex:

Example

練習 輸入直角三角型的高h,建立出高h的*符號直角三角形 input: 3 output: * ** ***

練習 建立一個高度=n且由*所構成的等腰三角形 input: 5 output: * *** ***** ******* *********

練習 kb_99multipyTable 顯示某區間的99乘法表 input: 2 5 output: 2x1 2x2 ......

HW 找出M到N之間的所有質數 e.g. 輸入:5 20 輸出:5 7 11 13 17 19

迴圈種類 for while do-while ex: break 強制離開迴圈 Continue 略過迴圈此回合 常搭配下列使用

while迴圈 語法: e.g.

do-while迴圈 語法: e.g.

練習 kb_practice_dowhile1 利用for、while、do-while三種寫法求得「1+2+...+10,但不含5」結果值

練習 利用do-while完成「反向輸出一個正整數」, 若此正整數超出int範圍,則輸出"out of range" kb_practice_dowhile2 利用do-while完成「反向輸出一個正整數」, 若此正整數超出int範圍,則輸出"out of range" input: 123456 output:654321

String type Def:一種字串type 1、非原生type 2、可使用它的method e.g.

String methods 比較兩字串大小:compareTo(String anotherString) 回傳值: 小於return -1 否則return正整數 e.g.

練習

如何使用String Step1: 先宣告 Step2: 使用method

String methods 取得字串長度:length() e.g.

HW kb_string2 求兩字串的最長共同字首 e.g. 輸入: 輸出:

String methods 比較兩個字串是否相同:equals(Object anObject) e.g. Correct: Error:

String methods 取得字串的特定字元:charAt(int index) e.g.

String methods 取得子字串在字串的位置: indexOf(String str, int fromIndex) e.g.

練習 kb_string1 length() charAt() equals()

練習 計算子字串在原始字串內出現的次數 e.g. 輸入: 輸出: P2Test-009 note: 使用indexOf(String str, int fromIndex) e.g. 輸入: 輸出: P2Test-009

Array(陣列) Def:最基本的容器 可儲存多個data Index從0開始

Array(陣列) 語法: 宣告 靜態宣告 動態宣告 寫法一: 寫法二: 生成 給值 1、宣告時左邊array中括號內不能給定大小 2、靜態宣告+給值時需寫在一起,不能分開

練習 array-001

Array(陣列) 如何取得陣列大小? e.g. 印出a陣列大小=3

對陣列的內容做排序 一、導入Arrays類別 二、對陣列做排序

練習 array-003

二維陣列 儲存方式:row major 宣告: 給值:

練習 kb_array2

練習 建立一個mxn大小的陣列 如: 印出每一位業務員各項目的銷售量, 最後計算公司總銷售量後印出 Array-010 各項目銷售量 32 35 26 30 34 33 31 各業務員 2x4

練習 P2Test-026

練習 kb_array1 併合且遞增排序兩個array

程設三

class (類別) Def:藍圖 or 模版 Jordan 11 模版 產生實體

class (類別) 架構: e.g. 皆可多個 2個成員成員變數 1個成員建構子 2個methods

方法(method) Def: 如同函數,可在內部實作某個功能 語法: Note:若不想回傳值,用void (最後不用加return)

方法(method) 如何在main class使用method? Ex1 : 欲在static method內使用別的method,則此method也須宣告成static Note:若method實作在main class內,則method須加上static

練習 kb_class1

練習 kb_class3

練習 建立一個method命名為count, 此method可計算子字串在原始字串內出現的次數 e.g. 輸入: 輸出: kb_class4 note: 使用indexOf(String str, int fromIndex) e.g. 輸入: 輸出: kb_class4

class (類別) 架構: e.g. 皆可多個 2個成員成員變數 1個成員建構子 2個methods

建構子(constructor) Def:用來給定成員變數初值 語法:1、method的特例 2、與類別名稱同名 可同時宣告

建立一個class (類別) – 不透用建構子給定成員變數初值 EX:建立一個Student學生類別 1、具一個成員變數,name 2、具一個method,getName()

如何使用一個class 新增一個實體s 使用實體s

練習 kb_class5

建立一個class (類別) – 用建構子給定成員變數初值 EX:建立一個Student學生類別 1、具一個成員變數,name 2、具一建構子,可用來給定name的初值 3、一個method,getName()

如何使用一個class 新增一個實體 使用實體

練習 kb_class7

練習 class-008 一、建立一個圓形(Circle)類別, 1、一個資料成員:半徑(radius) 2、一個method計算圓面積: getArea() Note:圓面積=3.14*radius*radius 二、利用此Circle類別新增一個實體 1、設定radius=1.2 2、輸出面積

作業 建立一個Jordan鞋子類別,此類別具有 1、兩個成員變數name(鞋名)、color(鞋顏色) 3、三個method String getName() //設定鞋名 void setColor() //設定鞋顏色 String getColor() //取得鞋顏色 kb_class2

練習 P2-hw010

static Def:用於變數 or method的宣告 e.g. 功能:1、共享 2、直接存取 讓多個物件共享此值 可不透過物件直接存取

練習 P2-hw09

System.out.printf %d:用於整數 Ex:

練習 P2-hw008

物件導向程式的三個特點 封裝 繼承 多型

授課內容 Review: array String Recursive Inheritance

寫程式的準則 要排版 有排版: 沒排版: 按tab鍵 來縮排

變數的命名 有效的變數: 1、開頭不能是數字 2、不可夾帶下列符號 「-」 「:」 e.g. 1、 2、

Scanner 常用的methods: nextLine():讀取一整行 next():讀取一個token

String Def:一種字串型態 1、非原生資料型態 2、不需要new 3、可使用它的method e.g.

String e.g. e.g.

String e.g. Correct: Error:

練習 kb_string3

String e.g. e.g.

String e.g. e.g.

練習 kb_string5

練習 kb_string4

Access control modes Visibility(能見度) 1、用於class 2、保護一個類別的屬性(or方法)不被外部任意修改,必須由內部控制 JAVA visibility 同一個class 同一個package 不同個package All methods child class Not child class Not child class private ok package (預設) protected Ok: method Fail: variable public 賽碼場

Visibility(能見度) e.g.

Example 設計一個車類別, 具有一個成員變數speed(車速),車速不可為負值 具有一個方法speedUp(加速) 避免user直接修改speed成員變數

練習 kb_visibility1

overloading Def: 一個類別內具有多個相同名稱的method, 但參數的型態、個數不同 e.g. 兩個不同的method

練習 P3Test-015

練習 kb_overloading1 m n p m k p 1 + (1+3) + (1+2*3) + (1+3*3) + (1+4*3) + …. = 1 + 4 + 7 + 10 =22 ( ∵13>10 )

Recursive Fibonacci number(費氏數列)

練習 kb_Fibonacci

Recursive Ackermann’s function A(2,2) = ? A(2,1) = ? A(1,2) = ?

練習 10511-test005

Recursive Hanoi Tower 1、搬移次數: T(n) = 2T(n-1) + 1 2、B柱至少需n-1空間

練習 kb_Recursive_HanoiTower

Abstract class 功能: 1、建構在繼承之上,不可直接new 2、只實作部份methods,abstract methods不實作 優點:讓base class較抽象化 語法: 不實作 須實作

Abstract class 建立 使用 Base class: Derived class:

class VS Abstract class 差別:1、一般類別內的method須實作, 描象類別內的描象method不實作 2、一般類別可直接new 描象類剛不可直接new 一般類別 描象類別

練習 kb_abstract1

Inheritance(繼承) 目的:重複使用code 認知: 愈上層的類別(父類別)愈抽象(base class or parent class) 愈下層的類別(子類別)愈精確(derived class or child class) 如:「上層類別animal」會比「上層類別people」來的描象 父類別,「parent class」or「base class」 子類別,「child class」or「derived class」

Inheritance(繼承) 用法 建立:建立父類別、子類別繼承父類別 使用:使用子類別 dog類別會有下成員 1、int age 2、void speak() 3、int foot

Overriding(覆寫) 用法 建立:建立父類別、子類別繼承父類別 使用:使用子類別 dog類別會有下成員 1、int age 2、int foot 3、void speak() (被覆寫)

super Def: 減少子類別程式碼 延用父類別的建構子 有參數 無參數 延用父類別的method

Example 父類別:2D圖形 子類別:長方形 沒用super 用super

練習 kb_Inheritance1

練習 kb_Inheritance2

類別圖 Def: 屬於UML的一種圖,用來描述系統內部的靜態結構

類別圖 元件: 類別 關係 Association Aggregation (has-a) Composition (part-of) Generalization (繼承) Realization (實作)

類別圖 Association Generalization Realization

toString() 任何類別都預設有此method 用途:印出類別物件時可直接印出字串 語法: 實作toString() All class 都繼承自Object這個類別 印出toString() 內的字串

練習 kb_practice_toString

練習 P3Test-011 子類別須透過 父類別的method來取得值 實作兩個methods 1、getWidth() 2、getLength() 輸出長方體的表面積

練習 P3Test-018 少toString() 建構子、getName()、area() 正方形邊長為5 立方體邊長為10 輸出表面積

練習 kb_compareObject

練習 kb_MaxLength

程設四

class的應用 應用:將class當作容器來儲存多個data 目的:解決低階容器使用上容易出錯的問題 易誤用index位置而出錯 Stack s; s.push(10);

Class應用 - 製作出好用的容器 class 容器 操作1 放data 操作2 取data

Class應用 - 製作出好用的容器 class array method1 放data method2 取data

Class應用 - 製作出好用的容器

Stack Def:一個容器,依先進後出(FILO)方式儲放data 使用:

利用Array製作Stack 宣告兩個變數: 實作三個操作: 1、top 2、int a[]; 4 3 2 1 1、push:放data進去 -1 實作三個操作: 1、push:放data進去 2、pop:取data出來 3、empty:判斷stack是否為空 1、判斷是否已滿 2、top+1 3、存入data top 1、判斷是否為空 2、取出data 3、top-1 判斷top是否為-1

利用Array製作Stack

練習 kb_Stack_LinearArray (若空間大小為3)

Overriding(覆寫) Ex: 功能: 1、 建構在繼承之上 2、父類別與子類別具有同相名稱的method, Type相同 參數數量、type相同

Overloading(多載) 功能:多個methods名稱相同,但參數的型 態、個數不同 EX: 參數個數=1 參數型態= String 參數個數=2 參數型態= String、int

example overriding implement

Abstract class 功能: 1、建構在繼承之上,不可直接new 2、只實作部份methods,abstract methods不實作 優點:讓base class較抽象化 語法: 不實作 須實作

Abstract class 建立 使用 Base class: 僅宣告不實作 Derived class: 留給子類別實作

class VS Abstract class 一般類別 描象類別 method須實作 部份method可不實作 可直接new 不可直接new 一般類別 描象類別

super 用途: 1、減少子類別程式碼 2、配合能見度使用 用法:寫在子類別 欲延用父類別的建構子 欲延用父類別的method 無參數 有參數 欲延用父類別的method EX: 父類別有private成員

Example 父類別:2D圖形 子類別:長方形 沒用super的寫法: 用super的寫法:

練習 kb_abstract2

Polymorphism(多型) 前提:1、多型建構在繼承之上 2、父類別與子類別具有相同名稱但不同功能的method 優點:讓父類別當作子類別的通用型態,以增加使用上的 彈性,減少系統的開發複雜度

Polymorphism(多型) 一般: 多型: 父 子 讓車子的行駛方式變戰車 (向上轉型)

Example1 父 子 a的可存取的範圍 = class A + overriding overriding

Example2 印出?????? Step1: R擁有的methods (繼承) Step2: R轉型後methods的內容 Step3: 呼叫到的method Ans: 4

kb_practice_polymorphism 練習 kb_practice_polymorphism

劍士、法師都有跑的method,所以寫一個「角色」父類別 多型的使用時機 應用:常使用在遊戲角色的建立 範例:建立「劍士」、「法師」角色 劍士、法師都有跑的method,所以寫一個「角色」父類別

缺點:程式彈性差,若有50個用劍角色則修改50個fight() 多型的使用時機 缺點:程式彈性差,若有50個用劍角色則修改50個fight()

EX: 劍士、騎士攻擊方式都是用”揮劍”, 多型的使用時機 EX: 劍士、騎士攻擊方式都是用”揮劍”, 若改成”串刺”須修改2個fight()

多型的使用時機 1、將「重複功能的method」寫成一個Fight類別 2、再寫一個UseSword類別繼承此Fight類別

改寫Character、Swordsman、knight類別 多型的使用時機 改寫Character、Swordsman、knight類別 [優點] 1、減少重複的程式碼 2、減少人工修改時間、失誤率

多型的使用時機 主程式

練習 kb_polymorphism1

Interface(介面) 功能:只宣告但所有methods都不實作 優點:讓base class更抽象化 建立: 介面名稱 (隨便命名) 僅宣告不實作 Note: 1、interface 不可直接new 2、interface 可繼承 3、實作interface時記得method要宣告成public

Example 介面: 實作: 介面名稱 實作介面 (記得加上public)

Interface(介面) 同時實作多個介面: 介面1 介面2

練習 P4Test-030 實作出來

Interface(介面) 若想新增method:[法一] 利用interface 突然想宣告一些不實作的methods

Interface(介面) 若想新增method:[法二] 利用abstract類別 突然想宣告一些不實作的methods

Interface(介面) 若想同時「繼承某類別」且「實作某介面」

練習 P4Test-011 accountFee() (題目寫錯了) 實作出此類別圖 accountFee() accountFee()

練習 P4Test-010 accountFee() (題目寫錯了) 實作出此類別圖 accountFee() accountFee()

enum(列舉) Def:定義名詞來取代常數 宣告: 使用: 列舉名稱

練習7 kb_practice_enum

generic(泛型) 功能:讓type的使用更有彈性 Ex: 也不一定要用T

練習8 kb_practice_generic

HW4 P4Test-011

可加入e.toString()來得知原始的例外訊息 Exception(例外處理) 目的:讓你的程式在執行階段時更加穩固,不易crash 寫法1: 編譯階段 – compiling 載入階段 - 點兩下執行檔 執行階段 - 程式執行中 arithmeticException EX: 可加入e.toString()來得知原始的例外訊息

Exception(例外處理) 寫法2: EX: ArithmeticException

常見的Exception type ArrayIndexOutOfBoundsException ArithmeticException InterruptedException NumberFormatException InputMismatchException Exception

Example1 Method須加上關鍵字 編譯階段 – compiling 載入階段 - 點兩下執行檔 執行階段 - 程式執行中

手動觸發例外 利用「throw」 內建的Exception類別 (也可自行建立) 若用Exception類別的話 可加入例外訊息 再利用getMessage()取得訊息 引發例外後程式即會中斷,所以不會執行到此行

Exception 自行引發例外 + 不中斷的做法 利用getMessage()取得回傳的訊息

Exception 自行引發例外 +不中斷的做法+不使用內建例外類別 自行建立例外類別 自行建立例外類別

Example2 印出例外回傳的字串 自動偵測哪種例外 手動指定哪種例外 若 a.div(11,1) 則輸出 “Exception: C>10” 自動偵測哪種例外 手動指定哪種例外

練習 kb_Exception1

練習 P4Test-009