SlideShare a Scribd company logo
1 of 37
Download to read offline
Hubert Chan,[object Object],Refactoring – chap 8-2,[object Object]
8.9 Replace Magic Number with Symbolic Constant,[object Object],Magic Number 特性,[object Object],具有特殊意義,卻又不能明確表現出其意義。,[object Object],可讀性差 / 不明確 / 牽一髮動全身,[object Object],解決方案,[object Object],以 Constant 取代Magic Number,[object Object],double potentialEngery(double mass, double height) {,[object Object],    return mass * 9.81 * height,[object Object],},[object Object],double potentialEngery(double mass, double height) {,[object Object],    return mass * GRAVITATIONAL_CONSTANT * height,[object Object],},[object Object],static final double GRAVITATIONAL_CONTSTANT = 9.81;,[object Object]
8.9 Replace Magic Number with Symbolic Constant,[object Object],Refactoring 時機,[object Object],Magic Number 是 Type Code,[object Object],Replace Type Code With Class,[object Object],陣列長度,[object Object],使用 Array.length(),[object Object],關鍵字,[object Object],const,[object Object],static,[object Object],final,[object Object]
8.10 Encapsulate Field,[object Object],class A {,[object Object],  public String _name;,[object Object],},[object Object],class A {,[object Object],private String _name;,[object Object], public String getName() {return _name;},[object Object], public void setName(String arg) {_name = arg;},[object Object],},[object Object]
8.10 Encapsulate Field,[object Object],動機,[object Object],封裝 Encapsulation,[object Object],資料隱藏 Data Hiding,[object Object],public 欄位:資料可以被修改、存取,但是擁有的物件卻無法控制其行為,[object Object],改變存取資料為(Objective-C 2.0 property),[object Object],readonly,[object Object],readwrite,[object Object],assign,[object Object],copy,[object Object]
8.11 Encapsulate Collection,[object Object],目的,[object Object],傳回 Collection 的一個 readonly view,[object Object],提供 add/remove 元素的 function,[object Object]
8.11 Encapsulate Collection,[object Object],動機,[object Object],Getter 不該傳回 collection 本身,[object Object],暴露過多實作細節,[object Object],使用者可以存取 getter 拿到的 collection,[object Object],使用 add/remove 函式添加元素,[object Object],使用者不用管底層使用哪種 Collection(List, Array, Vector),[object Object]
8.11 Encapsulate Collection,[object Object],class Course {,[object Object],  public Course (String name, booleanisAdvanced) {},[object Object],  public booleanisAdvanced() {},[object Object],},[object Object],Class Person {  public Set getCourses() {,[object Object],   return _courses;  },[object Object], public void setCourses(Set arg) {,[object Object],   _courses = arg;  },[object Object], private Set _courses;,[object Object],},[object Object],//使用者直接操作 data,[object Object],//直接 assign,非複製,[object Object]
8.11 Encapsulate Collection,[object Object],Person kent = new Person();,[object Object],Set s = new HashSet();,[object Object],s.add(new Course("Smalltalk Programming", false));,[object Object],s.add(new Course("Appreciating Single Malts", true));,[object Object],kent.setCourses(s);,[object Object],Course refact = new Course("Refactoring", true);,[object Object],kent.getCourses().add(refact);,[object Object],kent.getCourses().remove(refact);,[object Object],//直接 assign,非複製,[object Object],//使用者直接操作 data,[object Object],//使用者直接操作 data,[object Object]
8.11 Encapsulate Collection,[object Object],Refactoring for JAVA 1.2 – ,[object Object],使用 add/remove 函式,[object Object],Class Person {,[object Object], public void addCourse(Course arg) {,[object Object],   _courses.add(arg);  },[object Object], public void removeCourse(Course arg),[object Object],   _courses.remove(arg);  },[object Object], public void initializeCourses(Set arg) {,[object Object],Assert.isTrue(_courses.isEmpty());,[object Object],_courses.addAll(arg);  },[object Object],},[object Object],//內部的 _courses != arg,[object Object]
8.11 Encapsulate Collection,[object Object],Refactoring for JAVA 1.2 – ,[object Object],使用 add/remove 函式,[object Object],Person kent = new Person();,[object Object],Set s = new HashSet();,[object Object],s.add(new Course("Smalltalk Programming", false));,[object Object],s.add(new Course("Appreciating Single Malts", true));,[object Object],kent.setCourses(s);,[object Object],Person kent = new Person();,[object Object],kent.addCourse(new Course("Smalltalk Programming", false));,[object Object],kent.addCourse(new Course("Appreciating Single Malts", true));,[object Object]
8.11 Encapsulate Collection,[object Object],Refactoring for JAVA 1.2 – ,[object Object],不該讓使用者透過 getter 修改物件內的 collection,[object Object],Getter 回傳 unmodified set,[object Object],kent.getCourses().add(new Course("C Programming", false));,[object Object],Class Person {,[object Object],  public Set getCourse() {,[object Object],return Collections.unmodifiableSet(_courses);},[object Object],},[object Object],//回傳 unmodifiable的 Set,[object Object]
8.11 Encapsulate Collection,[object Object],將行為移至 class 內,[object Object],Move Method,[object Object],更好維護,[object Object],class Person {,[object Object],intnumberOfAdvancedCourses(Person person) {    Iterator iter = person.getCourses().iterator();,[object Object],int count = 0;,[object Object],   while (iter.hasNext()) {,[object Object],     Course each = (Course) iter.next();,[object Object],     if (each.isAdvanced()) count++;    },[object Object],   return count;,[object Object],  },[object Object],},[object Object]
8.12 Replace Record with Data Class,[object Object],手法,[object Object],把傳統的 record structure 轉為 data class,[object Object],使用 getter/setter,[object Object],class Person {,[object Object],  String getName() {,[object Object],   return _name;  },[object Object],  String setName(String arg) {,[object Object],   _name = arg;  },[object Object], private String _name;,[object Object],},[object Object],class PersonRecord {,[object Object],  public char[] name;,[object Object],},[object Object]
8.13 Replace Type Code with Class,[object Object],目的,[object Object],Type Code 沒有型別檢驗,[object Object],Type Code => Class,factory class 可以做型別檢驗,[object Object]
8.13 Replace Type Code with Class,[object Object],目標是 Person 中的 Type Code,[object Object], class Person {,[object Object],    public static final int O = 0;,[object Object],    public static final int A = 1;,[object Object],    public static final int B = 2;,[object Object],    public static final int AB = 3;,[object Object],    private int _bloodGroup;,[object Object],    public Person (intbloodGroup) {,[object Object],        _bloodGroup = bloodGroup;,[object Object],    },[object Object],    public void setBloodGroup(intarg) {,[object Object],        _bloodGroup = arg;,[object Object],    },[object Object],    public intgetBloodGroup() {,[object Object],        return _bloodGroup;,[object Object],    },[object Object],  },[object Object],//型別是 int,不是特別的型別,[object Object]
8.13 Replace Type Code with Class,[object Object],把 Person 中 Type Code 換成 BloodGroup Class,[object Object], class BloodGroup {,[object Object],    public static final BloodGroup O = new BloodGroup(0);,[object Object],    public static final BloodGroup A = new BloodGroup(1);,[object Object],    public static final BloodGroup B = new BloodGroup(2);,[object Object],    public static final BloodGroup AB = new BloodGroup(3);,[object Object],    private static final BloodGroup[] _values = {O, A, B, AB};,[object Object],    private finalint _code;,[object Object],privateBloodGroup (int code ) {,[object Object],        _code = code;,[object Object],    },[object Object],    public intgetCode() {,[object Object],        return _code;,[object Object],    },[object Object],    public static BloodGroup code(intarg) {,[object Object],        return _values[arg];,[object Object],    },[object Object],  },[object Object],//class instance 而非 Type Code,[object Object],//constructor 是 private,[object Object]
8.13 Replace Type Code with Class,[object Object],使用 Class 並維持原本的對外介面,[object Object], class Person {,[object Object],    public static final int O = BloodGroup.O.getCode();,[object Object],    public static final int A = BloodGroup.A.getCode();,[object Object],    public static final int B = BloodGroup.B.getCode();,[object Object],    public static final int AB = BloodGroup.AB.getCode();,[object Object],private BloodGroup _bloodGroup;,[object Object],    public Person (intbloodGroup) {,[object Object],        _bloodGroup = BloodGroup.code(bloodGroup);,[object Object],    },[object Object],    public intgetBloodGroup() {,[object Object],        return _bloodGroup.getCode();,[object Object],    },[object Object],    public void setBloodGroup(intarg) {,[object Object],        _bloodGroup = BloodGroup.code (arg);,[object Object],    },[object Object],  },[object Object]
8.13 Replace Type Code with Class,[object Object],在 Constructor 使用 Class 做參數,[object Object],為新的介面加入 setter/getter,[object Object], class Person { ,[object Object],    public Person (BloodGroupbloodGroup) {,[object Object],        _bloodGroup = bloodGroup;,[object Object],    },[object Object],    public void setBloodGroup(BloodGrouparg) {,[object Object],        _bloodGroup = arg;,[object Object],},[object Object],   public BloodGroupgetBloodGroup() {,[object Object],        return _bloodGroup;,[object Object],    },[object Object],  },[object Object],//使用 BloodGroup,[object Object],// Setter,[object Object],// Getter,[object Object]
8.13 Replace Type Code with Class,[object Object],使用者端的改變,[object Object],Person thePerson = new Person(PersonA);,[object Object],thePerson.getBloodGroupCode();,[object Object],thePerson.setBloodGroup(Person.AB);,[object Object],Person thePerson = new Person(BloodGroup.A);,[object Object],thePerson.getBloodGroup();,[object Object],thePerson.setBloodGroup(BloodGroup.AB);,[object Object]
8.14 Replace Type Code with Subclasses,[object Object],使用時機,[object Object],有一個 type code 會影響 class 的行為,[object Object],為了 Replace Conditional with Polymorphism 鋪路,[object Object],彰顯「特定類別的行為」,[object Object]
8.14 Replace Type Code with Subclasses,[object Object],目標 class,[object Object],具有會影響行為的 type code,[object Object], class Employee{,[object Object],    private int _type;,[object Object],    static final int ENGINEER = 0;,[object Object],    static final int SALESMAN = 1;,[object Object],    static final int MANAGER = 2;,[object Object],    Employee (int type) {,[object Object],        _type = type;,[object Object],},[object Object],},[object Object],//Type Code,[object Object]
8.14 Replace Type Code with Subclasses,[object Object],在 Base Class 將行為的 function 抽出來,[object Object],getType(),[object Object], class Employee{,[object Object],abstractintgetType();,[object Object],},[object Object], class Engineer extends Employee {,[object Object],intgetType() {,[object Object],    return Employee.ENGINEER;   },[object Object],},[object Object],//abstract 強制 subclass 需要 implement,[object Object],// implement,[object Object]
8.14 Replace Type Code with Subclasses,[object Object],修改 factory class,[object Object], class Employee {,[object Object],    static Employee create(int type) {,[object Object],switch (type) {,[object Object],            case ENGINEER:,[object Object],               return new Engineer();,[object Object],            case SALESMAN:,[object Object],               return new Salesman();,[object Object],            case MANAGER:,[object Object],               return new Manager();,[object Object],           default:,[object Object],              ...,[object Object],    },[object Object], },[object Object],//getType邏輯在各類別中,[object Object]
8.14 Replace Type Code with Subclasses,[object Object],Refactoring 之後,[object Object],把只與各個類別相關的函式放在類別中,[object Object],Push Down Method,[object Object],Push Down Field,[object Object]
8.15 Replace Type Code with State/Strategy,[object Object],使用時機,[object Object],有一個 type code 他會影響 class 行為,[object Object],無法使用 subclassing,例如 type 可變,[object Object],手法,[object Object],以 state object 取代 type code,[object Object],比較 Replace Type Code with Class,[object Object]
8.15 Replace Type Code with State/Strategy,[object Object],目標:將 type code 以 state object 取代,[object Object], class Employee{,[object Object],    private int _type;,[object Object],    static final int ENGINEER = 0;,[object Object],    static final int SALESMAN = 1;,[object Object],    static final int MANAGER = 2;,[object Object],    Employee (int type) {,[object Object],        _type = type;,[object Object],},[object Object],},[object Object],//Type Code,[object Object]
8.15 Replace Type Code with State/Strategy,[object Object],觀察:如何使用 type code,[object Object], class Employee{,[object Object],intpayAmount() {,[object Object],        switch (_type) {,[object Object],            case ENGINEER:,[object Object],               return _monthlySalary;,[object Object],            case SALESMAN:,[object Object],               return _monthlySalary + _commission;,[object Object],            case MANAGER:,[object Object],               return _monthlySalary + _bonus;,[object Object],            default:,[object Object],               throw new RuntimeException("Incorrect Employee");,[object Object],        },[object Object],},[object Object],},[object Object],//依照 Type Code 進行運算,[object Object]
8.15 Replace Type Code with State/Strategy,[object Object],設計 state object / 共有 state 的部份,[object Object],使用 abstract class / abstract function,[object Object], abstract class EmployeeType {,[object Object],    abstract intgetTypeCode();,[object Object],  },[object Object],  class Engineer extends EmployeeType {,[object Object],intgetTypeCode () {,[object Object],        return Employee.ENGINEER;,[object Object],    },[object Object],  },[object Object],//abstract function,[object Object],//subclass implementation,[object Object]
8.15 Replace Type Code with State/Strategy,[object Object],改變 state 時,改變 state object 的 class,[object Object], class Employee...,[object Object],    private EmployeeType _type;,[object Object],    void setType(intarg) {,[object Object],        switch (arg) {,[object Object],            case ENGINEER:,[object Object],               _type = new Engineer();,[object Object],               break;,[object Object],            case SALESMAN:,[object Object],               _type = new Salesman();,[object Object],               break;,[object Object],            case MANAGER:,[object Object],               _type = new Manager();,[object Object],               break;,[object Object],            default:,[object Object],              ...,[object Object],        },[object Object],    },[object Object],//很像 factory pattern,[object Object],//搬出去?,[object Object]
8.15 Replace Type Code with State/Strategy,[object Object],將 factory method 放到 state object,[object Object], class Employee...,[object Object],    void setType(intarg) {,[object Object],        _type = EmployeeType.newType(arg);,[object Object],    },[object Object],class EmployeeType...,[object Object],    static EmployeeTypenewType(int code) {,[object Object],        switch (code) {,[object Object],            case ENGINEER:,[object Object],               return new Engineer();,[object Object],            case SALESMAN:,[object Object],               return new Salesman();,[object Object],            case MANAGER:,[object Object],               return new Manager();,[object Object],            default:,[object Object],              ...,[object Object],        },[object Object],    },[object Object],    static final int ENGINEER = 0;,[object Object],    static final int SALESMAN = 1;,[object Object],    static final int MANAGER = 2;,[object Object],//setter 使用 state class 的 factory method,[object Object],// state class 的 factory method,[object Object]
8.15 Replace Type Code with State/Strategy,[object Object],以 state object 的 state 進行運算,[object Object],接著可以用 Replace Conditional with Polymorphism,[object Object], class Employee...,[object Object],intpayAmount() {,[object Object],        switch (getType()) {,[object Object],            case EmployeeType.ENGINEER:,[object Object],               return _monthlySalary;,[object Object],            case EmployeeType.SALESMAN:,[object Object],               return _monthlySalary + _commission;,[object Object],            case EmployeeType.MANAGER:,[object Object],               return _monthlySalary + _bonus;,[object Object],            default:,[object Object],...,[object Object],        },[object Object],    },[object Object]
8.16 Replace Subclass with Fields,[object Object],使用時機,[object Object],Subclass 的 function 是 constant method,[object Object],可以透過回傳一個 field 來取代 constant method,[object Object]
8.16 Replace Subclass with Fields,[object Object],觀察,[object Object],abstract method 都只是回傳 hard-code 資料,[object Object], abstract class Person {,[object Object],    abstract booleanisMale();,[object Object],    abstract char getCode();,[object Object],  ...,[object Object],  class Male extends Person {,[object Object],booleanisMale() {,[object Object],        return true;,[object Object],    },[object Object],    char getCode() {,[object Object],        return 'M';,[object Object],    },[object Object],  },[object Object],//return hard-code,[object Object],//return hard-code,[object Object]
8.16 Replace Subclass with Fields,[object Object],以 Factory Method 隱藏 subclass 類別,[object Object],設定 subclass 的 constructor 為 private,[object Object],未來可以移除 subclass,[object Object], class Person...,[object Object],    static Person createMale(){,[object Object],        return new Male();,[object Object],    },[object Object],    static Person createFemale() {,[object Object],        return new Female();,[object Object],    },[object Object]
8.16 Replace Subclass with Fields,[object Object],為 superclass 加上想要取代的 field,[object Object], class Person...,[object Object],    protected Person (booleanisMale, char code) {,[object Object],        _isMale = isMale;,[object Object],        _code = code;,[object Object],},[object Object],booleanisMale() {,[object Object],        return _isMale;,[object Object],},[object Object],class Male...,[object Object],    Male() {,[object Object],        super (true, 'M');,[object Object],},[object Object],//以 Field 取代 subclass 的 function,[object Object]
8.16 Replace Subclass with Fields,[object Object],移除無用的 subclass,[object Object], class Person,[object Object],    static Person createMale(){,[object Object],        return new Person(true, 'M');,[object Object],    },[object Object],//以 factory pattern 抽換類別,[object Object]

More Related Content

What's hot

Linq Sanjay Vyas
Linq   Sanjay VyasLinq   Sanjay Vyas
Linq Sanjay Vyasrsnarayanan
 
Lecture 3, c++(complete reference,herbet sheidt)chapter-13
Lecture 3, c++(complete reference,herbet sheidt)chapter-13Lecture 3, c++(complete reference,herbet sheidt)chapter-13
Lecture 3, c++(complete reference,herbet sheidt)chapter-13Abu Saleh
 
clean code book summary - uncle bob - English version
clean code book summary - uncle bob - English versionclean code book summary - uncle bob - English version
clean code book summary - uncle bob - English versionsaber tabatabaee
 
data Structure Lecture 1
data Structure Lecture 1data Structure Lecture 1
data Structure Lecture 1Teksify
 
Oleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy
 
classes & objects in cpp overview
classes & objects in cpp overviewclasses & objects in cpp overview
classes & objects in cpp overviewgourav kottawar
 
Refactoring and code smells
Refactoring and code smellsRefactoring and code smells
Refactoring and code smellsPaul Nguyen
 
Extend GraphQL with directives
Extend GraphQL with directivesExtend GraphQL with directives
Extend GraphQL with directivesGreg Bergé
 
Generics in .NET, C++ and Java
Generics in .NET, C++ and JavaGenerics in .NET, C++ and Java
Generics in .NET, C++ and JavaSasha Goldshtein
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side JavascriptJulie Iskander
 

What's hot (20)

Linq Sanjay Vyas
Linq   Sanjay VyasLinq   Sanjay Vyas
Linq Sanjay Vyas
 
Lecture 3, c++(complete reference,herbet sheidt)chapter-13
Lecture 3, c++(complete reference,herbet sheidt)chapter-13Lecture 3, c++(complete reference,herbet sheidt)chapter-13
Lecture 3, c++(complete reference,herbet sheidt)chapter-13
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Tdd.eng.ver
Tdd.eng.verTdd.eng.ver
Tdd.eng.ver
 
C++ aptitude
C++ aptitudeC++ aptitude
C++ aptitude
 
clean code book summary - uncle bob - English version
clean code book summary - uncle bob - English versionclean code book summary - uncle bob - English version
clean code book summary - uncle bob - English version
 
data Structure Lecture 1
data Structure Lecture 1data Structure Lecture 1
data Structure Lecture 1
 
Oleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoC
 
Clean code
Clean codeClean code
Clean code
 
Specs2
Specs2Specs2
Specs2
 
Ch5 array nota
Ch5 array notaCh5 array nota
Ch5 array nota
 
Bw14
Bw14Bw14
Bw14
 
classes & objects in cpp overview
classes & objects in cpp overviewclasses & objects in cpp overview
classes & objects in cpp overview
 
Clean code
Clean codeClean code
Clean code
 
Refactoring and code smells
Refactoring and code smellsRefactoring and code smells
Refactoring and code smells
 
Monadic Java
Monadic JavaMonadic Java
Monadic Java
 
Extend GraphQL with directives
Extend GraphQL with directivesExtend GraphQL with directives
Extend GraphQL with directives
 
Generics in .NET, C++ and Java
Generics in .NET, C++ and JavaGenerics in .NET, C++ and Java
Generics in .NET, C++ and Java
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
 
C# 7.0, 7.1, 7.2
C# 7.0, 7.1, 7.2C# 7.0, 7.1, 7.2
C# 7.0, 7.1, 7.2
 

Viewers also liked

Sm Case4 Fuji Xerox
Sm Case4 Fuji XeroxSm Case4 Fuji Xerox
Sm Case4 Fuji XeroxChris Huang
 
Sm Case2 Walmart
Sm Case2 WalmartSm Case2 Walmart
Sm Case2 WalmartChris Huang
 
Real time big data applications with hadoop ecosystem
Real time big data applications with hadoop ecosystemReal time big data applications with hadoop ecosystem
Real time big data applications with hadoop ecosystemChris Huang
 
Disney報告 最終版
Disney報告 最終版Disney報告 最終版
Disney報告 最終版Chris Huang
 
重構—改善既有程式的設計(chapter 1)
重構—改善既有程式的設計(chapter 1)重構—改善既有程式的設計(chapter 1)
重構—改善既有程式的設計(chapter 1)Chris Huang
 
重構三兩事
重構三兩事重構三兩事
重構三兩事teddysoft
 

Viewers also liked (7)

Sm Case4 Fuji Xerox
Sm Case4 Fuji XeroxSm Case4 Fuji Xerox
Sm Case4 Fuji Xerox
 
Sm Case1 Ikea
Sm Case1 IkeaSm Case1 Ikea
Sm Case1 Ikea
 
Sm Case2 Walmart
Sm Case2 WalmartSm Case2 Walmart
Sm Case2 Walmart
 
Real time big data applications with hadoop ecosystem
Real time big data applications with hadoop ecosystemReal time big data applications with hadoop ecosystem
Real time big data applications with hadoop ecosystem
 
Disney報告 最終版
Disney報告 最終版Disney報告 最終版
Disney報告 最終版
 
重構—改善既有程式的設計(chapter 1)
重構—改善既有程式的設計(chapter 1)重構—改善既有程式的設計(chapter 1)
重構—改善既有程式的設計(chapter 1)
 
重構三兩事
重構三兩事重構三兩事
重構三兩事
 

Similar to 重構—改善既有程式的設計(chapter 8)part 2

QUESTION 6.Exercise 12-2   Work with an interfaceIn this exercis.pdf
QUESTION 6.Exercise 12-2   Work with an interfaceIn this exercis.pdfQUESTION 6.Exercise 12-2   Work with an interfaceIn this exercis.pdf
QUESTION 6.Exercise 12-2   Work with an interfaceIn this exercis.pdfarchanadesignfashion
 
JAVA,WITH__N^E^T&BE)ANS)()()(((&(&&^&^^&^$.pdf
JAVA,WITH__N^E^T&BE)ANS)()()(((&(&&^&^^&^$.pdfJAVA,WITH__N^E^T&BE)ANS)()()(((&(&&^&^^&^$.pdf
JAVA,WITH__N^E^T&BE)ANS)()()(((&(&&^&^^&^$.pdfarchanenterprises
 
Generic Programming seminar
Generic Programming seminarGeneric Programming seminar
Generic Programming seminarGautam Roy
 
Cambio de bases
Cambio de basesCambio de bases
Cambio de basesalcon2015
 
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEVISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEDarwin Durand
 
The Ring programming language version 1.7 book - Part 87 of 196
The Ring programming language version 1.7 book - Part 87 of 196The Ring programming language version 1.7 book - Part 87 of 196
The Ring programming language version 1.7 book - Part 87 of 196Mahmoud Samir Fayed
 
Write a function- reverseDigit- that takes an integer as a parameter a.docx
Write a function- reverseDigit- that takes an integer as a parameter a.docxWrite a function- reverseDigit- that takes an integer as a parameter a.docx
Write a function- reverseDigit- that takes an integer as a parameter a.docxlez31palka
 
Dart for Java Developers
Dart for Java DevelopersDart for Java Developers
Dart for Java DevelopersYakov Fain
 
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014First Tuesday Bergen
 
李建忠、侯捷设计模式讲义
李建忠、侯捷设计模式讲义李建忠、侯捷设计模式讲义
李建忠、侯捷设计模式讲义yiditushe
 
Function Procedure Trigger Partition.pdf
Function Procedure Trigger Partition.pdfFunction Procedure Trigger Partition.pdf
Function Procedure Trigger Partition.pdfSanam Maharjan
 
The Ring programming language version 1.8 book - Part 90 of 202
The Ring programming language version 1.8 book - Part 90 of 202The Ring programming language version 1.8 book - Part 90 of 202
The Ring programming language version 1.8 book - Part 90 of 202Mahmoud Samir Fayed
 
Presentacion clean code
Presentacion clean codePresentacion clean code
Presentacion clean codeIBM
 
--------------------------EmployeeRecord.h Below--------------------.pdf
--------------------------EmployeeRecord.h Below--------------------.pdf--------------------------EmployeeRecord.h Below--------------------.pdf
--------------------------EmployeeRecord.h Below--------------------.pdffathimafancyjeweller
 
The Ring programming language version 1.5.3 book - Part 91 of 184
The Ring programming language version 1.5.3 book - Part 91 of 184The Ring programming language version 1.5.3 book - Part 91 of 184
The Ring programming language version 1.5.3 book - Part 91 of 184Mahmoud Samir Fayed
 
I want a java program that can convert a number of base 10 into its .pdf
I want a java program that can convert a number of base 10 into its .pdfI want a java program that can convert a number of base 10 into its .pdf
I want a java program that can convert a number of base 10 into its .pdffashiongallery1
 

Similar to 重構—改善既有程式的設計(chapter 8)part 2 (20)

QUESTION 6.Exercise 12-2   Work with an interfaceIn this exercis.pdf
QUESTION 6.Exercise 12-2   Work with an interfaceIn this exercis.pdfQUESTION 6.Exercise 12-2   Work with an interfaceIn this exercis.pdf
QUESTION 6.Exercise 12-2   Work with an interfaceIn this exercis.pdf
 
JAVA,WITH__N^E^T&BE)ANS)()()(((&(&&^&^^&^$.pdf
JAVA,WITH__N^E^T&BE)ANS)()()(((&(&&^&^^&^$.pdfJAVA,WITH__N^E^T&BE)ANS)()()(((&(&&^&^^&^$.pdf
JAVA,WITH__N^E^T&BE)ANS)()()(((&(&&^&^^&^$.pdf
 
Ppt of c vs c#
Ppt of c vs c#Ppt of c vs c#
Ppt of c vs c#
 
Generic Programming seminar
Generic Programming seminarGeneric Programming seminar
Generic Programming seminar
 
Cambio de bases
Cambio de basesCambio de bases
Cambio de bases
 
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEVISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLE
 
The Ring programming language version 1.7 book - Part 87 of 196
The Ring programming language version 1.7 book - Part 87 of 196The Ring programming language version 1.7 book - Part 87 of 196
The Ring programming language version 1.7 book - Part 87 of 196
 
Functions
FunctionsFunctions
Functions
 
Write a function- reverseDigit- that takes an integer as a parameter a.docx
Write a function- reverseDigit- that takes an integer as a parameter a.docxWrite a function- reverseDigit- that takes an integer as a parameter a.docx
Write a function- reverseDigit- that takes an integer as a parameter a.docx
 
Dart for Java Developers
Dart for Java DevelopersDart for Java Developers
Dart for Java Developers
 
Dependency Injection for Android
Dependency Injection for AndroidDependency Injection for Android
Dependency Injection for Android
 
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014
 
李建忠、侯捷设计模式讲义
李建忠、侯捷设计模式讲义李建忠、侯捷设计模式讲义
李建忠、侯捷设计模式讲义
 
Function Procedure Trigger Partition.pdf
Function Procedure Trigger Partition.pdfFunction Procedure Trigger Partition.pdf
Function Procedure Trigger Partition.pdf
 
The Ring programming language version 1.8 book - Part 90 of 202
The Ring programming language version 1.8 book - Part 90 of 202The Ring programming language version 1.8 book - Part 90 of 202
The Ring programming language version 1.8 book - Part 90 of 202
 
Encapsulation
EncapsulationEncapsulation
Encapsulation
 
Presentacion clean code
Presentacion clean codePresentacion clean code
Presentacion clean code
 
--------------------------EmployeeRecord.h Below--------------------.pdf
--------------------------EmployeeRecord.h Below--------------------.pdf--------------------------EmployeeRecord.h Below--------------------.pdf
--------------------------EmployeeRecord.h Below--------------------.pdf
 
The Ring programming language version 1.5.3 book - Part 91 of 184
The Ring programming language version 1.5.3 book - Part 91 of 184The Ring programming language version 1.5.3 book - Part 91 of 184
The Ring programming language version 1.5.3 book - Part 91 of 184
 
I want a java program that can convert a number of base 10 into its .pdf
I want a java program that can convert a number of base 10 into its .pdfI want a java program that can convert a number of base 10 into its .pdf
I want a java program that can convert a number of base 10 into its .pdf
 

More from Chris Huang

Data compression, data security, and machine learning
Data compression, data security, and machine learningData compression, data security, and machine learning
Data compression, data security, and machine learningChris Huang
 
Kks sre book_ch10
Kks sre book_ch10Kks sre book_ch10
Kks sre book_ch10Chris Huang
 
Kks sre book_ch1,2
Kks sre book_ch1,2Kks sre book_ch1,2
Kks sre book_ch1,2Chris Huang
 
A Graph Service for Global Web Entities Traversal and Reputation Evaluation B...
A Graph Service for Global Web Entities Traversal and Reputation Evaluation B...A Graph Service for Global Web Entities Traversal and Reputation Evaluation B...
A Graph Service for Global Web Entities Traversal and Reputation Evaluation B...Chris Huang
 
Approaching real-time-hadoop
Approaching real-time-hadoopApproaching real-time-hadoop
Approaching real-time-hadoopChris Huang
 
20130310 solr tuorial
20130310 solr tuorial20130310 solr tuorial
20130310 solr tuorialChris Huang
 
Scaling big-data-mining-infra2
Scaling big-data-mining-infra2Scaling big-data-mining-infra2
Scaling big-data-mining-infra2Chris Huang
 
Applying Media Content Analysis to the Production of Musical Videos as Summar...
Applying Media Content Analysis to the Production of Musical Videos as Summar...Applying Media Content Analysis to the Production of Musical Videos as Summar...
Applying Media Content Analysis to the Production of Musical Videos as Summar...Chris Huang
 
Hbase status quo apache-con europe - nov 2012
Hbase status quo   apache-con europe - nov 2012Hbase status quo   apache-con europe - nov 2012
Hbase status quo apache-con europe - nov 2012Chris Huang
 
Hbase schema design and sizing apache-con europe - nov 2012
Hbase schema design and sizing   apache-con europe - nov 2012Hbase schema design and sizing   apache-con europe - nov 2012
Hbase schema design and sizing apache-con europe - nov 2012Chris Huang
 
重構—改善既有程式的設計(chapter 12,13)
重構—改善既有程式的設計(chapter 12,13)重構—改善既有程式的設計(chapter 12,13)
重構—改善既有程式的設計(chapter 12,13)Chris Huang
 
重構—改善既有程式的設計(chapter 10)
重構—改善既有程式的設計(chapter 10)重構—改善既有程式的設計(chapter 10)
重構—改善既有程式的設計(chapter 10)Chris Huang
 
重構—改善既有程式的設計(chapter 7)
重構—改善既有程式的設計(chapter 7)重構—改善既有程式的設計(chapter 7)
重構—改善既有程式的設計(chapter 7)Chris Huang
 
重構—改善既有程式的設計(chapter 6)
重構—改善既有程式的設計(chapter 6)重構—改善既有程式的設計(chapter 6)
重構—改善既有程式的設計(chapter 6)Chris Huang
 
重構—改善既有程式的設計(chapter 4,5)
重構—改善既有程式的設計(chapter 4,5)重構—改善既有程式的設計(chapter 4,5)
重構—改善既有程式的設計(chapter 4,5)Chris Huang
 
重構—改善既有程式的設計(chapter 2,3)
重構—改善既有程式的設計(chapter 2,3)重構—改善既有程式的設計(chapter 2,3)
重構—改善既有程式的設計(chapter 2,3)Chris Huang
 
Designs, Lessons and Advice from Building Large Distributed Systems
Designs, Lessons and Advice from Building Large Distributed SystemsDesigns, Lessons and Advice from Building Large Distributed Systems
Designs, Lessons and Advice from Building Large Distributed SystemsChris Huang
 
Hw5 my house in yong he
Hw5 my house in yong heHw5 my house in yong he
Hw5 my house in yong heChris Huang
 
Social English Class HW4
Social English Class HW4Social English Class HW4
Social English Class HW4Chris Huang
 

More from Chris Huang (20)

Data compression, data security, and machine learning
Data compression, data security, and machine learningData compression, data security, and machine learning
Data compression, data security, and machine learning
 
Kks sre book_ch10
Kks sre book_ch10Kks sre book_ch10
Kks sre book_ch10
 
Kks sre book_ch1,2
Kks sre book_ch1,2Kks sre book_ch1,2
Kks sre book_ch1,2
 
A Graph Service for Global Web Entities Traversal and Reputation Evaluation B...
A Graph Service for Global Web Entities Traversal and Reputation Evaluation B...A Graph Service for Global Web Entities Traversal and Reputation Evaluation B...
A Graph Service for Global Web Entities Traversal and Reputation Evaluation B...
 
Approaching real-time-hadoop
Approaching real-time-hadoopApproaching real-time-hadoop
Approaching real-time-hadoop
 
20130310 solr tuorial
20130310 solr tuorial20130310 solr tuorial
20130310 solr tuorial
 
Scaling big-data-mining-infra2
Scaling big-data-mining-infra2Scaling big-data-mining-infra2
Scaling big-data-mining-infra2
 
Applying Media Content Analysis to the Production of Musical Videos as Summar...
Applying Media Content Analysis to the Production of Musical Videos as Summar...Applying Media Content Analysis to the Production of Musical Videos as Summar...
Applying Media Content Analysis to the Production of Musical Videos as Summar...
 
Wissbi osdc pdf
Wissbi osdc pdfWissbi osdc pdf
Wissbi osdc pdf
 
Hbase status quo apache-con europe - nov 2012
Hbase status quo   apache-con europe - nov 2012Hbase status quo   apache-con europe - nov 2012
Hbase status quo apache-con europe - nov 2012
 
Hbase schema design and sizing apache-con europe - nov 2012
Hbase schema design and sizing   apache-con europe - nov 2012Hbase schema design and sizing   apache-con europe - nov 2012
Hbase schema design and sizing apache-con europe - nov 2012
 
重構—改善既有程式的設計(chapter 12,13)
重構—改善既有程式的設計(chapter 12,13)重構—改善既有程式的設計(chapter 12,13)
重構—改善既有程式的設計(chapter 12,13)
 
重構—改善既有程式的設計(chapter 10)
重構—改善既有程式的設計(chapter 10)重構—改善既有程式的設計(chapter 10)
重構—改善既有程式的設計(chapter 10)
 
重構—改善既有程式的設計(chapter 7)
重構—改善既有程式的設計(chapter 7)重構—改善既有程式的設計(chapter 7)
重構—改善既有程式的設計(chapter 7)
 
重構—改善既有程式的設計(chapter 6)
重構—改善既有程式的設計(chapter 6)重構—改善既有程式的設計(chapter 6)
重構—改善既有程式的設計(chapter 6)
 
重構—改善既有程式的設計(chapter 4,5)
重構—改善既有程式的設計(chapter 4,5)重構—改善既有程式的設計(chapter 4,5)
重構—改善既有程式的設計(chapter 4,5)
 
重構—改善既有程式的設計(chapter 2,3)
重構—改善既有程式的設計(chapter 2,3)重構—改善既有程式的設計(chapter 2,3)
重構—改善既有程式的設計(chapter 2,3)
 
Designs, Lessons and Advice from Building Large Distributed Systems
Designs, Lessons and Advice from Building Large Distributed SystemsDesigns, Lessons and Advice from Building Large Distributed Systems
Designs, Lessons and Advice from Building Large Distributed Systems
 
Hw5 my house in yong he
Hw5 my house in yong heHw5 my house in yong he
Hw5 my house in yong he
 
Social English Class HW4
Social English Class HW4Social English Class HW4
Social English Class HW4
 

Recently uploaded

Awards Presentation 2024 - March 12 2024
Awards Presentation 2024 - March 12 2024Awards Presentation 2024 - March 12 2024
Awards Presentation 2024 - March 12 2024bsellato
 
3.12.24 The Social Construction of Gender.pptx
3.12.24 The Social Construction of Gender.pptx3.12.24 The Social Construction of Gender.pptx
3.12.24 The Social Construction of Gender.pptxmary850239
 
3.14.24 The Selma March and the Voting Rights Act.pptx
3.14.24 The Selma March and the Voting Rights Act.pptx3.14.24 The Selma March and the Voting Rights Act.pptx
3.14.24 The Selma March and the Voting Rights Act.pptxmary850239
 
EDD8524 The Future of Educational Leader
EDD8524 The Future of Educational LeaderEDD8524 The Future of Educational Leader
EDD8524 The Future of Educational LeaderDr. Bruce A. Johnson
 
PHARMACOGNOSY CHAPTER NO 5 CARMINATIVES AND G.pdf
PHARMACOGNOSY CHAPTER NO 5 CARMINATIVES AND G.pdfPHARMACOGNOSY CHAPTER NO 5 CARMINATIVES AND G.pdf
PHARMACOGNOSY CHAPTER NO 5 CARMINATIVES AND G.pdfSumit Tiwari
 
3.14.24 Gender Discrimination and Gender Inequity.pptx
3.14.24 Gender Discrimination and Gender Inequity.pptx3.14.24 Gender Discrimination and Gender Inequity.pptx
3.14.24 Gender Discrimination and Gender Inequity.pptxmary850239
 
DNA and RNA , Structure, Functions, Types, difference, Similarities, Protein ...
DNA and RNA , Structure, Functions, Types, difference, Similarities, Protein ...DNA and RNA , Structure, Functions, Types, difference, Similarities, Protein ...
DNA and RNA , Structure, Functions, Types, difference, Similarities, Protein ...AKSHAYMAGAR17
 
Riti theory by Vamana Indian poetics.pptx
Riti theory by Vamana Indian poetics.pptxRiti theory by Vamana Indian poetics.pptx
Riti theory by Vamana Indian poetics.pptxDhatriParmar
 
The OERs: Transforming Education for Sustainable Future by Dr. Sarita Anand
The OERs: Transforming Education for Sustainable Future by Dr. Sarita AnandThe OERs: Transforming Education for Sustainable Future by Dr. Sarita Anand
The OERs: Transforming Education for Sustainable Future by Dr. Sarita AnandDr. Sarita Anand
 
LEAD5623 The Economics of Community Coll
LEAD5623 The Economics of Community CollLEAD5623 The Economics of Community Coll
LEAD5623 The Economics of Community CollDr. Bruce A. Johnson
 
Alamkara theory by Bhamaha Indian Poetics (1).pptx
Alamkara theory by Bhamaha Indian Poetics (1).pptxAlamkara theory by Bhamaha Indian Poetics (1).pptx
Alamkara theory by Bhamaha Indian Poetics (1).pptxDhatriParmar
 
AUDIENCE THEORY - PARTICIPATORY - JENKINS.pptx
AUDIENCE THEORY - PARTICIPATORY - JENKINS.pptxAUDIENCE THEORY - PARTICIPATORY - JENKINS.pptx
AUDIENCE THEORY - PARTICIPATORY - JENKINS.pptxiammrhaywood
 
The basics of sentences session 8pptx.pptx
The basics of sentences session 8pptx.pptxThe basics of sentences session 8pptx.pptx
The basics of sentences session 8pptx.pptxheathfieldcps1
 
Dhavni Theory by Anandvardhana Indian Poetics
Dhavni Theory by Anandvardhana Indian PoeticsDhavni Theory by Anandvardhana Indian Poetics
Dhavni Theory by Anandvardhana Indian PoeticsDhatriParmar
 
ICS2208 Lecture4 Intelligent Interface Agents.pdf
ICS2208 Lecture4 Intelligent Interface Agents.pdfICS2208 Lecture4 Intelligent Interface Agents.pdf
ICS2208 Lecture4 Intelligent Interface Agents.pdfVanessa Camilleri
 
30-de-thi-vao-lop-10-mon-tieng-anh-co-dap-an.doc
30-de-thi-vao-lop-10-mon-tieng-anh-co-dap-an.doc30-de-thi-vao-lop-10-mon-tieng-anh-co-dap-an.doc
30-de-thi-vao-lop-10-mon-tieng-anh-co-dap-an.docdieu18
 
25 CHUYÊN ĐỀ ÔN THI TỐT NGHIỆP THPT 2023 – BÀI TẬP PHÁT TRIỂN TỪ ĐỀ MINH HỌA...
25 CHUYÊN ĐỀ ÔN THI TỐT NGHIỆP THPT 2023 – BÀI TẬP PHÁT TRIỂN TỪ ĐỀ MINH HỌA...25 CHUYÊN ĐỀ ÔN THI TỐT NGHIỆP THPT 2023 – BÀI TẬP PHÁT TRIỂN TỪ ĐỀ MINH HỌA...
25 CHUYÊN ĐỀ ÔN THI TỐT NGHIỆP THPT 2023 – BÀI TẬP PHÁT TRIỂN TỪ ĐỀ MINH HỌA...Nguyen Thanh Tu Collection
 
LEAD6001 - Introduction to Advanced Stud
LEAD6001 - Introduction to Advanced StudLEAD6001 - Introduction to Advanced Stud
LEAD6001 - Introduction to Advanced StudDr. Bruce A. Johnson
 
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (GLOB...
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (GLOB...BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (GLOB...
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (GLOB...Nguyen Thanh Tu Collection
 
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (FRIE...
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (FRIE...BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (FRIE...
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (FRIE...Nguyen Thanh Tu Collection
 

Recently uploaded (20)

Awards Presentation 2024 - March 12 2024
Awards Presentation 2024 - March 12 2024Awards Presentation 2024 - March 12 2024
Awards Presentation 2024 - March 12 2024
 
3.12.24 The Social Construction of Gender.pptx
3.12.24 The Social Construction of Gender.pptx3.12.24 The Social Construction of Gender.pptx
3.12.24 The Social Construction of Gender.pptx
 
3.14.24 The Selma March and the Voting Rights Act.pptx
3.14.24 The Selma March and the Voting Rights Act.pptx3.14.24 The Selma March and the Voting Rights Act.pptx
3.14.24 The Selma March and the Voting Rights Act.pptx
 
EDD8524 The Future of Educational Leader
EDD8524 The Future of Educational LeaderEDD8524 The Future of Educational Leader
EDD8524 The Future of Educational Leader
 
PHARMACOGNOSY CHAPTER NO 5 CARMINATIVES AND G.pdf
PHARMACOGNOSY CHAPTER NO 5 CARMINATIVES AND G.pdfPHARMACOGNOSY CHAPTER NO 5 CARMINATIVES AND G.pdf
PHARMACOGNOSY CHAPTER NO 5 CARMINATIVES AND G.pdf
 
3.14.24 Gender Discrimination and Gender Inequity.pptx
3.14.24 Gender Discrimination and Gender Inequity.pptx3.14.24 Gender Discrimination and Gender Inequity.pptx
3.14.24 Gender Discrimination and Gender Inequity.pptx
 
DNA and RNA , Structure, Functions, Types, difference, Similarities, Protein ...
DNA and RNA , Structure, Functions, Types, difference, Similarities, Protein ...DNA and RNA , Structure, Functions, Types, difference, Similarities, Protein ...
DNA and RNA , Structure, Functions, Types, difference, Similarities, Protein ...
 
Riti theory by Vamana Indian poetics.pptx
Riti theory by Vamana Indian poetics.pptxRiti theory by Vamana Indian poetics.pptx
Riti theory by Vamana Indian poetics.pptx
 
The OERs: Transforming Education for Sustainable Future by Dr. Sarita Anand
The OERs: Transforming Education for Sustainable Future by Dr. Sarita AnandThe OERs: Transforming Education for Sustainable Future by Dr. Sarita Anand
The OERs: Transforming Education for Sustainable Future by Dr. Sarita Anand
 
LEAD5623 The Economics of Community Coll
LEAD5623 The Economics of Community CollLEAD5623 The Economics of Community Coll
LEAD5623 The Economics of Community Coll
 
Alamkara theory by Bhamaha Indian Poetics (1).pptx
Alamkara theory by Bhamaha Indian Poetics (1).pptxAlamkara theory by Bhamaha Indian Poetics (1).pptx
Alamkara theory by Bhamaha Indian Poetics (1).pptx
 
AUDIENCE THEORY - PARTICIPATORY - JENKINS.pptx
AUDIENCE THEORY - PARTICIPATORY - JENKINS.pptxAUDIENCE THEORY - PARTICIPATORY - JENKINS.pptx
AUDIENCE THEORY - PARTICIPATORY - JENKINS.pptx
 
The basics of sentences session 8pptx.pptx
The basics of sentences session 8pptx.pptxThe basics of sentences session 8pptx.pptx
The basics of sentences session 8pptx.pptx
 
Dhavni Theory by Anandvardhana Indian Poetics
Dhavni Theory by Anandvardhana Indian PoeticsDhavni Theory by Anandvardhana Indian Poetics
Dhavni Theory by Anandvardhana Indian Poetics
 
ICS2208 Lecture4 Intelligent Interface Agents.pdf
ICS2208 Lecture4 Intelligent Interface Agents.pdfICS2208 Lecture4 Intelligent Interface Agents.pdf
ICS2208 Lecture4 Intelligent Interface Agents.pdf
 
30-de-thi-vao-lop-10-mon-tieng-anh-co-dap-an.doc
30-de-thi-vao-lop-10-mon-tieng-anh-co-dap-an.doc30-de-thi-vao-lop-10-mon-tieng-anh-co-dap-an.doc
30-de-thi-vao-lop-10-mon-tieng-anh-co-dap-an.doc
 
25 CHUYÊN ĐỀ ÔN THI TỐT NGHIỆP THPT 2023 – BÀI TẬP PHÁT TRIỂN TỪ ĐỀ MINH HỌA...
25 CHUYÊN ĐỀ ÔN THI TỐT NGHIỆP THPT 2023 – BÀI TẬP PHÁT TRIỂN TỪ ĐỀ MINH HỌA...25 CHUYÊN ĐỀ ÔN THI TỐT NGHIỆP THPT 2023 – BÀI TẬP PHÁT TRIỂN TỪ ĐỀ MINH HỌA...
25 CHUYÊN ĐỀ ÔN THI TỐT NGHIỆP THPT 2023 – BÀI TẬP PHÁT TRIỂN TỪ ĐỀ MINH HỌA...
 
LEAD6001 - Introduction to Advanced Stud
LEAD6001 - Introduction to Advanced StudLEAD6001 - Introduction to Advanced Stud
LEAD6001 - Introduction to Advanced Stud
 
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (GLOB...
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (GLOB...BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (GLOB...
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (GLOB...
 
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (FRIE...
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (FRIE...BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (FRIE...
BÀI TẬP BỔ TRỢ TIẾNG ANH 11 THEO ĐƠN VỊ BÀI HỌC - CẢ NĂM - CÓ FILE NGHE (FRIE...
 

重構—改善既有程式的設計(chapter 8)part 2

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.