Successfully reported this slideshow.
Upcoming SlideShare
×

# Td serie a-abstract-cast-heritage

1,247 views

Published on

• Full Name
Comment goes here.

Are you sure you want to Yes No
• il n'y pas de correction svp ??

Are you sure you want to  Yes  No
• Be the first to like this

### Td serie a-abstract-cast-heritage

1. 1. Série A - Thème : Héritage – Opérateur de Cast – Classes Abstraites – Polymorphisme – Mot Clef Super – Conception Avancée de ProgrammeExercice 1 : HéritageSoit le code suivant :class A {public void foo(){System.out.println(« A » ) ;}}class B extends A {public void foo(){System.out.println(« B» ) ;}}Question :Quel affichage produit la portion de code suivante :B b = new B() ;A a = new A() ;A ab = new B() ;b.foo() ;a.foo() ;ab.foo() ;Exercice 2 : Bref Retour sur les notions statiquesclass Point { public int x,y;public void Point() { x=1;y=1; }}public class Question {public static void addx( Point p ){ p.x += 1; }public static void addy( Point p ){ Point q = p;q.y += 1; }public static Point add( Point p, Point q ){p.x = p.x + q.x;p.y = p.y + q.y;return(q); }public static void affiche( Point p )
2. 2. { System.out.println( "(" + p.x + "," + p.y + ")" ) ; }public static void main( String[] arg ){Point q = new Point();Point p = new Point();p.x = 2 ;p.y = 3 ;affiche( p ) ;addx( p ); affiche( p );addy( p ); affiche( p );q = add( q , p ); affiche( p );add(add( p , q ) ,p); affiche( p );}}Exercice 3 : Héritage et Mot Clef superclass Moins {public int n ;public Moins(int x) { n = x ; }public String toString() { return "Moins ! " ; }public void test1() { System.out.println("Moins.test1 : " + this.toString());}public void test2() { System.out.println("Moins.test2 : " + this.n); } }class Plus extends Moins{public int n ;public Plus(int x, int y) { super(x) ; this.n = y ; }public String toString() { return "Plus ! " ; }public void test1() {super.test1() ;System.out.println("Plus.test1 : " + this.toString() + super.toString()); }public void test2() {super.test2() ;System.out.println( "Plus.test2 : " + this.n + super.n);}public static void main(String argv[]) {Plus m = new Plus(1, 2) ;m.test2() ;Moins n = new Moins(0) ;n.test2() ;}}Exercice 4 : Opérateur de Forçage (Cast)Voici le graphe de classes (graphe UML) correspondant à une hiérarchie de classes :
3. 3. En tenant compte de cette hiérarchie, les expressions ci-dessous tentent dêtrecompilées puis exécutées. Mais certaines présentent des erreurs. Pour chaqueexpression, indiquez si elle est totalement sans erreur, si elle conduit à des erreursde compilation (et dans ce cas indiquez aussi si cela est possible la correction quipermettrait que cette expression se compile normalement) et si elle conduit à deserreurs dexécution.Attention: on considérera que toutes les classes sont concrètes (peuvent avoir des instances): 1. C1 a = new C5(); 2. C1 b = new C3(); 3. C2 c = a; 4. C4 d = new C1(); 5. b = a; 6. b = new C6(); 7. c = b; 8. d = b; 9. C4 e; 10. b = new C5(); 11. e = (C4) b;Exercice 7 : Héritage et Appel de ConstructeurEtant donné le programme suivant:class Bidule {int a=0;Bidule(int x){a = x;}}a) Indiquez ce que retournent les deux expressions suivantes (en dautres termes,quelle est la "valeur" de ces expressions)?new Bidule(15)new Bidule[15]b) Soient les classes suivantes:
4. 4. class Chose extends Bidule {Chose(int x){ super(x);}}class Truc extends Chose {Truc(int x){ super(x);}}Indiquez, pour chacune des expressions suivantes, si elles sont correctes ou non, etdans ce cas, quel type derreur produisent-elles (et est ce une erreur de compilation,ou dexécution) et comment peut on faire pour quelles ne produisent plus derreur?Chose c1 = new Truc(10);Bidule c2 = c1;Truc c3 = c1;Exercice 8 : Héritage et instanciationSoient les classes suivantes:class Bouteille { public void deboucher() { this.bruit(); }void bruit(){ System.out.println("clink"); } }class BouteilleSansAlcool extends Bouteille{ }class BouteilleJusFruit extends BouteilleSansAlcool { }class BouteilleSoda extends BouteilleSansAlcool { void bruit(){System.out.println("psshit"); } }class BouteilleEau extends BouteilleSansAlcool { }class BouteilleAlcool extends Bouteille { void bruit(){ System.out.println("blup");}}class BouteilleVin extends BouteilleA { void bruit(){ System.out.println("pop");}}class BouteilleChampagne extends BouteilleV { void bruit(){System.out.println("paan"); } }class BouteilleWhisky extends BouteilleA { }Question 1:Donnez ce qui est affiché (ou si vous préférez ce qui est imprimé dans le flux desortie de la console) par le programme suivant:main() {Bouteille b1 = new Bouteille();Bouteille b2 = new BouteilleSansAlcool();BouteilleAlcool b3 = new BouteilleAlcool();BouteilleAlcool b4 = new BouteilleChampagne();BouteilleVin b5 = new BouteilleChampagne();BouteilleWhisky b6 = new BouteilleWhisky();
5. 5. BouteilleAlcool b7 = new BouteilleVin();Bouteille b8 = new BouteilleChampagne();b1.deboucher();b2.deboucher();b3.deboucher();b4.deboucher();b5.deboucher(); b6.deboucher(); b7.deboucher(); b8.deboucher(); }Question 2:On effectue les affectations suivantes (ces affectations sont indépendantes les unesdes autres, elles ne sont pas exécutées en séquence!). Pour chaque affectation, ditessi elle fonctionne sans erreur, si elle provoque une erreur à la compilation ou si elleprovoque une erreur à lexécution. Dans ce cas, expliquez (brièvement) lorigine deces erreurs. Sil y a une erreur à la compilation, indiquez si lon peut ajouter ousupprimer quelque chose qui évite cette erreur sans que cela modifie le sens duprogramme. (note: ces affectations sont faites dans lordre!).1. b1 = b2;2. b1 = b4;3. b3 = b4;4. b3 = b5;5. b5 = b4;6. b7 = b6;7. b7 = b4;8. b6 = (BouteilleWhisky) b4;9. b5 = (BouteilleChampagne) b7;10. b8 = b2;Question 3:On crée un tableau de bouteilles de la manière suivante:BouteilleAlcool[] e = new BouteilleAlcool[4];a) Que faut il faire pour que les affectations suivantes soient toutes valides (à lacompilation et à lexécution).Note: on reprendra les variables dans létat de la fin de la question 1):e[0] = b4; e[1] = b5; e[2] = b6; e[3] = b7;b) Que produit lexécution de linstruction suivante:for(int i=0;i<e.length;i++) e[i].deboucher();Exercice 10 : Héritage et instanciationSoient les classes suivantes:class Personne {public void parler() {System.out.println("hum!");} }