SITE WEB de |
Enseignement > Programmation orientée objet > Delphi > Travaux Dirigés > Héritage, composition et encapsulation |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Construction de classes par héritage et composition Encapsulation NB : Les exemples illustrant ce TD proviennent de la logique séquentielle, mais ce n’est pas un TD d’architecture des ordinateurs ! Le but de ce TD est d’apprendre à construire des objets complexes à partir d’objets simples par héritage et par composition
Examiner ces portes logiques. Qu’ont-elles en commun ? Définir une classe TPORTELOGIQUE regroupant les caractéristiques communes de ces portes, avec un constructeur et tous les mécanismes d’encapsulation. Ecrire les classes TNAND et TNOR héritant de la classe TPORTELOGIQUE et possédant une méthode S qui définit la valeur de sortie en fonction des états E1 et E2 Ecrire un programme permettant d’instancier et de tester des objets de ces classes Les circuits séquentiels dépendent du temps qui font intervenir les notions d'ordre et de durée. L'état de sortie dépend de se qui se passe avant: dans ce cas ce sont les opérations précédentes qui déclenchent les suivantes, c'est une question d'ordre. L'état de sortie dépend aussi du temps qui permet la combinaison des entrées et l'appartion du résultat de sortie. 2.1 Les bascules R.S Les bascules sont des bistables qui peuvent prendre deux états. Les bascules sont asynchrones, possèdent deux entrées nommées S et R et deux sorties: nommées Q et Les bascules RS sont réalisées avec des circuits NOR. Les entrées sont actives à l'etat bas (niveau zéro). Elles agissent lorsque les entrées (soit S, soit R) prennent le niveau zéro. Si S = R = O il y a état indéterminé.
On cherche à écrire une classe modélisant une bascule TRS. Est-ce judicieux de la faire hériter de la classe TPORTELOGIQUE ou d’un de ses descendants ? Ecrire une classe modélisant une bascule TRS composée de 2 circuits NOR avec tous les mécanismes d’encapsulation à savoir
Ecrire un programme permettant d’instancier et de tester un objet de cette classe 2.2 Bascule R.S.T ou R.S.Clock La bascule R.S.T. est une bascule pour laquelle les entrées S et R ne sont prises en compte qu'en coïncidence avec un signal de commande. Ce signal peut être fourni par une horloge, nous avons alors une bascule synchrone. Ce circuit peut être réalisé de la façon suivante.
Lorsque le signal de commande, noté ici H, est à 1 la bascule fonctionne comme indiqué précédemment et les sorties suivent les variations des entrées S et R. Par contre, lorsque le signal de commande est à 0, la bascule est bloquée : Q est indépendant des éventuels changements de S et R. L'état mémorisé correspond au dernier état avant le passage de la ligne de commande H de 1 à 0. Ecrire une classe TRST héritant de la classe RST, permettant de modéliser une bascule RST On réécrira notamment :
On ajoutera :
Ecrire un programme permettant d’instancier et de tester des objets de ces classes 2.3 Bascules J-K La bascule J-K permet de lever l'ambiguïté que nous avons observé lorsque R = S = 1. Ceci peut être obtenu en asservissant les entrées R et S aux sorties selon le schéma logique suivant :
est représenté par
Ce qui nous permet de construire la table de vérité de la bascule J-K :
Nous constatons que nous ne rencontrons jamais la combinaison R = S = 1. Cette table peut se résumer sous la forme suivante :
Ecrire une classe TJK, modélisant une bascule JK, héritant de la classe TRST NB : Il suffit d’écrire 2 méthodes SetJ et SetK Ecrire un programme permettant d’instancier et de tester des objets de ces classes
Corrigé {*************************** CLASSE TPORTELOGIQUE ************************} Type TPorteLogique = class Constructor TPorteLogique.Create(e1,e2:boolean); Procedure TPorteLogique.SetE1(v:boolean); Procedure TPorteLogique.SetE2(v:boolean); Function TPorteLogique.GetE1:boolean; Function TPorteLogique.GetE2:boolean; {********* CLASSES TNAND et TNOR(héritent de TPORTELOGIQUE) **************} Type TNAND = class(TporteLogique) Type TNOR = class(TporteLogique) function TNAND.S : boolean; function TNOR.S : boolean; {********************* Bascule RS : CLASSES RS ******************} Type TRS = class constructor TRS.Create; destructor TRS.Destroy; Function TRS.GetS : boolean; Function TRS.GetR : boolean; Function TRS.GetQ : boolean; Function TRS.GetQB : boolean; procedure TRS.SetS (valeur : boolean); procedure TRS.SetR (valeur : boolean); procedure TRS.afficher; {*********** Bascule RST : CLASSES TRST hérite de TRS ******************} Type TRST = class(TRS) procedure TRST.SetH(valeur:boolean); function TRST.GetH : boolean; constructor TRST.Create; procedure TRST.SetS(valeur:boolean); procedure TRST.SetR(valeur:boolean); procedure TRST.afficher; {*************** Bascule JK : CLASSES TJK hérite de TRST ***************} Type TJK = class(TRST) procedure TJK.SetJ(valeur:boolean); procedure TJK.SetK(valeur:boolean); var JK : TJK; begin |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mise à jour par l'éditeur le : 07/01/2004 -
Copyright © 2012 - 2013 François Bonneville - Tous droits réservés |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||