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/ou par composition
1. Portes logiques
Les portes ET-NON possèdent plusieurs entrées: e1, e2, e3, e... | |
Les portes OU-NON possèdent plusieurs entrées: e1, e2, e3, e... |
Examiner ces portes logiques. Elles ont en commun la caractéristique de posséder 2 entrées E1 et E2 et une sortie S. Seule la sortie S les différencie. On va donc "factoriser" ces caractéristiques dans une classe "ancêtre" PorteLogique dont hériteront 2 classe filles Nand et Nor
Définir une classe abstraite PorteLogique regroupant les caractéristiques communes de ces portes, avec un constructeur et tous les mécanismes d’encapsulation (attributs privés et méthodes permettant d'accéder aux entrées E1 et E2, plus une méthode abstraite définissant la sortie)
Ecrire les classes Nand et Nor héritant de la classe PorteLogique. Ces classe doivent simplement définir la méthode abstraite S qui est 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
2. Circuits séquentiels
Les circuits séquentiels sont obtenus par combinaison de portes logiques, avec certaines sorties qui sont rebouclées en entrée. Contrairement aux portes logiques, l'état des sorties des circuits séquentiels dépend non seulement de l'état des entrées mais aussi de l'état antérieur des sorties : ce sont des circuits dotés de mémoire.
2.1 Les bascules R.S
Les bascules sont des bistables qui peuvent prendre deux états. Les bascules sont asynchrones. Elles possèdent deux entrées nommées S et R et deux sorties nommées Q et Q . Les sorties Q et Q sont toujours complémentaires. L'entrée S (set) met la bascule au travail et la sortie Q est au niveau 1. L'entrée R (reset) remet la bascule au repos et la sortie Q au niveau zéro.
Les bascules RS sont réalisées avec des circuits NOR. On envoie séparément et alternativement les signaux sur S et R. Si S = R = 1 il y a état indéterminé.
| TABLE DE VERITE | |||
Etat initial Qn | S | R | Etat final Qn+1 | |
1 | 1 | 0 | 1 | |
1 | 0 | 1 | 0 | |
1 | 1 | 1 | ? | |
1 | 0 | 0 | 1 | |
0 | 1 | 0 | 1 | |
0 | 0 | 1 | 0 | |
0 | 0 | 0 | 0 | |
0 | 1 | 1 | ? |
On cherche à écrire une classe modélisant une bascule RS. Est-ce judicieux de la faire hériter de la classe PorteLogique ou d’un de ses descendants ?
Ecrire une classe modélisant une bascule RS 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.
a pour représentation symbolique
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 RST héritant de la classe RS, 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 :
Jn | Kn | Qn |
| S | R | Qn+1 |
0 | 0 | 0 | 1 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 | 0 | 1 | 0 |
Nous constatons que nous ne rencontrons jamais la combinaison R = S = 1. Cette table peut se résumer sous la forme suivante :
Jn | Kn | Qn+1 |
0 | 0 | Qn |
0 | 1 | 0 |
1 | 0 | 1 |
1 | 1 |
|
Ecrire une classe JK, modélisant une bascule JK par composition à partir d'une bascule RST
Ecrire un programme permettant d’instancier et de tester des objets de ces classes