面向对象设计入门

Object Oriented Design
应届毕业生
Useable 实用性
Design Elevator

System Design:
有经验的面试者
需要处理大量数据,提供service的部门
Scalability
Design Twitter

OOA 面向对象分析

OOD面向对象设计

OOP面向对象编程

出题问法:
Can you design an elevator system?
Little Amount of coding
Can you design scheduler for elevator system?
Need Implementation

起手式陷阱
Desgin A Parking Lot
忌:自说自话,混淆算法结构
宜:先通过与面试官交流获得有效信息

进行中陷阱
忌:思路混乱,反复修改
宜:先给面试官呈现一个Usable的成果

收尾式陷阱
忌:虎头蛇尾,
宜:检查你的设计,是否支持所需功能

如何评判一轮OOD面试

Communication 充分了解需求

Thinking Process 不要思维跳跃

Correctness 实现功能,场景

Reasonable:Elegant,Maintainable, Extendable, 封装,继承,多态,SOLID

(Bonus) Good practice

(Bonus) Design Pattern

SOLID:

1.Single Responsibility Principle 单一责任原则
一个雷应该有且只有一个改变它的理由, 即一个类只有一个工作。

public class AreaCalculator{
  private float result;
  public float calculateArea(Shape s){
  //calculate Area
  }

  //Not Recommend: name too long  and only apply to specific bit
 //Need change when apply to two bit
  public String printAreaAccurateToOneDecimalPlace(){
  
  }

}

2.Open Close principle 开闭原则
对象或实体应对扩展开放,对修改封闭(Open to Extension, Close to Modification)

public class AreaCalculator{
  //扩展性很差,
  public float calculateArea(Triangle t){
    
  }
  
  public float calculateArea(Rectangle r){
    
  }
}

3.Liskov Principle 里氏替换原则
任何一个自雷或者派生类可以替换它们的父类或者基类

//这里矩形就无法替换 Shape,因为无法计算容量。
public class Shape{
  abstract public float calculateVolumn();
  abstract public float calculateArea();
}

public class Rectangle extends Shape{
}

public class Cube extends Shape{

}

4.Interface Segregation Principle 接口分离原则
不应该强迫一个类实现它用不上的接口。

public class Shape{
  abstract public float calculateVolumn();
  abstract public float calculateArea();
}

public class Rectangle extends Shape{
}

public class Cube extends Shape{

}

5.Dependency inversion principle 依赖反转原则
抽象不应该依赖于具体实现, 具体实现应该依赖于抽象。

public class AreaCalculator{
  public float calculateArea(ShapeInterface s){
  }
}

interface ShapeInterface{
  public float area();
}

public class Rectangle implements ShapeInterface{
  private float length;
  private float width;
  public float area(){
    return length * width;
  }
}

public class Triangle implements ShapeInterface{
  private float height;
  private float width;
  public float area(){
    return (height*width)/2;
  }
}



5C解题法
Clarify: 通过和面试官交流,去除题目中歧义,确定答题范围。
Core objects: 确定题目所涉及的类,以及类之间的映射关系。
Cases: 确定题目中所需要实现的场景和功能。
Classes: 通过类图的方式,具体填充题目中设计的类。
Correctness:检查自己的设计,是否满足关键点。

你可能感兴趣的:(面向对象设计入门)