Question

Je suis un grand fan des principes de conception de logiciels tels que SOLID et DRY . Quels sont les autres principes existent pour la conception de logiciels OO?

Note. Je ne cherche pas des réponses comme « comment votre code », mais plutôt de chercher les principes de conception OO comme ceux discutés par Uncle Bob .

Était-ce utile?

La solution

Une liste assez complète de Wikipedia:

http://en.wikipedia.org/wiki/List_of_software_development_philosophies

  • développement logiciel Agile
  • Unified Process agile (AUP)
  • Comportement Driven Development (BDD)
  • Design Big Up Front (BDUF)
  • loi de Brooks
  • Cathédrale et le Bazar
  • Code et fixer
  • Méthodologie de conception constructiviste (MDP)
  • codage Cowboy
  • Crystal Clear
  • développement fondées sur le design (D3)
  • Ne vous répétez pas (SEC) ou une fois et une seule fois (OAOO), Single Point of Truth (SPoT)
  • Systèmes dynamiques de développement Méthode (DSDM)
  • Extreme Programming (XP)
  • Feature Driven Development
  • Hollywood Principe
  • le développement itératif et incrémental
  • conception de l'application conjointe, alias JAD "Joint Application Development"
  • Kaizen
  • Kanban
  • principe KISS (Keep It Simple, Stupid)
  • développement logiciel Lean
  • Microsoft Solutions Framework (MSF)
  • l'architecture dirigée par les modèles (MDA)
  • open source
  • Processus Unifié Ouvrir
  • rapide et sale
  • Rational Unified Process (RUP)
  • Scrum
  • Smart (développement agile)
  • La séparation des préoccupations (SoC)
  • Modélisation orientée services
  • Logiciel Artisanat
  • Sécurité du système logiciel
  • modèle Spiral
  • Développement piloté par les tests (TDD)
  • Unified Process (UP)
  • V-modèle
  • modèle cascade
  • modèle de roue et rayons
  • Le pire est meilleur (style New Jersey, par opposition à l'approche MIT)
  • Xtreme
  • yagni (YAGNI)
  • Zero One Infinity

Autres conseils

haute cohésion - Comment sont concentrés les responsabilités des modules que vous concevez .

faible couplage -. Le degré auquel les modules se fondent sur d'autres modules

Chose composition sur l'héritage, est une.

Beaucoup de gens, en particulier ceux qui sont nouveaux à OO commenceront extension des classes quand tout ce qu'ils ont vraiment besoin de est d'utiliser la composition. Vraiment si vous devriez demander à votre auto, est la nouvelle classe B classe A? Sinon, vous ne devriez pas prolonger.

Par exemple, disons que j'ai une classe Person, une classe Car, et je voudrais faire une nouvelle classe appelée une classe DrivenCar. Une mise en œuvre naïve serait de dire (supposons que nous avons obtenu l'héritage multiple)

class DrivenCar extends Person, Car  { ... }

Le DrivenCar un type de personne? Non il ne devrait pas être étendre personne. Le DrivenCar une voiture? oui, il est donc logique d'étendre

composition en utilisant l'implmentation ressemblerait

class DrivenCar extends Car {
    private Person driver;
}

Le GRASP modèles. Oui, ils semblent plutôt trivial. Plus distillation jusqu'à des qualités essentielles que d'autres modèles plus impliqués font preuve.

Interface. La plupart des modèles de conception sont basés sur la séparation de l'interface et la mise en œuvre.

Lorsque votre API devraient croître, utiliser la classe abstraite au lieu de l'interface. Ajout d'une nouvelle méthode d'interface afin de changer toutes les classes qui la mettent en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top