Это может быть простой/основной вопрос ООП, но я до сих пор не могу понять, как его решить. Во время интервью у меня была следующая проблема: сделайте диаграмму классов UML и напишите базовый код для "умного" телефона, который содержит функциональные возможности телефона и mp3-плеера. У нас есть следующее (принятое) решение:
class Telephone
{
public string name { get; set; }
public Telephone()
{
name = "name telephone";
}
}
class MP3
{
public string name { get; set; }
public MP3()
{
name = "name mp3";
}
}
И "умный" класс телефона:
class TelephoneMP3
{
public Telephone tel;
public MP3 mp3;
public TelephoneMP3()
{
tel = new Telephone();
mp3 = new MP3();
}
}
Как вы можете видеть, у нас есть соотношение композиций между телефонами и телефонами /MP 3.
Но, используя этот код, TelephoneMP3 не является телефоном, а PhoneMP3 не является MP3, что не является логичным. Итак, какие изменения я должен внести, чтобы сделать это действительным? Например, такой тип теста:
if (telMp3 is Telephone)
{
Console.WriteLine("TelephoneMP3 is telephone");
}
if (telMp3 is MP3)
{
Console.WriteLine("TelephoneMP3 is mp3");
}
Модификации могут быть сделаны с использованием следующих замечаний:
- Телефон/MP3/ТелефонMP3 должны оставаться классами (все 3 из них)
- При необходимости я мог бы добавить интерфейсы/другие классы
- ТелефонMP3 не должен дублировать все функции из телефона /MP 3 (например, во время наследования от интерфейса, где TelephoneMP3 будет обязан писать код со всех членов интерфейса).
Заранее благодарю