wiki:2011CaoTme2

Version 4 (modified by jpc, 13 years ago) (diff)

--

Objets Simples & Opérateurs

Pour valider la description d'un circuit intégré, il est nécessaire de passer par une étape de simulation (cf. asimut). Une variable à l'intérieur du simulateur est un booléen, mais dans certains cas on peut ne pas connaître sa valeur. Le simulateur introduit donc un nouveau type de variable pouvant prendre trois valeurs: 0, 1 ou U (Undefined ou encore non-définie).

Au cours de ce TME nous allons créer ce nouveau type (ou classe) que nous appellerons BoolValue.

Spécification de BoolValue

La classe BoolValue va contenir un seul attribut _value qui sera de type entier et ne pourra prendre que trois valeurs: 0, 1 ou 2 ayant respectivement la signification Zero, One et Undefined.

Plutôt que travailler avec des constantes numériques, nous allons utiliser des constantes nommées. On réalise cela avec un enum, comme ci-après:

class BoolValue {
  public:
    enum Value { Zero=0, One=1, Undefined=2 };
  public:
    // ...
};

A l'extérieur de la classe on les référencera avec la syntaxe BoolValue::Undefined et à l'intérieur, simplement comme Undefined.

La classe BoolValue possèdera les fonctions membres suivantes:

Constructeurs: (CTOR)

  • BoolValue(), le constructeur par défaut, devra affecter la valeur Zero.
  • BoolValue{{{int, un contructeur à partir d'un entier ordinaire. Tout entier de valeur supérieure ou égale à 2 sera considéré comme Undefined.
  • BoolValue(const BoolValue&), un constructeur par copie.

Destructeur: (DTOR)

  • ~BoolValue(), le destructeur (unique).

Accesseurs: (Accessors)

  • print(std::ostream&), une fonction d'affichage.
  • toInt(), une fonction de conversion vers un entier.

Modifieur: (Mutators)

  • fromInt(int), affectation depuis un entier.

En plus des fonctions membres listées çi dessus, on ajoute les fonctions non-membres suivantes permettant de réaliser des opérations logiques:

  • BoolValue non(const BoolValue&), négation logique.
  • BoolValue ou (const BoolValue&, const BoolValue&), ou logique.
  • BoolValue et (const BoolValue&, const BoolValue&), et logique.

La table de vérité des fonctions négation et OU vous est fournie çi-après.

Table de verite NOT et OU

Question 1

Implanter la class BoolValue telle que décrite précédemment. Comme au TME1, on tracera les appels aux constructeurs et destructeurs. Tester à l'aide du petit programme de test suivant:

Code for checking the OR

Retrouvez la table de vérité classique (sans états non-définis) avec la commande shell suivante:

./boolvalue | grep -v "U"

Question 2

Écrire la table de vérité de la fonction ET puis l'implanter. Vérifier à l'aide d'un programme de test calqué sur celui du OU que la fonction se comporte correctement.

Question 3

En vous basant sur l'opérateur qui a été présenté en cours, écrire l'opérateur d'écriture dans un flot pour l'objet BoolValue. Modifier le code des fonctions de vérification en conséquence.

Question 4

Écrire l'opérateur d'affectation, modifier le code de test en conséquence. A quelle fonction membre se substitue-t-elle?

Question 5

Écrire les fonction (non-membre) ou et et sous forme d'opérateurs:

BoolValue operator or  ( const BoolValue&, const BoolValue& );
BoolValue operator and ( const BoolValue&, const BoolValue& );

Modifier le code de test.

Attachments (3)

Download all attachments as: .zip