Pour l'étude des interfaces PHP, lire sur phP interface slearn, a récemment rencontré des difficultés dans l'apprentissage phP 5 interface, le livre dit être un moyen d'atteindre l'héritage multiple, mais je ne sais toujours pas comment mettre en œuvre. Sur Internet pour vérifier l'interface PHP de l'information est très peu, sur la recherche java, en fait, sont essentiellement similaires. Lisez l'article "Clarifying Java (Interfaces and Successions)" " http://www.prnewswire.com/profs-in.prnewswire.com/profs-in.prnewswire.com/prnewswire.com/profs-in.prnewswire.com/prof-smh.com/prof.com/"prnewswire.com/prnewswire.com/prnewswire.
Récemment rencontré des difficultés dans l'apprentissage de l'interface PHP 5, le livre dit que c'est un moyen d'atteindre l'héritage multiple, mais je ne sais toujours pas comment l'implémenter. Sur Internet pour vérifier l'interface PHP de l'information est très peu, sur la recherche java, en fait, sont essentiellement similaires. Après avoir lu "Clarifier Java (Interface et Héritage)" cet article est venu à la lumière, c'était la première fois que j'ai compris l'erreur, ce que l'on appelle multi-héritage se réfère à la classe d'héritage de l'interface, pas l'interface héritage de classe.
L'article mentionne l'abstraction de OO, comme dans l'article - "l'abstrait est de dessiner la partie like", très image, la pensée précédente de l'abstraction pense toujours qu'il est difficile à comprendre, abstrait, haha, maintenant facile à comprendre, c'est l'interface et la classe abstraite à faire.
Je bénéficie également d'un certain nombre de points dans l'article, qui sont énumérés ci-dessous:
L'essence de l'OO, je pense, est l'abstraction des objets.
Le rôle d'une interface, en un mot, est la catégorie de la classe de drapeau (classe). Il est préférable de gérer différents types de classes en différentes interfaces.
L'héritage signifie aussi l'abstraction, et non la réutilisation du code.
Après avoir lu cet article, vous comprenez maintenant essentiellement comment les interfaces, les classes abstraites, l'héritage doivent être appliqués.
Le texte original se lit comme suit :
Clarification Java (Interface et Héritage) Computer Academy Research II frère et je discute De Java, une réunion, quelques questions sont tous sur l'interface, l'interface à quoi utiliser? Pourquoi utiliser des interfaces ? Quand dois-je utiliser l'interface ? Heureusement, ils ne m'ont pas demandé comment Java se connecte à SQL Server, ou comment j'ai développé des applications J2EE, et ce genre de problèmes sont mortels, et les éviter. De premier cycle en informatique de cette année a un sujet de conception diplômé est de faire J2ME, les étudiants qui choisissent ce sujet à la fin de mai ont encore du mal à étudier java.util. . . ce paquet, ce ... hélas.
La plupart des gens pensent que le sens d'une interface est de remplacer l'héritage multiple. Il est bien connu que Java n'a pas le mécanisme de l'héritage multiple comme c, mais il peut effectivement agir comme des interfaces multiples. En fait, c'est très tiré par les cheveux, l'interface et l'héritage est des choses complètement différentes, l'interface n'a pas la capacité de remplacer l'héritage multiple, il n'y a aucune obligation. Le rôle d'une interface, en un mot, est la catégorie de la classe de drapeau (classe). Il est préférable de gérer différents types de classes en différentes interfaces. L'essence de OO, je pense, est l'abstraction des objets, la plus incarnation de ce qui est l'interface. Pourquoi nous discutons des modèles de conception seulement pour les langues avec des capacités abstraites (telles que c, java, c, etc) est parce que les modèles de conception sont étudiés, en fait, est de savoir comment raisonnable à l'abstrait. (Le célèbre dicton de Cowboy est « abstrait, c'est dessiner la partie de l'image », apparemment coquette, pratique et même raisonnable).
Le modèle de conception le plus basique est le modèle d'usine, et dans l'une de mes applications récentes très simples, je voulais faire mon programme que possible pour être en mesure de port à travers plusieurs bases de données, qui bien sûr impliqué beaucoup de problèmes, et comment être compatible avec SQL de différents DBMS est un casse-tête. Commençons par une question simple et réfléchissons à la façon de connecter différentes bases de données.
Disons que j'ai beaucoup de classes, à savoir Mysql.java, SQL Server.java, Oracle.java, DB2.java, ils se connectent à différentes bases de données, renvoient un objet de connexion uniformément, et tous ont une méthode proche pour fermer la connexion. Juste pour votre DBMS, choisissez une classe différente, vous pouvez utiliser, mais mon utilisateur, il va utiliser quelle base de données? Je ne sais pas, j'espère modifier le code le moins possible, pour répondre à ses besoins. Je peux résuméles les interfaces suivantes:
forfait org.bromon.test;
interface publique DB
{
java.sql.connection openDB (String url, utilisateur, mot de passe String);
fermeture nulle ();
}
Cette interface définit seulement deux méthodes, sans aucun code significatif, le code spécifique est donné par la classe qui fait réellement cette interface, comme Mysql.java:
Forfait org.bromon.test;
import java.sql.?
classe publique Mysql met en œuvre DB
{
url à cordes privée "jdbc:mysql:localhost:3306/test";
utilisateur de chaîne privé "racine";
mot de passe à cordes privé "";";
connexion privée conn;
Connexion publique openDB (url, utilisateur, mot de passe)
{
Le code qui relie la base de données
}
vide public fermé()
{
Fermer la base de données
}
}
De même, bien sûr, il ya Oracle.java et ainsi de suite, l'interface DB donne à ces classes une classe, dans l'application, nous définissons l'objet comme suit:
org.bromon.test.DB myDB;
En utilisant myDB pour manipuler la base de données, vous pouvez utiliser la base de données quelle que soit la classe que j'utilise réellement, ce qui est appelé le principe "open-close". Mais le problème est que l'interface n'est pas instantanée, myDB, nouveau DB(), ce genre de code est absolument faux, nous ne pouvons mysql mydB s nouvelle () ou myDB nouveau Oracle (). Problème, j'ai encore besoin de spécifier quelle classe est l'instantiation spécifique, en utilisant l'interface est la même que inutile. Nous avons donc besoin d'une usine :
forfait org.bromon.test;
classe publique DBFactory
{
public statique DB Connection getConn ()
{
Retour (nouveau Mysql));
}
}
Ainsi, le code instantané devient: myDB-DBFactory.getConn();
C'est le plus basique des 23 modèles de l'usine ordinaire, la classe d'usine est responsable de l'instantanéisation spécifique de quelle classe, et l'autre logique de programme est pour l'interface DB, qui est "programmation pour l'interface." La responsabilité est transmise à la classe d'usine, et bien sûr vous pouvez continuer à définir l'interface de l'usine et continuer à jeter la responsabilité, qui se transforme en une usine abstraite.
L'interface de processus entière n'est pas responsable de ce fonctionnement spécifique, d'autres programmes pour se connecter à la base de données, seulement besoin de construire un objet DB OK, indépendamment de la façon dont la classe d'usine change. C'est le sens de l'interface---- abstraction.
Le concept d'héritage n'a pas besoin d'être dit, il est bien compris. Pourquoi l'héritage? Parce que vous voulez réutiliser le code? Ce n'est certainement pas une raison, et le sens de l'héritage est dans l'abstraction, pas la réutilisation du code. Si l'objet A a une méthode d'exécution() , l'objet B veut également avoir cette méthode, de sorte que quelqu'un a la classe B s'étend A. Cela se fait sans le cerveau. Si un A est instantané dans B et que la méthode A est appelée, peut-elle atteindre le même but ? comme suit:
Classe B
{
Un nouveau A();
a.run ();
}
Il s'agit de l'utilisation de l'agrégation de classe pour réutiliser le code, est le prototype du modèle de délégation, est le GoF a toujours préconisé la pratique.
Alors, quelle est la signification de l'héritage? En fait, cela est causé par des raisons historiques, la première langue OO seulement l'héritage, pas d'interface, ne peut donc hériter que pour atteindre l'abstraction, s'il vous plaît noter que l'héritage est destiné à l'abstrait, pas la réutilisation du code (bien que l'héritage a également ce rôle), qui est l'une des erreurs les plus graves de nombreux livres pourris Java, ils causés par l'ombre, Je ne me suis pas complètement débarrassé de, mauvais livres blesser les gens ah, en particulier la classe d'entrée, le flux de poison est trop grand. Quand dois-je utiliser l'héritage? Utiliser uniquement dans les classes abstraites et, dans d'autres cas, essayer de ne pas utiliser. Les classes abstraites ne sont pas non plus instantanées, elles ne fournissent qu'un modèle, ce qui est révélateur.
La mauvaise source de développement logiciel est de répéter le code plutôt que de réutiliser le code, et l'autre est d'utiliser l'héritage, en particulier le c-programmeur. Il est sage d'interdire l'héritage multiple à Java dans le but d'arrêter l'utilisation d'un mauvais héritage, mais beaucoup de gens ne le comprennent pas. La capacité de Java à mieux refléter la conception est l'une des raisons pour lesquelles je suis fasciné.