2010-04-29 4 views
0

J'ai plusieurs types d'objets, disons Car par exemple. Est-ce que j'ai chaque type dans une classe/sous-classe héritée de Car? Est-ce que je les place sous un espace de noms cartype afin de ne pas gâcher l'espace de noms principal?Comment implémenter plusieurs types d'objets dans OOP?

Puis plus tard quand j'ai besoin d'un tableau de voitures, devrais-je le déclarer comme var currentCars():Car ou var currentCars():Object? Le premier supporterait-il une sous-classe de Car?

Répondre

5

réponses spécifiques sont difficiles car ils dépendent vraiment des détails de votre espace de problème, mais en général vous pouvez utiliser les sous-classes de Car si toutes sortes de Car partagé certaines fonctionnalités. Par exemple:

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

Et alors vous pourriez avoir différents types de Car:

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

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

Vous ne devez généralement pas mettre la hiérarchie des classes dans son propre espace de noms, il y a d'autres ensembles d'orientation pour l'espace de noms définitions En règle générale, attendez que les espaces de noms prennent la forme de quelque chose comme CompanyName.ProductName.ModuleName ou quelque chose de similaire. Par la suite, lorsque vous avez besoin d'un tableau (ou, plus communément, d'une collection) de voitures, vous devez créer une collection de Car. Lorsque vous récupérez une référence de cette collection, vous ne pouvez pas OpenAllFourDoors ou OpenAllTwoDoors car vous ne saurez pas quelle sous-classe de Car vous travaillez.

(Toutes mes excuses pour C# syntaxe -centric)

+0

Je ne peux pas garder une propriété « genre » au sein de chaque sous-classe (avec une valeur par défaut par la sous-classe) de savoir quelle sous-classe il est? .. et quelle est la différence entre une collection et un tableau? –

+1

@Jeremy Rudd: Vous pouvez, mais c'est généralement une mauvaise forme. Tirez parti de l'envoi virtuel pour éliminer la propriété "kind", sinon vous rejetez l'une des principales motivations de la hiérarchie des classes. Par exemple, mettez 'OpenAllDoors()' sur la classe de base 'Car', puis laissez chaque implémentation déterminer comment ouvrir toutes les portes. –

+1

Dans la plupart des langages OO que j'ai utilisés, un tableau est une construction de langage utilisée pour contenir une série d'objets. Une collection (dont il existe plusieurs sortes) est une structure de données plus formelle avec des caractéristiques de performance et des interfaces bien comprises. Par exemple, une liste liée est un type de collection. –

1

Vous pouvez avoir un nombre inifinit de classes héritant de votre classe Car tant que vous n'avez pas de méthodes surchargées qui sont en conflit. En ce qui concerne les espaces de noms, je place généralement les classes qui en héritent d'un autre dans le même espace de noms, mais je ne suis pas sûr de ne pas être dans le même espace de noms.

Oh, et quand vous avez besoin d'un tableau, vous le déclarez comme n'importe quel autre type de données.

Vous voyez, lorsque vous déclarez une classe Car, vous créez un type de données Car.

Ainsi, lorsque vous devez déclarer un tableau de voitures, vous allez comme ça:

var currentCars():Car 
Questions connexes