我很快就要进行编码面试,这应该测试我的面向对象编程概念。我非常详细地了解OO编程,我唯一的问题是他们在采访中询问我如何在白板上制作OO模型并给我一个Rubix立方体或吉他作为其他人为访谈建模的例子。
我担心的是像人类一样过于简单化,而不是传达我所知道的所有概念。但我也不想选择像Rubix多维数据集那样抽象的东西,我的采访者可能会讨厌这个想法并质疑它的实用性或可扩展性。我也不想给他以前见过的东西。
我的第一个想法是用捕鱼做一些事情,因为它是一个真实世界的例子,我喜欢它,但我想知道这是一个太简单的概念。像这样一个简单的例子:
abstract class Fisherman {
abstract protected function fish();
}
class Angler extends Fisherman {
protected function fish() {
$this->cast();
}
private function cast() {
echo "Casting Rod";
}
}
class CrabFisherman extends Fisherman {
protected function fish() {
$this->place();
}
private function place() {
echo "Placing Crab Pot";
}
}
所以我的问题是,为了最好地展示对面向对象概念的理解,我应该以面向对象的方式为编码面试建模?做一个简单的人类课程,比如渔夫,还是我应该推开信封?第一次真正的工程面试,所以我不太清楚要把什么带到桌面上。
答案 0 :(得分:2)
你的例子不是很好,因为它只是直接继承。他们给出的例子是具有通过组合连接的多个对象的系统。吉他有一个琴体,琴弦和调音钉。机身包含琴弦和调音钉。调音栓可以设置为改变弦乐播放的音符。另外,你可以给身体提供不同种类的琴弦。电吉他增加了拾音器,音量控制等。摩擦立方体同样具有核心,侧面和立方体。
如果你喜欢钓鱼,也许更好的方法是用渔具模拟渔夫和钓鱼竿。杆,卷轴,线,重量,浮子,钩子和诱饵都可以改变,基本的钓鱼行为没有变化。可以将装备好的渔民部署到不同的捕鱼地点,成功取决于配置。