PROGRAMACIÓN ORIENTADA A
OBJETOS
1. Conceptos fundamentales de Programación
Orientada a Objetos
Ing. Karla Abad Sacoto, Docente CISC - Software
Introducción a la Programación Orientada a Objetos
¿¿ Por qué POO??
Una manera más natural ………………
La programación orientada a objetos trata de amoldarse al
modo de pensar del hombre y no al de la máquina.
Estamos hablando de una nueva forma de pensar acerca del
proceso de descomposición de problemas y de desarrollo de
soluciones de programación
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Introducción a la Programación Orientada a Objetos
Un lenguaje orientado a objetos es un
lenguaje de programación que permite el
desarrollo de aplicaciones orientadas a
objetos. Ejemplos:
Ada, C++, C#, [Link], Java, Objective-
C, PHP, Python, Ruby y Smalltalk.
Primero se debe adquirir la forma de
pensar es decir la “filosofía” orientada a
objetos y aprender después el lenguaje.
Ing. Karla Abad Sacoto, Docente CISC - Software
Introducción a Java
¿Qué es Java?
Java
es un lenguaje de programación y una plataforma informática
comercializada por primera vez en 1995 por Sun Microsystems.
Java salió al mercado en 1995. Su fundador fue James Gosling.
En Diciembre de 1998, Sun MicroSystems anunció la plataforma Java 2.
En el 2010, Sun MicroSystems fue adquirido por Oracle.
Actualmente sus librerias se encuentra en la versión 17.
([Link]
Ing. Karla Abad Sacoto, Docente CISC - Software
Introducción a Java.
Es necesario distinguir claramente entre dos partes muy
diferenciadas dentro de la plataforma Java:
JRE (Java Runtime Environment): aporta con el entorno
necesario para ejecutar una aplicación Java. Forman parte del
JRE la máquina virtual Java o JVM (Java Virtual Machine),
encargada de ejecutar el bytecode Java, así como las
bibliotecas que ofrecen los servicios definidos en la plataforma.
JDK (Java Development Kit): es el paquete de herramientas
precisas para llevar a cabo el desarrollo de dicha aplicación.
Este JDK agrega herramientas como el compilador Java. Este
toma el código fuente Java y genera como resultado bytecode,
un formato de código objeto independiente del sistema
operativo y el hardware.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Introducción a Java.
Existen 3 ediciones de JAVA:
Java SE: la conocida como Standard Edition es
la edición más difundida de la plataforma Java.
Incorpora los elementos necesarios para crear
aplicaciones de escritorio con o sin interfaz
gráfica de usuario. JavaFX forma parte de Java
SE desde la versión 7 de dicha edición de la
plataforma.
Java EE: es la Enterprise Edition de la
plataforma Java, dirigida al desarrollo de
soluciones software que se ejecutarán en un
servidor de aplicaciones (web). A las
capacidades de Java SE, la edición EE agrega
servicios para gestionar la persistencia de
objetos en bases de datos, hacer posible la
invocación remota de métodos, crear
aplicaciones con interfaz de usuario web, etc.
Java ME: esta edición de la plataforma, Micro
Edition, está enfocada a la creación de
programas que se ejecutarán en sistemas con
recursos limitados, tales como teléfonos
móviles, electrodomésticos y dispositivos de
domótica o equipos para entornos [Link]
Karla Abad Sacoto, Docente CISC - Software
como la Rasperry Pi y similares.
Introducción a Java.
Java: Proceso de compilación
En el proceso de compilación, el compilador JAVA
genera un código independiente de la plataforma,
código bytecode
Bytecode es una especie de lenguaje de máquina de una
máquina virtual de JAVA
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Introducción a Java.
Java: Proceso de
ejecución Máquina Virtual de Java (JVM)
.
En el proceso de ejecución, la Java
Virtual Machine (JVM) interpreta el
Bytecode para generar el código
de máquina según la
arquitectura y sistema operativo
sobre el cual se encuentra.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Introducción a Java.
La siguiente figura ilustra de manera visual la
relación existente entre los diferentes
componentes de la plataforma Java
En el lenguaje JAVA, el compilador traduce los fuentes
a bytecode, y el intérprete de JAVA, que en realidad
interpreta bytecode.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Java Multiplataforma
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Introducción Java
Sintaxis, tipos de datos y
variables
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Tipos de datos primitivos
El lenguaje Java define 8 tipos de datos
primitivos o simples:
Datos de tipos numéricos
Números enteros: byte, short, int, long
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Tipos de datos primitivos
Datos de tipos numéricos
Número con punto flotante: float, double
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Tipos de datos primitivos
Datos de tipo caracter
Char
Datos de tipo lógico
boolean
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Operadores aritméticos
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Caracteres especiales (secuencias de escape)
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Operadores Lógicos
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Variables
Java es un lenguaje "fuertemente tipado o tipificado“.
Es necesario especificar el tipo de dato para cada
una de las variables.
El tipo de una variable determina los valores que
puede almacenar y las operaciones que se pueden
hacer sobre ella.
Para dar a una variable un tipo:
TipoDato nombreVariable;
Ej. String nombre; // variable de tipo String
int edad; // variable de tipo int
Punto p; // variable del tipo Punto
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Identificadores válidos de variables
• Pueden empezar con una letra, un signo de dólar ($) o un
subguión. No pueden empezar con un número.
• Después del primer caracter, pueden contener cualquier
combinación de letras, símbolos especiales y números.
• En la práctica no hay límite para el número de caracteres
que puede contener un identificador.
• No puede utilizarse un keyword de Java como identificador.
• Son case sensitive. Es decir: mes y MES son dos
identificadores diferentes;
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Identificadores de variables
int $c;
int :b;
int -d; Existen 4
identificadores
int _$; correctos
int e#;
int ______2_w;
int .f;
int 7g;
Int
this_is_a_very_detailed_name_for_an_identifie
r;
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Keywords
• Son palabras reservadas especiales que no pueden ser
utilizadas como identificadores (nombres) para clases,
métodos o variables.
• En Java existen dos palabras que son reservadas pero
que no son utlizadas: const y goto.
• El uso de null, true y false como identificadores está
prohibido a pesar de no ser consideradas palabras
reservadas sino valores literales.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA
Keywords
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Literales Boolean
Un boolean puede ser definida solo como true o false.
OJO: No se pueden asignar números en vez de valores boolean. Ni
ponerlos en lugares en donde un boolean es requerido.
Eje:
boolean b1 = true;
boolean b2 = 1;
int x=1;
if ( x ) {
}
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Literales Caracteres
Es representado por un caracter entre comillas simples. También
se lo puede escribir en el valor Unicode del carácter.
Eje:
char a = 'a';
char N = '\u004E';
Recordar que un entero es solo un número sin signo de 16 bits.
Lo que significa que puede ser un numero de 0 a 65535.
char d = 0x64;
char A = 65;
char f = (char)70000;
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Literales Caracteres
Valores de Literales String
Se los representa en la forma más sencilla con comillas dobles.
Eje:
String string = “hola”;
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Operadores de incremento y
decremento
Para aumentar o disminuir en 1 una variable entera
(resulta útil especialmente en ciclos).
i++; //incremento después. Da el valor de i y luego le suma 1
++i; //incremento antes. Suma 1 a i y luego da el valor de i
i--; //incremente después. Da el valor de i y luego le resta 1
--i; //incremente antes. Le resta 1 a i y luego da el valor de i
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Operadores de incremento y decremento
++ incremento (prefix and postfix)
-- decremento (prefix and postfix)
Nota que en la tercera línea del programa el operador de incremento
está después de la variable players. Eso significa que se está
utilizando el operador de incremento postfix, el cual causa que la
variable players se incremente por uno ,pero solo después de que el
valor de player se use en la expresión. Está será la salida del
programa:
players online: 0
The value of players is 1
The value of players is
[Link] 2 Sacoto, Docente CISC - Soft
Karla Abad
ware
Sentencias comunes
Operadores lógicos
La evaluación de una expresión lógica se detiene
en cuanto se determina el valor lógico de toda la
expresión.
&&; //Operador lógico y
|| //Operador lógico o
! //Operador lógico no
^ //Operador lógico xo
Los operadores && y || evaluan solo valores
booleanos. Para que una expresión (&&) sea
verdadera, ambos operandos deben ser
verdaderos.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Operadores de Asignación Compuestos
Existen 11 operadores de asignación
compuestos, pero solo 4 son los más usados
(+=, -=, *=, /=),
y = y - 6;
x = x + 2 * 5;
Ahora, con operadores compuestos:
y -= 6;
x += 2 * 5;
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Operadores de Asignación Compuestos
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Operadores de igualdad
== equals
!= not equals
No se puede comparar tipos incompatibles.
Hay 4 tipos diferentes de cosas que pueden ser
comparadas:
números
caracteres
booleanos
Variables de referencia a Objetos
El operador == analiza el valor en la variable, en otras
palabras ,el patrón de bits.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Operador concatenación de String
String n=“Karla”;
String ap =“Abad”;
String nombreCompleto = n + “ ” + ap; // Karla Abad
int n1=2;
int n2 =3;
int n3 = n1+n2; // 5
String a = “Hola";
int b = 3;
int c = 7;
[Link](a + b + c);
// a+b //”Hola” + 3// “Hola3”
// “Hola3” +7 //”Hola37”
[Link](a + (b + c));
b+c//3+7// 10
Sin embargo, si se coloca parentesis alrededor
“Hola” +10 // Hola10
de las dos variables:
[Link](a + (b + c));
you'll get this: String10
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Operador Condicional
El operador condicional es un operador
ternario y es usado para evaluar
expresiones booleanas.
x = (expresión booleana) ? valor asignado si es
verdadero: valor asignado si es falso
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Operadores lógicos ^ and !
^ exclusive-OR (XOR)
! boolean invert
El operador ^ (exclusive-OR) evalúa solo
valores booleanos. Revisa siempre
ambos lados de la operación.
Para que una expresión que usa el
operador exclusive-OR (^) sea verdadera,
exactamente un operando debe ser
verdadero—por ejemplo,
[Link]("xor " + ((2<3) ^
(4>3)));
produce la salida: xor
Ing. Karla Abad
ware
false
Sacoto, Docente CISC - Soft
Operadores lógicos ^ and !
El operador ! (boolean invert) retorna el
valor booleano opuesto al actual:
• if(!(7 == 5)) { [Link]("not
equal"); }
Puede ser leído "if it's not true that 7 == 5," y
produce la salida: not equal
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Sentencias comunes
Simples: es la instrucción terminada con un
punto y coma (;)
Ejemplos: boolean esEmpleado = true;
[Link]("El primer
programa");
Compuestas: cero o más sentencias agrupadas
con { y }
Ejemplo:
public static void main(String[] args) {
Bloque de //imprime un mensaje
código String mensaje="El primer programa";
[Link](mensaje);
}
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Sentencias comunes
Condicionales
If if(condicion)
sentencia 1;
Sintaxis:
else if
sentencia 2;
else
otra sentencia;
Ejemplo:
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Sentencias comunes
Condicionales
Switch-case
Sintaxis:
switch (variable) {
case <posible valor> :
Instrucciones ; break; case <posible valor>
: Instrucciones ; break; case <posible valor>
: Instrucciones ; break; case <posible valor>
: Instrucciones ; break; case <posible valor>
: Instrucciones ; break; default :
Instrucciones ;
}
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Sentencias comunes
Condicionales
Switch-case
// SENTENCIA SWITCH-CASE
Ejemplo: int dia =5;
switch (dia) {
case 1: [Link]("Lunes");
break;
case 2: [Link]("Martes");
break;
case 3: [Link]("Miercoles");
break;
case 4: [Link]("Jueves");
break;
case 5: [Link]("Viernes");
break;
case 6: [Link]("Sabado");
break;
case 7: [Link]("Domingo");
break;
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Sentencias comunes
Lazos
while
Sintaxis:
while(condicion) {
sentencias;
}
Eemplo:
int num =3;
while (num> 0){
[Link](“Numero: " +
num+ "\n");
num--;
}
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Sentencias comunes
Lazos
Do-while
Sintaxis:
do{
sentencias;
} while(condicion) ;
Eemplo:
int num =3;
do{
[Link](“Numero: " +
num+ "\n");
num--;
} while (num> 0);
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Sentencias comunes
Lazos
For
Sintaxis:
for(inicio ; condicion de terminación ;
incremento){
sentencias;
};
Eemplo:
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
JAVA Arrays
• Son objetos que sirven para almacenar múltiples variables del mismo tipo o
que sean todas subclases del mismo tipo.
• Pueden almacenar primitivos o referencias a objetos.
Declaraciones de Arrays
• Declaración de arrays de primitivos:
int[] key; // Corchetes antes del nombre (recomendado)
int key []; // Corchetes después del nombre (legal pero menos leíble)
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Declaraciones de Arrays Multidimensionales
• Pueden declararse arrays multidimensionales (arrays de arrays), de la
siguiente forma:
String[] [] [] occupantName;
String[] ManagerName []; // Legal, pero muy feo y no entendible.
Es recomendable seguir los consejos dados anteriormente en cuanto a
la declaración de los arreglos para que puedan ser leídos y entendido
mas fácilmente.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Declaraciones de Arrays
Es ilegal incluir el tamaño del array en su declaración.
La razón es que la JVM, no reserva espacio hasta que realmente se
instancie el array de objetos.
int[5] scores;
Con respecto a lo declarado, recuerden que esto nunca compilará,
ya que java hace la reservación de memoria solo en el momento de
la instanciación.
Construyendo un arreglo
En el momento de la creación es donde se especifica el tamaño del
arreglo para poder alojarlo en la memoria.
int[] scores = new int [5];
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Construyendo Arreglos Multimensionales
Un arreglo multidimensional es un simple arreglo de arreglos.
Así, un arreglo bidimensional de enteros es un objeto de tipo arreglo
de enteros done cada uno de sus elementos es otro arreglo.
Ejemplo:
int [][] arreglo = new int[3][];
arreglo[0] = new int[3];
arreglo[0][0] = 0;
arreglo[0][1] = 1;
arreglo[0][2] = 2;
arreglo[1] = new int[2];
arreglo[1][0] = 3;
arreglo[1][1] = 4;
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Declarando, Construyendo e Inicializando en una línea
(Atajo 1)
int[] casas = {3,6,9};
Esta línea:
• Declara una referencia de arreglo de enteros llamado casas.
• Crea un arreglo de longitud tres.
• Lo llena con los valores: 3,6 y 9.
• Asigna el arreglo creado a la referencia de arreglo llamada
casas.
Aquí salta una pregunta, porque no solo se usa esta manera para
crear los arreglos y la respuesta es que puede que al momento de
crear el arreglo no se sepa el tamaño final.
Para un arreglo de objetos se lo hace de la misma manera.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Declarando, Construyendo e Inicializando en una línea
Para arreglos multidimensionales
int[][] casas = { {1,2} , {3,4,5} , {6,7,8} };
Aquí se esta creando un arreglo de arreglos, cada uno de los
elementos creados es un arreglo, en donde el tamaño de estos en el
número de elementos que tienen.
Se ha creado 4 objetos aqui, el primer objeto creado es el arreglo de
arreglos, luego el primer elemento dentro del arreglo tiene un
tamaño de 2, el segundo 3 y el tercero 4, y cada uno de estos son
objetos.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Inicializando arreglos
A two-dimensional array (an array of arrays) can be initialized as follows:
int[][] scores = new int[3][];
// Declara y crea un arreglo que contiene 3 referencias a arreglos de enteros
scores[0] = new int[4];
//El primer elemento en un arreglo de enteros de tamaño 4
scores[1] = new int[6];
//El segundo en un arreglo de enteros de tamaño 6
scores[2] = new int[1];
//El tercero es un arreglo de enteros de tamaño 1
Inicializando arreglos en un lazo
Los arreglos tienen un único atributo publico: length, que da el
número de elementos del arreglo.
String[] misPerros = new String[5];
for (int i=0; i<[Link] ;i++){
misPerros[i] = “Perrito ” + i;
}
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Alcance de variables
El alcance de una variable indica la parte del programa
donde puede utilizarse. En base al alcance, las
variables se clasifican en:
Variables locales
Variables globales (de instancia)
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Alcance de Variables
Variables locales
Se declaran dentro de métodos o de
instrucciones asociadas a bucles for,
estructuras condicionales, etc.
Su alcance se restringe al bloque de código
del método o de la instrucción.
Deben estar inicializadas antes de ser
empleadas.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Alcance de Variables
Variables locales
Ejemplo:
/** La variable entera j es local pues está
declarada e inicializada dentro de un bucle
for. Si se usa fuera del código del for se
producirá un error de compilación */
for(int j=0;i<=5;i++){
[Link](j);
[Link](“ Repeticion "+j);
}
[Link](j+1);
//Línea que provoca error de
Este código producirá la salida ????
compilación.
//Acceso incorrecto a una variable
local
[Link](j+1);
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Alcance de Variables
Variables de instancia (o globales)
Se declaran después de la clase y fuera de cualquier
método. Los valores que asumen para cada objeto
(instancia) constituyen el estado o conjunto de atributos
del objeto.
Su alcance es global, es decir, las pueden utilizar
directamente todos lo métodos no estáticos de la clase.
Para acceder desde el método main o
desde cualquier otro método estático a una variable de
instancia es necesario crear un objeto de la clase.
Al hecho de crear un objeto de una clase se le conoce
también como instanciar la clase. Si no se inicializan
explícitamente, asumen el valor nulo o su valor literal por
defecto, una vez instanciada la clase.
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Alcance de Variables: Variables de
instancia
Estándar de programación
– Las variables de instancia se inicializan con
valores por defecto:
– Variables numéricas se establecen en cero
– Variables booleanas se establecen en false
– Variables de referencia a objetos se establecen en null
– Todas las variables locales serán declaradas al
comienzo del cuerpo de un método.
– Inicializar las variables locales antes de utilizarlas
(no se inicializan por defecto como las de la
clase).
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Alcance de Variables: Variables de
instancia
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware
Ing. Karla Abad Sacoto, Docente CISC - Soft
ware