Segundo taller de iniciación a OOP

VigoJUG & VigoTech Alliance

Axenda

  • VigoTech, VigoJUG e o reto

  • Talleres de iniciación

  • Instalar Java e un IDE

  • Herencia: dereitos de acceso.

  • Herencia: encasulación.

  • Poliformismo.

  • Exercicio

  • Dúbidas

VigoJUG

  • Un meetup o primeiro martes de cada mes

  • Próxima charla!

  • ¿Te animas cunha charla?. Licencias de JetBrains ;-)

  • Outras iniciativas: clubes de lectura

  • Canal de slack #VigoJUG en http://www.vigotech.org

sponsors

O reto

  • Exercicio de programación breve (30 minutos) en GitHub

  • PRs (un directorio por cada usuaria)

  • Mensual

  • Non é competitivo

Talleres de iniciación

  • Un taller o tercer martes de cada mes

  • Rolda de preguntas para falar dun tema

  • Exercicio práctico para asentar os coñecementos

  • Calquera cousa que os traiades de casa

  • Abertos a outros formatos e iniciativas

Non sexades tímidos: ¡¡preguntar!!

timidos

Instalar Java e un IDE

Herencia: dereitos de acceso

ModifierClassPackageSubclassWorld

public

Y

Y

Y

Y

protected

Y

Y

Y

N

no modifier

Y

Y

N

N

private

Y

N

N

N

Fonte: CodeJava

Exemplo 1

  • Dog

  • Person

  • Cat

  • Caniche

  • Wolf

Herencia: encapsulación

  • Un dos catro conceptos da OOP (xunto con herencia, polimorfismo e abstracción)

  • Permite separar a implementación da clase do que se expoñe fora da mesma

  • Así o código é máis doado de manter

  • É un concepto importante, moita veces mal usado

Exemplo 0

  • Enc0

  • Enc1

  • Enc2

Poliformismo.

  • Ter máis de unha identidade: un caniche, un can, un animal

  • Poder obligar os fillos a determinada característica: ladrar ⇒ uso de abstract

  • Evitar ter fillos → uso de final

Exemplo 0

  • Aleman

  • AlemanPalleiro

  • Perro

Exemplo 1

  • Child

  • ChildAbstract

  • ChildFinal

Pregunta 1

¿Qué es la firma de un método?

  1. El nombre del método y el tipo de su valor de retorno.

  2. El nombre del método y el nombre de sus parámetros.

  3. El nombre del método y el tipo de sus parámetros.

  4. El nombre del método, la lista de parámetros y el tipo de retorno.

Pregunta 2

Esta es la definición de un método:

int compute( a int, b double ){ . . . .}

¿Cual de las siguiente tiene una firma diferente?

  1. int compute( sum int, value double ){ . . . .}

  2. double compute( a int, b double ){ . . . .}

  3. double compute( sum int, b double ){ . . . .}

  4. int compute( a int, b int ){ . . . .}

Pregunta 3

¿Qué debe un hijo no-abstracto hacer respecto a un método abstracto de su clase padre?

  1. Un hijo debe sobrescribir un método abstracto heredado de su padre definiendo un método con la misma firma y el mismo tipo de retorno.

  2. Un hijo debe definir un método adicional similar al heredado de su padre definiendo un método con la misma firma y un tipo de retorno diferente.

  3. Un hijo no debe definir ningún método con la misma firma que el método abstracto del padre.

  4. Un hijo no-abstracto debe definir un método no abstracto con la misma firma y el mismo tipo de retorno que el padre abstracto.

Pregunta 4

Aquí tenemos un método abstracto definido en el padre:

public abstract int sumUp ( int[] arr );

¿Cuál de los siguientes es obligatorio en un hijo no-abstracto?

  1. public abstract int sumUp ( int[] arr ) { . . . }

  2. public int sumUp ( int[] arr ) { . . . }

  3. public double sumUp ( int[] arr ) { . . . }

  4. public int sumUp ( long[] arr ) { . . . }

Pregunta 5

¿Qué debe ser cierto si un hijo de una clase abstracta padre no sobreescribe todo los métodos abstractos del padre?

  1. Es un error, no compila.

  2. La clase hija debe ser declada a su vez abstracta.

  3. Las clases hijas son automáticamente no abstractas, así que está bien.

  4. La clase padre es errónea.

Pregunta 6

Tenemos la siguiente situación:

Birthday happy;
happy = new AdultBirthday( "Joe", 39);

happy.greeting();

¿Qué método greeting() se ejecuta: el definido por Birthday o el definido por AdultBirthday?

  1. El definido por Birthday porque es el tipo de la variable happy.

  2. El definido por AdultBirthday porque es el tipo del objecto referido por happy.

  3. El más cercano en el código a la línea happy.greeting().

  4. Ninguno, este código no es correcto.

Pregunta 7

La clase Roedor tiene una clase hija Rata que a su vez tiene una clase Ratón. La clase Ratón tiene una clase hija Hamster:

Roedor rod;
Rata rat = new Rata();
Raton mos = new Raton();
Hamster pkt = new Hamster();

¿Cuál de los siguiente no compila?

  1. rod = rat;

  2. rod = mos;

  3. pkt = null;

  4. pkt = rat;

Pregunta 8

Misma situación que la pregunta anterior. ¿Cual de las siguiente declaraciones es correcta para un array que debería poder contener hasta 10 objectos de tipo Rata, Ratón y Hamster?

  1. Rat[] array = new Rat[10];

  2. Rodent[] array = new Rat[10];

  3. Rodent[] array = new Rodent[10];

  4. Rodent[10] array;

Pregunta 9

¿Cual es el nombre de la clase que es padre de todas las clases en Java?

  1. Object

  2. Class

  3. Root

  4. Java

Pregunta 10

Examina el siguiente código:

String str = "Hot Java";

boolean switch = str instanceof String;

¿Cuál es el valor de switch?

  1. true

  2. false

  3. "Hot Java"

  4. null

Puzzlers

Polymorphism.puzzlers1:

  • Poly1

  • Poly2

  • Poly3

  • Poly4

  • Poly5

  • Poly6

  • Poly7

Exercicio

Dúbidas