Activitats

Instanciació de classes

L’objectiu d’aquesta activitat és veure com instanciar classes fetes per vosaltres.

Creeu una classe anomenada ClasseA d’acord a la següent especificació. Els dos mètodes set… serveixen per llegir els valors emmagatzemats a cada atribut.

Figura

Afegiu tres constructors:

  • public ClasseA(), que assigna els valors 5 i 10 als dos atributs, respectivament.
  • public ClasseA(int vp), que assigna “vp” a “valorPrimari” i el valor 10 a “valorSecundari”.
  • public ClasseA(int vp, int vs), que assigna “vp” i “vs” als dos atributs, respectivament.

Proveu que heu fet la classe correctament afegint el següent mètode main al codi i executant la classe.

  1. public static final void main (String[] args) {
  2. ClasseA a = new ClasseA();
  3. ClasseA b = new ClasseA(20);
  4. ClasseA c = new ClasseA(20, 40);
  5. System.out.println("L'objecte _a:_ conté: " + a.getPrimari() + ", " + a.getSecundari());
  6. System.out.println("L'objecte _b:_ conté: " + b.getPrimari() + ", " + b.getSecundari());
  7. System.out.println("L'objecte _c:_ conté: " + c.getPrimari() + ", " + c.getSecundari());
  8. }

  1. public class ClasseA {
  2.  
  3. private int valorPrimari;
  4. private int valorSecundari;
  5.  
  6. public ClasseA() {
  7. valorPrimari = 5;
  8. valorSecundari = 10;
  9. }
  10.  
  11. public ClasseA(int vp) {
  12. valorPrimari = vp;
  13. valorSecundari = 10;
  14. }
  15.  
  16. public ClasseA(int vp, int vs) {
  17. valorPrimari = vp;
  18. valorSecundari = vs;
  19. }
  20.  
  21. public int getPrimari() {
  22. return valorPrimari;
  23. }
  24.  
  25. public int getSecundari() {
  26. return valorSecundari;
  27. }
  28.  
  29. }

Codificació de classes

L’objectiu d’aquesta activitat és practicar la codificació d’una classe senzilla.

Donada la següent especificació, genereu el codi font d’aquesta classe. Els mètodes set… i get… serveixen per accedir i modificar, respectivament, els valors emmagatzemats als atributs. Podeu generar els constructors que vulgueu.

Figura

Un cop fet, comproveu que funciona amb un programa de prova (un mètode main), instanciant la classe i accedint i assignant valors als seus atributs.

Classe Media

  1. public class Media {
  2.  
  3. private String nom;
  4. private String autor;
  5. private int duradaSegons;
  6.  
  7. public Media (String n, String a, int ds) {
  8. nom = n;
  9. autor = a;
  10. duradaSegons = ds;
  11. }
  12.  
  13. public String getNom() {
  14. return nom;
  15. }
  16.  
  17. public String getAutor() {
  18. return autor;
  19. }
  20.  
  21. public int getDurada() {
  22. return duradaSegons;
  23. }
  24.  
  25. public void setNom(String n) {
  26. nom = n;
  27. }
  28.  
  29. public void setAutor(String a) {
  30. autor = a;
  31. }
  32.  
  33. public void setDurada(int ds) {
  34. duradaSegons = ds;
  35. }
  36.  
  37. }

Classe ProvaMedia

  1. public class ProvaMedia {
  2.  
  3. public static void main (String[] args) {
  4. Media m = new Media("NomOriginal", "AutorOiginal", 200);
  5. String n = m.getNom();
  6. String a = m.getAutor();
  7. int ds = m.getDurada();
  8. System.out.println("L'objecte conté: " +n + ", " + a + ", " + ds);
  9. System.out.print("Executant sets...");
  10. m.setNom("NomNou");
  11. m.setAutor("AutorNou");
  12. m.setDurada(500);
  13. System.out.println("fet!");
  14. n = m.getNom();
  15. a = m.getAutor();
  16. ds = m.getDurada();
  17. System.out.println("L'objecte ara conté: " + n + ", " + a + ", " + ds);
  18. }
  19.  
  20. }

Modificació d'atributs

L’objectiu d’aquesta activitat és practicar la codificació d’una classe senzilla i entendre la utilitat dels mètodes set….

Donada la següent especificació, genereu el codi font d’aquesta classe. Els mètodes set… i get… serveixen per accedir i per modificar, respectivament, els valors emmagatzemats en els atributs. Podeu generar els constructors que vulgueu.

Ara bé, per a aquest exercici, cal que els mètodes set… controlin que el valor que es vol assignar és correcte, i si no és el cas, no fer res (deixar el valor que hi havia inicialment). Mai no hi pot haver una data amb un dia-mes-any que no sigui coherent. S’han de controlar casos exagerats, com ara intentar assignar el valor de mes 25, o el dia 50, o com ara intentar desar el dia 31 quan el mes actual és el febrer. Recordeu també els anys de traspàs.

Figura

Un cop fet, comproveu que funciona amb un programa de prova (un mètode main), instanciant la classe i accedint i assignant valors als seus atributs.

Classe Date

  1. public class Date {
  2. private int dia;
  3. private int mes;
  4. private int any;
  5.  
  6. public Date (int d, int m, int a) {
  7. //Si s'intenten assignar valors erronis, s'assigna un valor per defecte
  8. //Si no es fes res, quedaria el valor 0, que no és correcte per a dia i mes
  9. if (anyCorrecte(a))
  10. any = a;
  11. else
  12. any = 2000;
  13. if (mesCorrecte(m))
  14. mes = m;
  15. else
  16. mes = 1;
  17. if (diaCorrecte(d))
  18. dia = d;
  19. else
  20. dia = 1;
  21. }
  22.  
  23. public int getDia() {
  24. return dia;
  25. }
  26.  
  27. public int getMes() {
  28. return mes;
  29. }
  30.  
  31. public int getAny() {
  32. return any;
  33. }
  34.  
  35. //Si s'intenten assignar valors erronis no es fa res
  36.  
  37. public void setDia(int d) {
  38. if (diaCorrecte(d))
  39. dia = d;
  40. }
  41.  
  42. public void setMes(int m) {
  43. if (mesCorrecte(m))
  44. mes = m;
  45. }
  46.  
  47. public void setAny(int a) {
  48. if (anyCorrecte(a))
  49. any = a;
  50. }
  51.  
  52. //Diu si, donat un dia, és correcte d'acord al mes d'aquesta data
  53. private boolean diaCorrecte(int d) {
  54. if (d < 1) return false;
  55. int[] maxData = {31,28,31,30,31,30,31,31,30,31,30,31};
  56. //Any de traspàs?
  57. if(any%400 == 0 || (any%100 != 0 && any%4 == 0)) {
  58. maxData[1] = 29;
  59. }
  60. if (d > maxData[mes - 1]) return false;
  61. else return true;
  62. }
  63.  
  64. private boolean mesCorrecte(int m) {
  65. if ((m > 12)||(m < 1)) return false;
  66. else return true;
  67. }
  68.  
  69. private boolean anyCorrecte(int a) {
  70. if (a < 0) return false;
  71. else return true;
  72. }
  73.  
  74. }

Classe ProvaDate

  1. public class ProvaDate {
  2.  
  3. public static void main (String[] args) {
  4. Date d = new Date(23, 11, 2011);
  5. System.out.println("La data és: " + d.getDia() +
  6. "/" + d.getMes() + "/" + d.getAny());
  7. //Canvi de mes
  8. d.setMes(2);
  9. System.out.println("La data és: " + d.getDia() +
  10. "/" + d.getMes() + "/" + d.getAny());
  11.  
  12. //Erroni, 2011 no és de traspàs. Res no ha de canviar
  13. d.setDia(29);
  14. System.out.println("La data és: " + d.getDia() +
  15. "/" + d.getMes() + "/" + d.getAny());
  16.  
  17. //Canvi d'any
  18. d.setAny(2012);
  19. System.out.println("La data és: " + d.getDia() +
  20. "/" + d.getMes() + "/" + d.getAny());
  21.  
  22. //Erroni, 2012 sí que és de traspàs
  23. d.setDia(29);
  24. System.out.println("La data és: " + d.getDia() +
  25. "/" + d.getMes() + "/" + d.getAny());
  26.  
  27. //Canvi d'any erroni
  28. d.setAny(-23);
  29. System.out.println("La data és: " + d.getDia() +
  30. "/" + d.getMes() + "/" + d.getAny());
  31.  
  32. //Canvi de mes erroni
  33. d.setMes(15);
  34. System.out.println("La data és: " + d.getDia() +
  35. "/" + d.getMes() + "/" + d.getAny());
  36.  
  37. }
  38.  
  39. }

Classes que usen altres classes

L’objectiu d’aquesta activitat és practicar la codificació d’una classe que, al mateix temps, usa classes al seu codi.

Donada la següent especificació, genereu el codi font d’aquesta classe. Podeu afegir-hi els constructors que vulgueu. La constant ZERO es refereix a una instància de ComplexNumber amb els valors “real” i “imaginary” ambdós a 0.

Figura

La descripció dels mètodes és:

  • get…, serveixen per accedir als valors dels dos atributs.
  • add(…), retorna un nou objecte ComplexNumber. El valor de cadascun dels seus dos atributs nous és la suma del mateix atribut al paràmetre “c” i al propi objecte que executa add (o sigui, “suma”). Per exemple, el valor “real” del nou objecte és la suma de l’atribut “real” de “c” i de l’objecte que executa add.
  • toString(), retorna una cadena de text on es mostren els valors dels atributs de l’objecte (per exemple, separats per una coma).

Un cop fet, comproveu que funciona amb un programa de prova (un mètode main), instanciant la classe diverses vegades i invocant els diferents mètodes. Ajudeu-vos del mètode toString per mostrar les dades per pantalla.

Classe ComplexNumber

  1. public class ComplexNumber {
  2.  
  3. public static final ComplexNumber ZERO = new ComplexNumber(0.0, 0.0);
  4. private double real;
  5. private double imaginary;
  6.  
  7. public ComplexNumber(double r, double i) {
  8. this.real = r;
  9. this.imaginary = i;
  10. }
  11.  
  12. public Double getReal() {
  13. return this.real;
  14. }
  15.  
  16. public Double getImaginary() {
  17. return this.imaginary;
  18. }
  19.  
  20. public ComplexNumber add(ComplexNumber c) {
  21. ComplexNumber resultat = new ComplexNumber(this.real + c.getReal(), this.imaginary + c.getImaginary());
  22. return resultat;
  23. }
  24.  
  25. public String toString() {
  26. String resultat = this.real + " ";
  27. if (this.imaginary >= 0.0) {
  28. resultat += "+" + this.imaginary + "i";
  29. } else {
  30. resultat += this.imaginary + "i";
  31. }
  32. return resultat;
  33. }
  34. }

Classe ProvaComplexNumber

  1. public class ProvaComplexNumber {
  2.  
  3. public static void main (String[] args) {
  4.  
  5. ComplexNumber c1 = new ComplexNumber(1.0,2.0);
  6. ComplexNumber c2 = new ComplexNumber(2.0,-3.0);
  7.  
  8. ComplexNumber zero = ComplexNumber.ZERO;
  9.  
  10. System.out.println("Hem creat el Nombre Complex C1:");
  11. System.out.println("\t Part real = " + c1.getReal());
  12. System.out.println("\t Part imaginària = " + c1.getImaginary());
  13.  
  14. System.out.println("\nHem creat el Nombre Complex C2:");
  15. System.out.println("\t Part real = " + c2.getReal());
  16. System.out.println("\t Part imaginària = " + c2.getImaginary());
  17.  
  18. System.out.println("\nOperació de suma (C1 + ZERO):");
  19. ComplexNumber res = c1.add(ComplexNumber.ZERO);
  20. System.out.println("\t Part real = " + res.getReal());
  21. System.out.println("\t Part imaginària = " + res.getImaginary());
  22.  
  23. System.out.println("\nOperació de suma (C1 + C2):");
  24. res = c1.add(c2);
  25. System.out.println("\t Part real = " + res.getReal());
  26. System.out.println("\t Part imaginària = " + res.getImaginary());
  27.  
  28. System.out.println("\nDarrera suma duta a terme: ");
  29. System.out.print("(" + c1 + ") + (" + c2 + ") = (" + res + ")");
  30. }
  31. }

Anar a la pàgina anterior:
Declaració de classes
Anar a la pàgina següent:
Exercicis