Reusing Classes Classes Inheritance ppt Outline Inheritance Composition
- Slides: 76
Reusing Classes 重複運用 Classes <<Inheritance. ppt>>
Outline 重複使用類別的方式 Inheritance (繼承) Composition (複合) 初嚐重構 (Refacotring) 的滋味 UML diagrams 簡介向上轉型 (upcasting) Adaptor Pattern 2
繼承 語法 實際用途 Method Overriding (函式覆載) 再探 Constructor super 關鍵字 protected 關鍵字 final 關鍵字 4
用途一 、重複運用程式碼 // Mean. java public class Mean { public int cal. Num(int upper) { int sum = 0, result = 0; for (int i = 1; i <= upper; i++) sum += i; result = sum / upper; return result; } } 6
用途一 (Cont. ) // Range. Mean. java public class Range. Mean extends Mean { public int cal. Num(int lower, int upper) { int result = 0; int lower. Sum = lower * cal. Num(lower - 1); int upper. Sum = upper * cal. Num(upper); result = (upper. Sum – lower. Sum) / (upper – lower + 1); return result; } } 7
用途一 (Cont. ) // Main. java public class Main { public static void main(String[] args) { Range. Mean rm = new Range. Mean(); int mean. Of. One. To. Ten = rm. cal. Num(10); // 5. 5 // Mean. cal. Num() int mean. Of. Five. To. Ten = rm. cal. Num(5, 10); // 6. 5 // Range. Mean. cal. Num() } } 子類別可以定義 overload 方法,去擴充父類別的 method。 8
用途二、程式碼修改具獨立性 // Mean. java public class Mean { public int cal. Num(int upper) { int sum = 0, result = 0; for (int i = 1; i <= upper; i++) sum += i; result = sum / upper; return result; } } 9
用途二、修改之後 // Mean. java (改版後) public class Mean { public int cal. Num(int upper) { int sum = 0, result = 0; sum = (1 + upper) * upper / 2 result = (sum / upper) return result; } } 10
Overriding 圖示 class Animal eat() sleep() reproduce( ) class Mammal 覆寫 reproduce( ) class Cat 覆寫 sleep() hunt. Mice() purr() Cat Simon eat() reproduce( ) sleep() hunt. Mice() purr() 12
用途三、修改父類別 // Mean. java 無原始碼的情況下! public class Mean { public int cal. Num(int upper) { int sum = 0, result = 0; for (int i = 1; i <= upper; i++) sum += i; result = sum / upper; return result; } } 13
用途三 (cont. ) // Efficient. Mean. java public class Efficient. Mean extends Mean{ public int cal. Num(int upper) { int sum = 0, result = 0; Method Override! sum = (1 + upper) * upper / 2; result = sum / upper; return result; } } 14
用途三 (cont. ) // Main. java public class Main { public static void main(String[] args) { Mean m = new Mean(); int mean. Of. One. To. Ten = m. cal. Num(10); // 5. 5 // Mean. cal. Num() } } 15
用途三 (cont. ) // Main. java (微微修正後) public class Main { public static void main(String[] args) { Mean m = new Efficient. Mean(); int mean. Of. One. To. Ten = m. cal. Num(10); // 5. 5 // Range. Mean. cal. Num() } } 多型 (polymorphism) 的展現 16
this() 的使用時機 // Worker. java public class Worker { private String name; private int salary; public Worker(String name) { this(name, 25000); } public Worker(String name, int salary) { this. name = name; this. salary = salary; } // other mothods. . . } 18
範例 // Main. java public class Main { public static void main(String[] args){ Worker Peter = new Worker(“Peter”); // Peter’s salary is $25, 000. Worker Sunny = new Worker(“Sunny”, 100); // Sunny’s salary is $100. } } 19
範例 // Person. java public class Person { private String name; public Person(String name) { this. name = name; } // other mothods. . . } 21
範例 (Cont. ) // Doctor. java public class Doctor extends Person{ private int woking. ID; public Person(String name, int id) { super(name); woking. ID = id; } // other mothods. . . } 22
範例 // Drawing. java class Drawing { public Drawing() { print(“Drawing()”); } protected void print(String message) { System. out. println(message); } } 25
範例 (Cont. ) // Cartoon. java public class Cartoon extends Drawing { public Cartoon() { print(“Cartoon()”); } public static void main(String[] args) { Cartoon x = new Cartoon(); } % java Cartoon } Drawing() Cartoon() % 26
final 關鍵字 Final data Final method Final class Final 於重構 (refactoring) 上的應用 28
範例 // Final. Data. java public class Final. Data { // Can be compile-time constants final int i = 9; // Typical public constant public static final int MY_AGE = 27; // Is run-time constant final int j = (int) (Math. random() * 20); } 31
範例 (final arguments) // Final. Arguments. java public class Final. Arguments { void with(final String s) { s = new String(); // compile error! } void g(final int i) { i++; // compile error! } } 33
Refactoring Replace Magic Number with Symbolic Constant double potential. Energy(double mass, double height) { return mass * 9. 81 * height; // 位能 = mgh } double potential. Energy(double mass, double height) { return mass * GRAVITATIONAL_CONSTANT * height; } static final double GRAVITATIONAL_CONSTANT = 9. 81; 34
Refactoring (重構) 78 refactorings Extract Method Extract Subclass Move Field Move Method Push Up Field … 35
語法 public final void f () { // … } 37
語法 & 實例 // IAm. Final. Class. java public final class IAm. Final. Class { // … } public final class String extends Object implements Serializable, Comparable, Char. Sequence 39
範例 // Stack. java import java. util. Vector; public class Stack { private Vector elements = new Vector(); public void push(Object obj) { elements. add(obj); } public Object pop() { return elements. remove(size() - 1); } } 41
繼承的陷阱 // My. Hash. Set. java public class My. Hash. Set extends Hash. Set { private int add. Count = 0; public My. Hash. Set() { } public My. Hash. Set(Collection c) { super(c); } public My. Hash. Set(int init. Cap, float load. Factor) { super(init. Cap, load. Factor); } // continue… 45
繼承的陷阱(Cont. ) public boolean add(Object o) { add. Count++; return super. add(o); } public boolean add. All(Collection c) { add. Count += c. size(); return super. add. All(c); } public int get. Add. Count() { return add. Count; } } 46
繼承的陷阱(Cont. ) My. Hash. Set s = new My. Hash. Set(); s. add. All(Arrays. as. List(new String[] {“a”, “b”, “c”})); System. out. println(s. get. Add. Count); // 6! 原因出在 Hash. Set 的 add. All() 暗中呼叫了 add(),卻沒有在 document 中交代清楚。這並不 奇怪,因為 Hash. Set 的設計並不是用來衍生出子類 別的。 47
UML 中 aggregation 表示法 飛機場 0. . 30 飛機 50
UML Distilled 9 basic diagram Use case diagram Class diagram Object diagram Sequence diagram Collaboration diagram Component diagram State diagram Activity diagram Deployment diagram 51
範例 (upcasting) // Driver. java class Display. Driver { public void play. Movie(Movie m) { //… } } class Matrox extends Display. Driver{ public void play. Movie(Movie m) { //… } } class ATI extends Display. Driver { public void play. Movie(Movie m) { //… } } 53
範例 (Cont. ) // Media. Player. java public class Media. Player { private Display. Driver driver; public Media. Player(Display. Driver d) { driver = d; } public void show. Movie() { // 準備 Movie m d. play. Movie(m); } // cont… 54
範例 (Cont. ) // Media. Player. java (cont…) public static void main(String[] args) { Matrox matrox = new Matrox(); ATI ati = new ATI(); Media. Player m 1 = new Media. Player(matrox); Media. Player m 2 = new Media. Player(ati); } } // end class 這是一個向上轉型的動作 55
Adaptor Pattern 56
起因 * Drawing. Editor Shape bounding. Box create. Manipul Text. View Get. Extent Line bounding. Box create. Manipul Text bounding. Box create. Manipul 58
解決方式(UML 圖示) * Drawing. Editor Shape bounding. Box create. Manipul Text. View Get. Extent Line bounding. Box create. Manipul Text text bounding. Box create. Manipul return text. get. Extent() 60
類別圖(繼承) Main Uses <<interface>> implement Print print. Weak print. Strong Print. Banner print. Weak print. Strong extends Banner show. With. Paren show. With. Aster 63
Banner 類別 // Banner. java public class Banner { private String string; public Banner(String s) { string = s; } public void show. With. Paren() { System. out. println(“(” + string + “)”); } public void show. With. Aster() { System. out. println(“*” + string + “*”); } } 64
Print 介面 // Print. java public interface Print { public abstract void print. Weak(); public abstract void print. Strong(); } 65
Print. Banner 類別 // Print. Banner. java public class Print. Banner extends Banner implements Print { public Print. Banner(String s) { super(string); } public void print. Weak() { show. With. Paren(); } public void print. Strong() { show. With. Aster(); } } 66
Main 類別 // Main. java public class Main { public static void main(String[] args) { Print p = new Print. Banner(“Hello”); p. print. Weak(); p. print. Strong(); } } % java Main (Hello) *Hello* 67
類別圖(委讓) Main Uses <<interface>> implement Print print. Weak print. Strong contains Print. Banner print. Weak print. Strong Banner show. With. Paren show. With. Aster 69
Print. Banner 類別 // Print. Banner. java public class Print. Banner implements Print { private Banner b; public Print. Banner(String s) { b = new Banner(string); } public void print. Weak() { b. show. With. Paren(); } public void print. Strong() { b. show. With. Aster(); } } 70
Main 類別 // Main. java public class Main { public static void main(String[] args) { Print p = new Print. Banner(“Hello”); p. print. Weak(); 這是一個向上轉型的動作 p. print. Strong(); } } % java Main (Hello) *Hello* 71
Design Patterns 23 patterns Factory method Adaptor Bridge Iterator Observer Template method … 72
Refactoring 重新組織你的程式碼 <<Inheritance. ppt>>
再探 Main 類別 // Main. java public class Main { public static void main(String[] args) { Print p = new Print. Banner(“Hello”); p. print. Weak(); p. print. Strong(); } } Print p = new Print. Banner(“Hello”); 如果上面這段敘述出現很多次,將來想要用新的 Print 子類別取代 Print. Banner 就會出現困擾! 74
重構 Replace Creation with Factory Method Print p = new Print. Banner(“Hello”); Print p = create. Print(); Print create. Print() { //… } 75
重構後的結果 // Main. java public class Main { public static void main(String[] args) { Print p = create. Print(); p. print. Weak(); p. print. Strong(); } private static Print create. Print() { return new Print. Banner(“Hello”); } } 76
- Composition vs inheritance vs aggregation
- O que é classe e subclasse de palavras
- Pre ap classes vs regular classes
- Ppt molecular basis of inheritance
- What is a quote sandwich
- Copyright
- Cadbury silk
- Prisma model inheritance
- Uml inheritance
- Priority inheritance
- Inheritance scala
- The inheritance of loss themes
- Thalassemia trait
- Rails sti vs polymorphic
- Sex linked trait punnett square
- Sexlinked inheritance
- Qualitative traits vs quantitative traits
- Hope deferred makes the heart sick niv
- Tujuan inheritance
- Inheritance atau pewarisan merupakan salah satu cara untuk
- X-linked recessive pedigree chart
- Complete dominance pattern of inheritance
- What is encapsulation
- Non nuclear inheritance
- Non mendelian inheritance
- Human inheritance modern genetics answer key
- Modern genetics human inheritance answer key
- Modern genetics human inheritance answer key
- Epistatic inheritance
- X linked dominant punnett square
- Hemophilia inheritance
- Inheritance in islam
- Inheritance of quantitative traits
- Private inheritance
- Inheritance tax valencia region spain
- Hierarchical inheritance in c++
- Inheritance in java
- Advantages and disadvantages of inheritance in java
- Private inheritance
- Codominant inheritance patterns
- Inheritance of quantitative traits
- Hereditary hemochromatosis inheritance pattern
- Genotype
- Use case inheritance
- Chapter 11 section 2: complex patterns of inheritance
- Characteristic of learners
- Chapter 16 the molecular basis of inheritance
- Extranuclear inheritance
- Chapter 15 the chromosomal basis of inheritance
- Section 12-1 chromosomes and inheritance
- Chapter 11 complex inheritance and human heredity test
- The pedigree below traces the inheritance of alkaptonuria
- Inheritance in c
- Blood transfusion
- Andrea morichetta
- Genotype of autosomal dominant
- Encapsulation abstraction inheritance and polymorphism
- Inheritance.ilmsummit
- Polygenic inheritance
- Jenis inheritance
- Autosome
- Ic code
- The pedigree below traces the inheritance of alkaptonuria
- Cystic fibrosis mendelian inheritance
- Define inheritence
- Pengertian dari inheritance
- Multifactorial inheritance.
- Complex patterns of inheritance
- A gene locus is
- Inheritance means
- Chapter 16: the molecular basis of inheritance
- Chapter 15 the chromosomal basis of inheritance
- The chromosomal basis of inheritance chapter 15
- Chapter 15 the chromosomal basis of inheritance
- Inheritance board game
- The holy spirit is a deposit guaranteeing our inheritance
- Interface calculator public int add(int a int b) class test