Transcript
Page 1: Clase1 introduccinalcurso

SCJP 6

Clase 0 – Presentación

Ezequiel Aranda

Sun Microsystems Campus Ambassador

Page 2: Clase1 introduccinalcurso

Disclaimer & Acknowledgments

>!Even though Ezequiel Aranda is a full-time employee of Sun Microsystems, the contents here are created as his own personal endeavor and thus does not reflect any official stance of Sun Microsystems.

>!Sun Microsystems is not responsible for any inaccuracies in the contents.

>!Acknowledgments – The slides of this presentation are made from “SCJP Unit 1” by Warit Wanwithu and Thanisa Kruawaisayawan and SCJP Workshop by P. Srikanth.

>!This slides are Licensed under a Creative Commons Attribution – Noncommercial – Share Alike 3.0 >!http://creativecommons.org/licenses/by-nc-sa/3.0/

Page 3: Clase1 introduccinalcurso

Certificarse, ¿Para qué?

>!Los títulos universitarios no prueban nuestras capacidades en tecnologías utilizadas en aplicaciones del mundo real.

>!Los cursos de institutos brindan certificaciones a todos, por lo que no pueden ser utilizados para medir nuestros conocimientos.

>!La industria necesita una forma de conocer nuestros conocimientos en las tecnologías que utilizan para construir sus aplicaciones.

>!Para probar nuestras credenciales en el mercado global.

Page 4: Clase1 introduccinalcurso

Certificarse, ¿Para qué? (II)

>!Los puestos de trabajo en IT están entre los 10 más difíciles de llenar, de acuerdo a una encuesta de Manpower de abril de 2008.

>!Cerca del 25% de los empleadores tienen problemas para contratar personal debido a falta de capacidad.

>!Múltiples estudios sugieren que habrá una amplia brecha entre la demanda de puestos de IT y la oferta de trabajadores con las habilidades necesarias en los próximos 5 a 10 años.

Page 5: Clase1 introduccinalcurso

Valor de una certificación

>! El verdadero valor yace en la capacidad de verificar que una persona posee las habilidades que son importantes para el empleador.

>! Las compañías de software consiguen más contratos o cobran mayores tarifas cuando sus empleados son certificados.

>! Prueban efectivamente que una persona con un titulo universitario posee adicionalmente conocimientos sobre tecnologías del mundo real.

>! Los empleadores buscan candidatos con este tipo de conocimientos, ¿que mejor para conseguir un primer trabajo que obtener una credencial reconocida por la industria?

>! Ayuda a obtener conocimientos profundos sobre una tecnología.

Page 6: Clase1 introduccinalcurso

SCJP

Esta certificación de base está dirigida a

programadores interesados en

demostrar su competencia en los

fundamentos del lenguaje de

programación Java.

Page 7: Clase1 introduccinalcurso

Certification Path

Page 8: Clase1 introduccinalcurso

SCJP

>!Tipo de examen: Multiple choice y drag and drop

>!Número de preguntas: 72

>!Condición de Aprobación: 65%(47 de 72 preguntas)

>!Tiempo: 210 minutos

>!Prerrequisito: Ninguno

>!Valor: US$ 40

Page 9: Clase1 introduccinalcurso

Declaraciones, inicializaciones y

ámbitos

>!Clases (incluyendo abstractas y todas las formas de clases anidadas), interfaces, y enums.

>!JavaBeans, estándares de nomenclatura.

>!Lista de argumentos de longitud variable.

>!Valores de retorno legales, incluyendo covariantes.

Page 10: Clase1 introduccinalcurso

Control de Flujo

>!Switch.

>!Loops e iteradores.

>!Assertions.

>!Exceptions y cláusulas para su manejo (try, catch, finally).

>!Entender cuales son arrojadas por la máquina virtual.

Page 11: Clase1 introduccinalcurso

API

>!Wrappers de tipos primitivos y/o autoboxing & unboxing.

>!Diferencias entre String, StringBuilder, and StringBuffer.

>!Leer de archivos, escribir a archivos, interactuar con el usuario, desarrollar soluciones correctas utilizando: BufferedReader, BufferedWriter, File, FileReader, FileWriter, PrintWriter, y Console.

>!Serialización y de-serialización de objetos.

>!Utilizar el paquete java.text para formatear y parsear fechas, números y divisas.

>!Describir el propósito y uso de java.util.Locale.

>!Utilizar java.util.regex para formatear o parsear cadenas de caracteres.

Page 12: Clase1 introduccinalcurso

Concurrencia

>!Escribir código para definir, instanciar e inicializar threads utilizando Java.lang.Thread y java.lang.Runnable.

>!Estados de los Threads.

>!Bloqueo de objetos para proteger variables estaticas o de instancia de problemas de acceso concurrente.

>!Dado un escenario, escribir código que haga uso apropiado de wait, notify, o notifyAll.

Page 13: Clase1 introduccinalcurso

Conceptos de OO

>!Encapsulamiento, bajo acoplamiento y alta cohesión entre clases.

>!Uso de polimorfismo. Determinar cuando será necesario realizar castings y reconocer errores de compilación vs. errores en tiempo de ejecución.

>!Declarar y/o invocar métodos sobrecargados y sobreescritos, y código para invocar a la superclase y/o constructores sobrecargados.

>!Desarrollar código que implemente relaciones “es-un” o “tiene-un”.

Page 14: Clase1 introduccinalcurso

Colecciones / Genéricos

>! Comparable.

>! Sobrescribir hashCode() y equals().

>! Escribir código que use las versiones genéricas de la API Collections.

>! Reconocer las limitaciones de la API de Colecciones no genéricas y como refactorizar el código para utilizar las versiones genéricas.

>! Escribir código que use las interfaces NavigableSet y NavigableMap.

>! Escribir métodos genéricos o métodos que hagan uso de los tipos comodines.

>! Usar las interfaces java.util.Comparator y java.lang.Comparableinterfaces para afectar el ordenamiento de listas y arreglos.

>! Ordenamiento natural de wrappers de tipos primitivos y String.

Page 15: Clase1 introduccinalcurso

Fundamentos

>!Modificadores de acceso apropiados, declaracion de paquetes y sentencias import.

>!Un objeto se vuelve elegible para el garbage collector.

>!Reconocer los comportamientos del método Object.finalize().

>!JARs, construir la estructura de directorios apropiada. Classpath.

>!Uso correcto de operadores.

>!Escribir código que determine la igualdad de dos objetos o primitivos.

Page 16: Clase1 introduccinalcurso

Diferencia entre los objetivos de los

examenes 1.5 (055) y 1.6 (065)

>!java.io.Console,

>!java.util.NavigableSet,

>!java.util.NavigableMap.

>!Serás evaluado en gran profundidad en: manejo de exceptions, collections, assertions, threads, y control de flujo.

Page 17: Clase1 introduccinalcurso

¿Cómo prepararse para el

examen?

>!Entender los objetivos perfectamente.

>!Si no sabes Java, aprende Java primero.

>!Referirse a la documentación de la API y la especificación del lenguaje.

>!Estudiar de un buen libro de preparación para la certificación.

>!Hacer tantas simulaciones de examen como sea posible.

Page 18: Clase1 introduccinalcurso

SCJP 6

Clase 0.5 – Intro a Java

Page 19: Clase1 introduccinalcurso

¿Qué es Java?

>!Java es un lenguaje de programación orientado a objetos desarrollado a principios de los años 90.

>!El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel.

>!Es independiente de la plataforma. Las primeras implementaciones de Java rezaban:“write once, run anywhere”.

>!Posee un sistema de administración de memoria automático.

Page 20: Clase1 introduccinalcurso

Un poco de historia

>!Fue realizado por un equipo de 13 personas, dirigidas por James Gosling.

>!Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una estructura y sintaxis similar a C++.

Page 21: Clase1 introduccinalcurso

Un poco de historia (II)

>! Con esto en mente Gosling y su equipo crearon el navegador WebRunner y ralizarón un demo que mostraba una molecula animada en una reunión de profesionales de la industria del entretenimiento e Internet.

>! Todos sabemos como termina esta historia….

Page 22: Clase1 introduccinalcurso

¿Porqué JAVA?

>!El lenguaje se denominó inicialmente “Oak”. Luego pasó a denominarse “Green” tras descubrir que Oak era ya una marca comercial registrada.

>!El término “JAVA” fue acuñado en una cafetería frecuentada por algunos de los miembros del equipo.

>!No está claro si es un acrónimo o no, algunas hipotesis indican que podría tratarse de las iniciales de sus creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otras abogan por “Just Another Vague Acronym”.

>!La hipótesis que más fuerza tiene es la que Java debe su nombre a un tipo de café disponible en la cafetería.

Page 23: Clase1 introduccinalcurso

.java, . Class, JVM???

>!En Java el código fuente se escribe en un archivo de texto plano con extensión .java.

>!Luego, el código es compilado a archivos .class. Un archivo .class no contiene código nativo a un tipo de procesador, en cambio contiene bytecodes.

>!Finalmente, la aplicación es interpretada por la maquina virtual de Java, transformando los bytecodes en código nativo en tiempo de ejecución.

Page 24: Clase1 introduccinalcurso

Bytecode

>! El bytecode es lenguaje nativo de cualquier implementación de la maquina virtual de Java. De esta forma se logra que un programa Java corra en cualquier plataforma que disponga de una JVM.

Page 25: Clase1 introduccinalcurso

La plataforma Java

>!Una plataforma es el ambiente de software o hardware en el que corre un programa.

>!La plataforma Java consta de dos componentes >!La maquina virtual de Java

>!La API de Java (Application Programming Interface)

>!La API de Java es una vasta colección de componentes de software que proveen un conjunto de funciones útiles.

Page 26: Clase1 introduccinalcurso

Java en detalle:

Inicialización de variables

>!El lenguaje Java es fuertemente tipado, lo que significa que todas las variables deben ser declaradas antes de utilizarse.

int unaVariable = 1;

Page 27: Clase1 introduccinalcurso

Java en detalle:

tipos primitivos

Identificador Descripción Rango Valor por defecto

byte Entero con signo,

8 bits -128 a 127 0

short Entero con signo,

16 bits -32.768 a 32.767 0

Int Entero con signo,

32 bits -2.147.483.648 a 2.147.483.647 0

long Entero con signo,

64 bits -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807

0

Page 28: Clase1 introduccinalcurso

tipos primitivos (II)

Identificador Descripción Rango Valor por defecto

float Punto flotante, precision simple

Ver 32-bit IEEE 754 floating

point

0.0

double Punto flotante, precision doble

Ver 64-bit IEEE 754 floating

point.

0.0

boolean Valor booleano true o false false

char Caracter simple, 16 bits

'\u0000’ a '\uffff'

'\u0000'

Page 29: Clase1 introduccinalcurso

La clase String

Page 30: Clase1 introduccinalcurso

Operadores, precedencia y

funcionalidad

Operadores representación

Postfix expr++ expr--

Unarios ++expr --expr +expr -expr

~ !

Multiplicativos * / %

Aditivos + -

Desplazamientos << >> >>>

Relacionales < > <= >=

Igualdad == !=

Page 31: Clase1 introduccinalcurso

Operadores, precedencia y

funcionalidad (II)

Operadores representación

AND bit a bit &

OR exclusivo bit a bit ^

OR inclusivo bit a bit |

AND logico &&

OR logico ||

Ternario ? :

Asignación = += -= *= /= %= &= ^= |= <<= >>= >>>=

Page 32: Clase1 introduccinalcurso

Ejemplo con operadores

aritméticos

int i=2+3; // i vale 5

i=i+1; //i vale 6

i=6*2; //i vale 12

i=2+5*2%8; //i vale4

Page 33: Clase1 introduccinalcurso

Ejemplo con operadores postfix y

unarios

int i=5; // i vale 5

System.out.println(i); //Imprime:5

System.out.println(++i); //Imprime:6

System.out.println(i++); //Imprime:6

System.out.println(i); //Imprime:7

Page 34: Clase1 introduccinalcurso

Sentencias de control: if

if(expr){

....

}

if(expr)

sentencia;

if(expr){

....

} else {

....

}

Page 35: Clase1 introduccinalcurso

Sentencias de control: switch

Switch (num){

case num1:...break;

case num2:...break;

default:...break;

}

Page 36: Clase1 introduccinalcurso

Sentencias de control: while y do-while

do {

....

}while(expr);

while (expr){

....

}

Page 37: Clase1 introduccinalcurso

Sentencias de control: for

for (exprInic; condCorte; pasoSig) {

....

} for (int i=0; i<10; i++) {

System.out.println(i);

}//Imprime los números del 0 al 9

Page 38: Clase1 introduccinalcurso

Estructura de un programa Java

>! La programación orientada a objetos se basa en que cada programa es una simulación de un mundo real o virtual.

>! Cada uno de estos mundos esta compuesto de objetos. >! Los objetos se comunican a través de mensajes >! Por lo tanto, un programa orientado a objetos no es mas

que una configuración de un conjunto de objetos y los mensajes que se envían entre ellos.

>! El “molde” que guarda la descripción de todos los objetos de un mismo tipo e lo que conocemos como clase.

>!A su vez, las clases con propósitos similares pueden agruparse en paquetes.

>! La ejecución de un programa comienza en el método “main” de una clase.

Page 39: Clase1 introduccinalcurso

Ejemplo de paquete

!"#$%&'

($)*"+',-$)*.'

+&*+$*&%/%.&01'

!"#$%&'(

)'%*&+(#,)"'(

)'%*&+($,&$%&,#-#+,./(

!"#$%&'.#,)"'/(

0+$1,23%&'(

)'%*&+(&,)'-(

)'%*&+(&,)'4(

)'%*&+($,&$%&,#-#+,./(

0+$1,23%&'.&,)'-5(&,)'41'

6"3%#,7(

Page 40: Clase1 introduccinalcurso

Reglas para la creación de Clases y

paquetes

>!Las clases Java se implementan en archivos separados.

>!Cada clase se debe encontrar dentro de un paquete.

>!El nombre del archivo de la implementación de clase debe ser igual al nombre de la clase.

>!La estructura de paquete debe corresponderse a la estructura de directorio. Ej: edu.poo.Ejemplo seria mapeado al archivo .../edu/poo/Ejemplo.java

Page 41: Clase1 introduccinalcurso

Estructura de una clase

Page 42: Clase1 introduccinalcurso

Modificadores de Acceso - Visibilidad

Clase Paquete Subclase Otros

public ! ! ! !

private ! " " "

protected ! ! ! "

Default (sin modificador) ! ! " "

Page 43: Clase1 introduccinalcurso

SCJP 6

Clase 1 – Declaración y Control de Acceso

Page 44: Clase1 introduccinalcurso

Programación orientada a Objetos

>!Objeto

>!Atributos (Variables de instancia)

>!Comportamiento (métodos)

>!La clase es el molde del objeto.

>!Los objetos son instancias de una clase.

Page 45: Clase1 introduccinalcurso

Identificadores legales

>!Comienzan con una letra, ($), ( _ ). No pueden comenzar con un número.

>!Son case-sensitive.

>!No pueden utilizarse palabras clave de Java, incluyendo “enum”, agregada en java 5.0.

Page 46: Clase1 introduccinalcurso

Identificadores legales (II)

>!Clases e interfaces, la primera letra debe ser mayúscula. Por Ej: Account, PrintWriter.

>!En los métodos, la primera letra debe ser minúscula. Por Ej: getBalance ,doCalculation.

>!Para las variables, mismas reglas que para los métodos.

>!Constantes, MAYUSCULAS_SEPARADAS_POR_CARACTER_DE_SUBRAYADO.

Page 47: Clase1 introduccinalcurso

Declaración de clases y modificadores

>!Sólo puede haber una clase pública por archivo fuente.

>!Si la clase pertenece a un paquete, la declaración del mismo debe estar en la primera línea del archivo, antes de los imports.

>!Un archivo puede tener más de una clase no pública.

Modifiers class ClassName{

[class member]

}

ClassName: debe ser el mismo que el nombre del archivo (.java)

Page 48: Clase1 introduccinalcurso

Acceso por defecto

>!Puede pensarse como “acceso a nivel paquete”, ya que una clase con este nivel de acceso sólo puede ser vista por clases dentro del mismo paquete.

>!Ausencia de palabra clave.

Page 49: Clase1 introduccinalcurso

Acceso público

>!Una declaración de clase con la palabra clave “public” da a todas las clases de todos los paquetes acceso a dicha clase.

>!Pero, si la clase pública que estás intentando usar se encuentra en otro paquete, deberás importarla.

Page 50: Clase1 introduccinalcurso

Acceso privado

>!No puede accederse desde ninguna clase que no sea la clase donde fue declarado el miembro privado.

>!Palabra clave “Private”.

Page 51: Clase1 introduccinalcurso

Acceso Protegido

>!Similar al acceso por defecto. Un miembro declarado “Protected” puede ser accedido desde una subclase incluso si está en otro paquete.

>!El acceso por defecto y el protegido difieren sólo cuando hablamos de subclases.

Page 52: Clase1 introduccinalcurso

Pregunta

>!¿Compila?

package certification;

public class Parent {

protected int x = 9;

}

package other;

import certification.Parent;

class Child extends Parent {

public void testIt() {

System.out.println("x is " + x);

Parent p = new Parent();

System.out.println("X in parent is " + p.x);

}

}

Page 53: Clase1 introduccinalcurso

Modificadores Adicionales

>!Final

>!Abstract

>!Transient

>!Synchronized

>!Static

Page 54: Clase1 introduccinalcurso

Final

>!La palabra clave “Final” previene que un método, clase o variable sea sobrescrita en una subclase.

>!Varios de los métodos en las bibliotecas de clases principales no pueden ser sobrescritos.

Page 55: Clase1 introduccinalcurso

Abstract

>!Un método abstracto es un método declarado pero no implementado. Es decir, el método no posee código funcional.

>!Es ilegal tener incluso un único método abstracto en una clase que no se declare explícitamente como abstracta.

>!Cualquier clase que extienda una clase abstracta debe implementar todos los métodos abstractos de la superclase, o ser declarada abstracta también.

Page 56: Clase1 introduccinalcurso

Preguntas

>!¿Podríamos tener una clase abstracta sin métodos abstractos?

>!Si es así, ¿Porqué no declaramos las clases como abstractas siempre?

>!Las clases abstractas, ¿Pueden tener un constructor?

Page 57: Clase1 introduccinalcurso

Pregunta

public abstract class Vehicle {

private String type;

public abstract void goUpHill();

public String getType(){ return type; }

}

public abstract class Car extends Vehicle {

public abstract void goUpHill();

public abstract void goDownHill(int speed) { }

public void doCarThings() { } }

public class Mini extends Car { … }

>!¿Qúe métodos debería sobrescribir Mini?

Page 58: Clase1 introduccinalcurso

Métodos con listas de argumentos

variables (var-args)

>!Desde la versión 5.0, Java permite crear métodos con un número variable de argumentos.

>!Cuando declaramos un parámetro var-arg debemos especificar el tipo de los argumentos que este parámetro podrá recibir (puede ser primitivo u objetos).

Page 59: Clase1 introduccinalcurso

Var-args (II)

>!La sintaxis básica para declarar un método usando un parámetro var-arg es: nombreDelTipo… nombreDelArregloQueContendráLosParametros

>!Puede haber otros parámetros en un método que posee un parámetro con var-args, siempre y cuando solo uno sea variable, y el mismo sea el último declarado en la signatura del método.

Page 60: Clase1 introduccinalcurso

Var-args (III)

>!Legal: void doStuff(int... x) { } //0 a varios ints.

void doStuff2(char c, int... x) { } //primero un

char, luego entre 0 y varios ints.

void doStuff3(Animal... animal) { }

>!Ilegal: void doStuff4(intx...) { } // sintaxis incorrecta

void doStuff5(int... x, char... y) { } // demasiados

var-args.

void doStuff6(String... s, byte b) { } // var-arg

debe estar al final.

Page 61: Clase1 introduccinalcurso

Pregunta

1. class Voop {

2. public static void main(String [] args) {

3. doStuff(1);

4. doStuff(1,2);

5. }

6. // punto de inserción

7. }

>!¿Cúal de estas líneas compila al colocarla en la línea 6? >! A. static void doStuff(int... doArgs) { }

>! B. static void doStuff(int[] doArgs) { }

>! C. static void doStuff(intdoArgs...) { } >! D. static void doStuff(int... doArgs, inty) { }

>! E. static void doStuff(intx, int... doArgs) { }

Page 62: Clase1 introduccinalcurso

Declaración de constructores

>!En Java, los objetos son construidos. Cada vez que “hacemos” un nuevo objeto, al menos un constructor es invocado.

>!Cada clase tiene un constructor. Incluso si no creamos uno, el compilador lo hará por nosotros.

>!Pueden recibir argumentos (incluido var-args), pero no pueden tener un valor de retorno.

>!La otra regla importante, es que los constructores deben tener el mismo nombre que las clases en las que son declarados.

Page 63: Clase1 introduccinalcurso

Declaración de variables

>!Hay ocho tipos primitivos: char, boolean, byte,short, int, long, double, or float. Una vez declarado, el tipo de un primitivo no puede ser cambiado.

>!Referencias: una variable de referencia es usada para acceder al lugar en memoria donde se almacena un objeto. Array, Collection y String, son variables de referencia.

Page 64: Clase1 introduccinalcurso

Modificadores en variables,

métodos y clases

Variables locales Variables no locales

Métodos Clases

final final

public

protected

private

static

transient

volatile

final

public

protected

private

static

abstract

synchronized

strictfp

native

public

final

abstract

strictfp

Page 65: Clase1 introduccinalcurso

Declaración de Enums

>!Una practica común en programación es tener un conjunto finito de nombres simbólicos que representan los valores de un atributo.

>!Enum == Class.

>!Ejemplo.

enumGrade{

A,B,C,D,F

}; // el punto y coma es opcional

Page 66: Clase1 introduccinalcurso

Declaración de Enums (II)

>!Los enums pueden ser declarados como una clase separada, o como miembro de una clase, pero no pueden ser declarados dentro de un método.

>!Declarar un enum fuera de una clase:

enum CoffeeSize{

BIG, HUGE, OVERWHELMING

}

class Coffee {

CoffeeSizesize;

}

Page 67: Clase1 introduccinalcurso

Declaración de Enums (III)

>!Declarar un enum dentro de una clase

class Coffee {

enumCoffeeSize{

BIG, HUGE, OVERWHELMING

}

CoffeeSize size;

}

Page 68: Clase1 introduccinalcurso

Declaración de Enums (IV)

>!Lo que tendrían que saber es:

enum Grade{

A,B,C,D,F

public static final Grade A = new Grade(“A”,0);

};

>!Y hay que usarlo así: public class Student{

private Grade grade= Grade.A;

}

Page 69: Clase1 introduccinalcurso

Declaración de Enums (V)

>!Esto es ilegal:

public class CoffeeTest1 {

public static void main(String[] args{

enumCoffeeSize{ BIG, HUGE, OVERWHELMING }

//¡MAL!

//no pueden declararse enums dentro de métodos.

Coffee drink = new Coffee(); drink.size =

CoffeeSize.BIG;

}

}

Page 70: Clase1 introduccinalcurso

Declaración de constructors, métodos y

variables en un Enum

enum CoffeeSize{

BIG(8), HUGE(10), OVERWHELMING(16);

CoffeeSize(int ounces) {

this.ounces= ounces; // asigna el valor a

//una variable de instancia.

}

private int ounces; // una variable de

//instancia que tiene

//cada valor del enum.

public int getOunces() { return ounces; }

}

Page 71: Clase1 introduccinalcurso

Declaración de constructors, métodos y

variables en un Enum (II)

Coffee drink1= new Coffee();

drink1.size = CoffeeSize.BIG;

Coffee drink2= new Coffee();

drink2.size = CoffeeSize.OVERWHELMING;

System.out.println(drink1.size.getOunces());

// imprime 8

System.out.println(drink2.size.getOunces() ());

// imprime 16

Page 72: Clase1 introduccinalcurso

Declaración de constructors, métodos y

variables en un Enum (III)

Enum CoffeeSize{

BIG(8),HUGE(10),OVERWHELMING(16) {

public String getLidCode() { return "A"; }

}; // el punto y coma es obligatorio

CoffeeSize(int ounces){this.ounces = ounces; }

private int ounces;

public int getOunces() { return ounces; }

public String getLidCode(){

return "B"; // el valor por defecto

}

}

Page 73: Clase1 introduccinalcurso

Pregunta

>! Dado:

1. enumA { A }

2. class E2 {

3. enumB { B }

4. void C() {

5. enumD { D }

6. } }

>! ¿Cuales de las siguientes afirmaciones son ciertas? >! A. compila.

>! B. Si sólo sacamos la línea 1, compila.

>! C. Si sólo sacamos la línea 3, compila.

>! D. Si sólo sacamos la línea 5, compila.

>! E. Si sacamos las líneas 1 y 3, compila.

>! F. Si sacamos las líneas 1, 3 y 5, compila.

Page 74: Clase1 introduccinalcurso

Preguntas


Top Related