Как мне реализовать несколько видов объектов в ООП? - PullRequest
0 голосов
/ 29 апреля 2010

У меня есть несколько видов объектов, например, Car.

Есть ли каждый вид в унаследованном классе / подклассе Car?

Размещать ли их в пространстве имен cartype, чтобы не мешать основному пространству имен?

Потом, когда мне понадобится множество машин, я должен объявить его как var currentCars():Car или var currentCars():Object? Будет ли прежний поддерживать какой-либо подкласс Car?

Ответы [ 2 ]

5 голосов
/ 29 апреля 2010

Определенные ответы затруднены, потому что они действительно зависят от особенностей вашей проблемной области, но в целом вы бы использовали подклассы Car, если бы все виды Car разделяли некоторые функции. E.g.:

public class Car {
    public void Start() { }
}

И тогда вы можете иметь различные типы Car:

public class Sedan : Car {
    public void OpenAllFourDoors() { }
}

public class Coupe : Car {
    public void OpenAllTwoDoors() { }
}

Как правило, вам не нужно помещать иерархию классов в свое собственное пространство имен, есть и другие наборы рекомендаций для определений пространства имен. Как правило, ожидают, что пространства имен будут иметь вид чего-то вроде CompanyName.ProductName.ModuleName или чего-то подобного.

Позже, когда вам понадобится массив (или, чаще, коллекция) автомобилей, вы создадите коллекцию Car. Однако, когда вы получите ссылку из этой коллекции, вы не сможете OpenAllFourDoors или OpenAllTwoDoors, потому что не будете знать, с каким подклассом Car вы работаете.

(Извинения за C # -центрический синтаксис)

1 голос
/ 29 апреля 2010

Вы можете иметь неограниченное количество классов, наследуемых от вашего класса Car, если у вас нет переопределенных методов, которые конфликтуют.

Что касается пространств имен, я обычно помещаю классы, наследуемые от другого, в одно и то же пространство имен, хотя не уверен, что их отсутствие в том же пространстве имен работает.

Да, и когда вам нужен массив, вы объявляете его, как и любой другой тип данных.

Видите ли, когда вы объявляете класс Car, вы создаете тип данных Car.

Итак, когда вам нужно объявить массив автомобилей, вы идете так:

var currentCars():Car
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...