SlideShare a Scribd company logo
1 of 198
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
0
07/06/2022
Introducción a la
Programación Orientada a
Objetos
Unidad 1
Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo
para uso de los cursos de Programación Orientada a Objetos
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
1
07/06/2022
Objetivo general de la Unidad 1
Expresar entidades del mundo real en clases, objetos,
atributos y métodos utilizando un lenguaje de
programación orientado a objetos.
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
2
07/06/2022
Contenido
▪ Introducción al Lenguaje de Programación Orientada a
Objetos y Plataformas de desarrollo.
▪ Variables, Tipos de datos, Operadores y alcance
▪ Sentencias, Uso de bucles (for, while, do while) y
condicionales (if, switch)
▪ Arreglo de tipos de datos simples
▪ Conceptos Básicos de POO: abstracción, clases, objetos,
atributos, métodos, operador this, parámetros por valor y
referencia.
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
3
07/06/2022
Un sistema es…
▪ Un conjunto de elementos que interactúan entre sí
▪ Una Universidad es un sistema en la que las personas
interactúan entre sí
▪ En un sistema Orientado a Objetos los elementos toman el
nombre de “Objetos”
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
4
07/06/2022
Topología de un
sistema estructurado
Topología de un sistema orientado a
objetos
Modelado Estructurado vs O-O
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
5
07/06/2022
Un sistema Orientado a Objetos es ...
...como una empresa
Gerente General
Los colaboradores
del gerente
Los colaboradores
de los colaboradores
del gerente
Algunas personas tienen
la misma función
colaboraciones
Ph.D. Franklin Parrales 6
07/06/2022
Programación Orientada a Objetos Carrera de Software
Características del lenguaje Java
✓ Sencillo (en comparación con su predecesor C++).
Sin punteros.
Sin herencia múltiple (interfaces).
Gestión automática de la memoria dinámica (garbage collector).
Sintaxis sencilla (pocas construcciones de programa).
✓ Orientado a objetos.
Programación híbrida o mixta (clases + tipos).
✓ Distribuido.
Las clases pueden estar ubicadas en distintas máquinas de la red.
Ph.D. Franklin Parrales 7
07/06/2022
Programación Orientada a Objetos Carrera de Software
Características del lenguaje Java
✓ Interpretado.
Ph.D. Franklin Parrales 8
07/06/2022
Programación Orientada a Objetos Carrera de Software
Características del lenguaje Java
✓ Independiente de la plataforma.
Ph.D. Franklin Parrales 9
07/06/2022
Programación Orientada a Objetos Carrera de Software
Características del lenguaje Java
✓ Robusto (fiable).
Sin construcciones peligrosas (punteros).
Manejo de excepciones.
✓ Seguro.
Mecanismos de seguridad que protegen el sistema.
✓ Portable.
✓ Multihebra.
Ph.D. Franklin Parrales 10
07/06/2022
Programación Orientada a Objetos Carrera de Software
Características del lenguaje Java
✓ Rendimiento de Java:
Menor que otros lenguajes como C++.
Mejor con cada nueva versión de la JVM.
Tecnología JIT (Just-in-Time Compilation):
Java Bytecode Java Bytecode
Compiler
Native Machine Code
Ph.D. Franklin Parrales 11
07/06/2022
Programación Orientada a Objetos Carrera de Software
Herramientas de desarrollo
java (Máquina Virtual)
javac (Compilador a bytecode)
javadoc (Documentador)
jdb (Depurador de consola)
clases java.*
Documentación
JDK - Java Development toolKit
Modelado visual
Depuración
Rapidez de desarrollo
Entornos RAD
JBuilder
Visual Cafe
Forte
JCreator …
Instalación
del JDK
Ph.D. Franklin Parrales 12
07/06/2022
Programación Orientada a Objetos Carrera de Software
Tecnologías Java
Servlets Java Server Pages
Aplicaciones web
JDBC
Conexión con bases de datos
Applets
W W W
Java3D Java2D
Programación de gráficos
Enterprise JavaBeans
RMI
Programación distribuida
CORBA
AWT
Programación de interfaces gráficas
Swing
JavaBeans JNI
Programación en general
java.*
JINI
Sistemas empotrados
JavaSpaces
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
13
07/06/2022
IDEs
Ph.D. Franklin Parrales 14
07/06/2022
Programación Orientada a Objetos Carrera de Software
El típico primer programa: HolaMundo.java
HolaMundo.java
// HolaMundo.java
public class HolaMundo
{
public static void main(String[] args)
{
System.out.println("Hola mundo");
}
}
Comentarios (en verde)
Palabras reservadas (en azul)
Cadenas de caracteres
Objetos
Ph.D. Franklin Parrales 15
07/06/2022
Programación Orientada a Objetos Carrera de Software
El típico primer programa: HolaMundo.java
✓ Las clases pueden ser públicas o privadas.
✓ En cada archivo fuente debe haber una sola clase pública
y ha de llamarse igual que el archivo fuente.
✓ Alguna clase del programa debe tener el método main(),
que es con el que comienza la ejecución.
HolaMundo.java
// HolaMundo.java
public class HolaMundo
{
public static void main(String[] args)
{
System.out.println("Hola mundo");
}
}
Ph.D. Franklin Parrales 16
07/06/2022
Programación Orientada a Objetos Carrera de Software
¿Cómo es el programa?
✓ Dejando aparte el comentario inicial,
lo que tenemos es una definición de una clase:
public class HolaMundo
{
...
}
Es una clase pública (accesible desde fuera del paquete).
✓ Dentro de la clase se define un único método:
public static void main(String[] args)
{
System.out.println("Hola mundo");
}
También el método es público. Es un método de clase (static)
y no devuelve nada (void).
Ph.D. Franklin Parrales 17
07/06/2022
Programación Orientada a Objetos Carrera de Software
¿Qué hace el programa?
✓ Se ejecuta el método main():
public static void main(String[] args)
{
System.out.println("Hola mundo");
}
El método está preparado para aceptar argumentos de línea
de órdenes, pero en este caso no hacemos nada con ellos.
✓ Tan sólo se pasa un mensaje:
System.out.println("Hola mundo");
El objeto estático out de la clase System recibe el mensaje
println() con la cadena que se quiere mostrar.
El objeto out representa la pantalla,
lugar donde se imprime la cadena.
Ph.D. Franklin Parrales 18
07/06/2022
Programación Orientada a Objetos Carrera de Software
Compilación y ejecución del programa
✓ Se puede compilar el programa con javac,
el compilador de línea del JDK.
Se crean tantos .class como clases haya.
✓ Una vez que hemos compilado el código fuente,
podemos ejecutar el método main() con java,
el intérprete de Java que hay en el JDK.
✓ El compilador debe poder encontrar las bibliotecas
con las clases utilizadas (CLASSPATH).
Ph.D. Franklin Parrales 19
07/06/2022
Programación Orientada a Objetos Carrera de Software
Compilación y ejecución del programa
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
20
07/06/2022
Contenido
▪ Introducción al Lenguaje de Programación Orientada a
Objetos y Plataformas de desarrollo.
▪ Variables, Tipos de datos, Operadores y alcance
▪ Sentencias, Uso de bucles (for, while, do while) y
condicionales (if, switch)
▪ Arreglo de tipos de datos simples
▪ Conceptos Básicos de POO: abstracción, clases, objetos,
atributos, métodos, operador this, parámetros por valor y
referencia.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 21
07/06/2022
Un par de cosas sobre las clases
✓ Un programa está compuesto por un conjunto de clases
(al menos una). Las clases son los módulos del programa.
✓ Una clase consiste en unos datos (atributos) y unas funciones
(métodos). Debe haber un método main() en una de las clases.
Una plantilla para los primeros programas de prueba:
// Programa.java
public class Programa {
// Declaraciones globales
public static void main(String[] args) {
// Declaraciones locales
// Instrucciones
}
}
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 22
07/06/2022
Comentarios
✓ Tres tipos de comentarios:
// De una sola línea
/* De una ó
más líneas
*/
/** De documentación, de una o varias líneas.
Justo antes del elemento que documenta
(clase, método, etcétera)
*/
✓ Los comentarios de documentación son utilizados por javadoc para
generar documentación en formato HTML.
Pueden llevar etiquetas.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 23
07/06/2022
Comentarios: etiquetas para javadoc
✓ Etiquetas para referencias:
@see <otra clase>
✓ Etiquetas de documentación de clases:
@version <información sobre la versión>
@author <nombre autor>
✓ Etiquetas de documentación de métodos:
@param <nombre argumento><descripción>
@return <descripción>
@exception <excepción
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 24
07/06/2022
Comentarios: ejemplo de uso de javadoc
HolaMundo.java
// Hola.java
/** Primera clase de prueba
@author Franklin Parrales
@version 1.0
@see Adios
*/
public class HolaMundo {
/** Método principal
@param args argumentos de línea de órdenes
@return nada
*/
public static void main(String[] args) {
System.out.println("Hola mundo");
}
}
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 25
07/06/2022
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 26
07/06/2022
Comentarios: resultado de javadoc
javadoc HolaMundo.java
HolaMundo.html
y otras páginas más.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 27
07/06/2022
Identificadores
✓ En Java, un identificador comienza con una letra,
un subrayado (_) o un símbolo de dólar ($).
Los siguientes caracteres pueden ser letras o dígitos.
Convenios:
✓ Nombre de clase: empieza por mayúscula..
✓ Nombre de método o atributo: empieza por minúscula
(quizá con un subrayado delante para los atributos).
✓ Las constantes: todo en mayúsculas.
✓ Identificadores formados por varias palabras: comienzo de cada
nueva palabra en mayúsculas (dibujaRectangulo)
Java distingue entre mayúsculas y minúsculas
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 28
07/06/2022
Palabras reservadas
abstract continue for new switch
boolean default goto null synchronized
break do if package this
byte double implements private threadsafe
byvalue else import protected throw
case extends instanceof public transient
catch false int return true
char final interface short try
class finally long static void
const float native super while
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 29
07/06/2022
Separadores
() Para delimitar listas de parámetros o de argumentos.
Para modificar la precedencia en una expresión.
Para delimitar condiciones.
Para realizar conversiones de tipo (moldes o casting).
{} Para definir bloques de código.
Para delimitar listas de valores iniciales de los vectores (arrays).
[] Para declarar vectores y referenciar elementos de los mismos.
; Para terminar instrucciones.
, Para separar identificadores en declaraciones.
Para encadenar expresiones (operador coma).
. Para acceder a atributos de objetos u objetos globales de clases.
Para pasar mensajes a objetos.
Para acceder a un subpaquete de un paquete.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 30
07/06/2022
Tipos de datos numéricos
Tipo
byte
short
int
long
float
double
Tamaño
8 bits
16 bits
32 bits
64 bits
32 bits
64 bits
Valor mínimo
-128
-32768
-2147483648
< -9 x 1018
+/- 3.4 x 1038 con 7 dígitos significativos
+/- 1.7 x 10308 con 15 dígitos significativos
Valor máximo
127
32767
2147483647
> 9 x 1018
Promoción de tipos
Un tipo A es de mayor rango que un tipo B si A es superconjunto de B.
Las variales de tipo B siempre se pueden asignar a las de tipo A
double > float > long > int > short > byte
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 31
07/06/2022
Tipos de datos no numéricos
boolean: true false
char: caracteres (16 bits)
Clases envolventes de tipos básicos:
Integer Long Float
Double Boolean Character
Permiten manipular los tipos primitivos como objetos
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 32
07/06/2022
Literales
✓ Numéricos: como en otros lenguajes.
Para que una constante sea long y no int, se añade una L (29L).
Para que una constante sea float y no double, se añade una F.
✓ Literales de carácter: entre comillas simples ('a').
Ciertos caracteres especiales se pueden representar utilizando
secuencias de escape:
n para un salto de línea (u000A).
t para un tabulador (u0009).
b para un retroceso (u0008).
r para un retorno de carro (u000D).
✓ Literales de cadenas de caracteres: entre comillas dobles
"Hola mundo"
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 33
07/06/2022
Variables: declaración
tipo nombre;
tipo nombre = expresión; // inicialización
tipo nombre1, nombre2,...;
tipo nombre1 = exp1, nombre2 = exp2, ...;
long suma = 234;
int altura = 23, ancho = 45;
double resultado = 0.0;
float area = 23 * 45;
boolean encontrado = false;
char nl = 'n';
Variables.java
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 34
07/06/2022
Variables: consideraciones
✓ Variables compuestas por más de una palabra:
iniciales en mayúscula menos la primera (nombreDato).
✓ Variables globales de la clase: si no se inicializan explícitamente,
se les asigna un valor por defecto.
✓ Variables locales de los métodos: deben inicializarse siempre
de forma explícita.
El modificador final
Impide que se altere el valor de la variable (constante):
final int ANCHURA_MAXIMA = 120;
final double PI = 3.1416;
final int ABRIR_ARCHIVO = 1;
Por convenio, las constantes se escriben en mayúsculas.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 35
07/06/2022
Constantes de clase
✓ Accesibles en toda la clase.
✓ Se declaran en la sección de declaraciones globales de la clase.
✓ Se declaran como static (de clase) y final (inmodificables),
asignándoles el valor en la declaración.
public class Pruebas {
static final double PI = 3.14159265;
public static void main (String[] args) {
System.out.println(PI);
}
}
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 36
07/06/2022
Bloques y ámbito de los identificadores
✓ Las llaves delimitan bloques de código: { ... }
✓ Los bloques están anidados unos dentro de otros
(a excepción del bloque correspondiente a la clase entera).
✓ Las reglas de ámbito (alcance) y visibilidad de los identificadores son
las habituales:
➢ El ámbito es el bloque en el que está definido
(junto con todos los bloques que contenga).
➢ La visibilidad es menor que el ámbito si en bloques interiores
se declaran otros identificadores iguales.
Nota: Java permite que haya variables locales de los métodos
con igual nombre que atributos de la clase (los ocultan), pero no permite
que dentro de los métodos se use dos veces un mismo identificador.
✓ Por defecto, las variables se crean cuando se entra en su ámbito
y se destruyen cuando se sale de él.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 37
07/06/2022
Operadores
Operador de asignación =
variable = expresión;
Operadores aritméticos
Unarios: + - ++ (incremento) -- (decremento)
x = y++; // Se asigna y a x; luego se incrementa y
x = ++y; // Se incrementa y; luego se asigna y a x
Binarios: + - * / % (módulo)
Ternario: ? (x < y) ? x : y (si x < y, entonces x, si no y)
Abreviaturas
x += y; equivale a x = x + y;
x -= y; equivale a x = x - y;
x *= y; equivale a x = x * y;
x /= y; equivale a x = x / y;
x %= y; equivale a x = x % y;
Area.java
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 38
07/06/2022
Operadores
Operadores relacionales == != < <= > >=
Operadores lógicos (booleanos) Evaluación perezosa
! Negación (NOT)
&& Conjunción (AND) (& para evaluación no perezosa)
|| Disyunción (OR) (| para evaluación no perezosa)
^ O exclusiva (XOR)
Conversiones de tipos: los moldes (casts)
La promoción de tipos es automática (de menor a mayor).
Las conversiones de tipos mayores a tipos menores se debe hacer
explícita por medio de moldes: el tipo deseado entre paréntesis.
(tipo) expresión
El molde precede a lo que se quiere convertir. Casting.java
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 39
07/06/2022
Operadores: precedencia
Mayor moldes
++ -- (prefijos)
!
* / %
+ -
< <= > >=
== !=
&
^
|
&&
||
Menor = += -= *= /= %=
Los paréntesis
nos permiten
pasar por alto
la precedencia
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 40
07/06/2022
Entrada/salida básica
Java no proporciona métodos directos para leer datos del teclado.
Proporciona métodos para leer líneas.
Una clase MyInput para leer números y cadenas del teclado:
MyInput.java
...
public class MyInput
{
public static String readString() { ... }
public static int readInt() { ... }
public static double readDouble() { ... }
public static byte readByte() { ... }
public static short readShort() { ... }
public static long readLong() { ... }
public static float readFloat() { ... }
}
Reproducido de “Introduction to Java”, Y. Daniel Liang, Prentice Hall 2001.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 41
07/06/2022
Ejercicios
Desarrollar un programa en una clase denominada AreaCirculo
que pida el radio de un círculo y muestre el área del mismo.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 42
07/06/2022
Ejercicios
Desarrollar un programa, con una clase que se denomine
CalculoHipoteca, que permita calcular los pagos mensual y total
de un crédito hipotecario. Pedirá la tasa de interés anual (porcentaje),
el número de años y la cantidad a prestar.
donde tasaInteresMensual está normalizada (entre 0 y 1).
AB → Math.pow(A,B);
 Si quieres que no se
cambie de línea cuando
imprimas en la pantalla:
System.out.print();
12
)
1
(
1
1 
+
−

=
años
sMensual
tasaIntere
sMensual
tasaIntere
cantidad
l
pagoMensua
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 43
07/06/2022
Una clase muy útil para números: Math
La clase Math proporciona dos constantes (Math.E y Math.PI) y
muchos métodos (de clase) útiles para operaciones matemáticas. Es
una clase del lenguaje (java.lang) y por eso se importa
automáticamente.
Algunos de los métodos de la clase son:
Math.abs(num) Math.acos(num) Math.atan(num)
Math.cos(num) Math.exp(num) Math.log(num)
Math.max(a,b) Math.min(a,b) Math.pow(a,b)
Math.random() Math.round(num) Math.sin(num)
Math.sqrt(num) Math.tan(num) Math.toDegrees(num)
Math.toRadians(num)
Práctica:
Rehacer los dos ejercicios anteriores para que el área del círculo sea
más precisa y los resultados se muestren con dos decimales.
AreaCirculo2 CalculoHipoteca2
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
44
07/06/2022
Contenido
▪ Introducción al Lenguaje de Programación Orientada a
Objetos y Plataformas de desarrollo.
▪ Variables, Tipos de datos, Operadores y alcance
▪ Sentencias, Uso de bucles (for, while, do while) y
condicionales (if, switch)
▪ Arreglo de tipos de datos simples
▪ Conceptos Básicos de POO: abstracción, clases, objetos,
atributos, métodos, operador this, parámetros por valor y
referencia.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 45
07/06/2022
Instrucciones de control del flujo
✓ Instrucciones de selección condicional:
➢ Bifurcación: if if-else
➢ Selección múltiple: switch
✓ Instrucciones de bucles:
➢ Número de iteraciones predeterminado: for
➢ Bucles condicionales: while do-while
✓ Instrucciones de paso de control: break continue
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 46
07/06/2022
Selección condicional: bifurcación
Para la bifurcación condicional disponemos de la típica estructura if.
Veamos sus distintas variaciones:
if(condición) instrucción;
if(condición) instrucción-if;
else instrucción-else;
if(condición) {
secuencia-de-instrucciones;
}
if(condición) {
secuencia-de-instrucciones-if;
}
else {
secuencia-de-instrucciones-else;
}
condición
true
Instrucción
o bloque if
false
Instrucción
o bloque else
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 47
07/06/2022
Selección condicional: bifurcación
if-else anidados: cada else se asocia al if anterior más cercano.
if(i == j) {
if(j == k)
System.out.println("i igual a k");
} // Llaves para que el else se asocie al primer if
else {
System.out.println("i no es igual a j");
}
Escalera if-else-if:
if(n == 1 ) { // Bloque 1
}
else if(n == 2) { // Bloque 2
}
else { // Si todo falla, Bloque 3
}
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 48
07/06/2022
Ejercicios
– Modificar el programa de cálculo de pagos de hipotecas, de forma que
el interés anual dependa del número de años del préstamo:
➢ 7,25% hasta 15 años (exclusive)
➢ 8,5% hasta 20 años (exclusive)
➢ 9,75% hasta 25 años (exclusive)
➢ 11% hasta 30 años
Además, los préstamos no pueden durar menos de 10 años
ni más de 30.
Nota: para forzar la finalización del programa se puede usar
System.exit(0). A menudo evita tener que anidar demasiadas
bifurcaciones condicionales.
– Crear un programa que pida tres números (num1, num2 y num3)
y los ordene, de forma que num1 contenga el mayor, num2 contenga
el intermedio y num3 contenga el menor.
CalculoHipoteca3
Ordena
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 49
07/06/2022
Selección condicional: ramificación múltiple
Si tenemos que disponer más de dos ramas de ejecución
y la elegida depende del valor de una variable o una expresión,
entonces debemos elegir la instrucción switch.
La sintaxis básica es la siguiente:
switch(expresión) {
case valor1:
instrucciones1
[break;]
case valor2:
instrucciones2
[break;]
...
[ default:
por-defecto ]
}
[...] : opcional
exp==val1
false
exp==val2 instrucciones2
true
true
exp==valN
...
false
false
true
instrucciones1
instruccionesN
por-defecto
La instrucción vacía existe
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 50
07/06/2022
Selección condicional: ramificación múltiple
switch(mes) {
case 1: case 3: case 5:
case 7: case 8: case 10:
case 12:
numeroDias = 31;
break;
case 4: case 6: case 9:
case 11:
numeroDias = 30;
break;
default:
numeroDias = 28;
}
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 51
07/06/2022
Bucles: la instrucción for
Para ejecutar un determinado número de veces una instrucción
o un bloque de código disponemos de la típica instrucción for:
for(inicialización;condición;incremento)
instrucción;
for(inicialización;condición;incremento) {
secuencia-de-instrucciones
}
La sección de inicialización sirve para establecer la situación inicial;
habitualmente se trata simplemente de la asignación de un valor
inicial a una variable de control de bucle.
La sección de condición indica si debe proseguir la repetición;
mientras sea cierta (true) el bucle continuará.
La sección de incremento sirve para establecer la nueva situación
de la siguiente iteración; habitualmente se incrementa la variable.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 52
07/06/2022
Bucles: la instrucción for
for(contador = 1; contador <= ciclos; contador++)
instrucción;
true
instrucción
contador
<= ciclos
contador = 1
false
contador++
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 53
07/06/2022
Bucles: la instrucción for
TestMulTable.java
...
// Display the number title
System.out.print(" | ");
for(int j = 1; j <= 9; j++) System.out.print(" " + j);
System.out.println(" ");
// Print table body
for(int i = 1; i <= 9; i++) {
System.out.print(i+" | ");
for(int j = 1; j <= 9; j++) { // j de otro bloque
// Display the product and align properly
if(i * j < 10) System.out.print(" " + i * j);
else System.out.print(" " + i * j);
}
System.out.println();
}
...
Reproducido de “Introduction to Java”, Y. Daniel Liang, Prentice Hall 2001.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 54
07/06/2022
Ejercicios
– Crear un programa que pida un número y muestre una pirámide como
la siguiente (para el caso en el que el número sea 8):
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
– Sabiendo que el valor de  se puede aproximar mediante la siguiente
fórmula:
 = 4 x (1 – 1/3 + 1/5 – 1/7 + 1/9 – 1/11 + 1/13 ...)
Crear un programa que pida al usuario un número de iteraciones y
calcule el valor de  con ese número de aproximaciones.
Piramide
CalculoPI
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 55
07/06/2022
Bucles: la instrucción while
La instrucción while es una de las dos que están disponibles para
bucles no determinados, aquellos que no tienen establecido de
antemano un número fijo de iteraciones. La continuidad del bucle
depende de alguna condición. Mientras (while) que la condición sea
cierta, se sigue iterando; en el momento en que la condición se vuelva
falsa, el bucle termina.
while(condición) instrucción;
while(condición) {
instrucciones
}
false
condición
true
instrucción
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 56
07/06/2022
Bucles: la instrucción do...while
La instrucción do...while es la otra instrucción disponible para
bucles no determinados. La diferencia con el bucle while se
encuentra en que la condición se comprueba al final, después de
haber ejecutado el bloque. Así, siempre se realiza al menos una
iteración del bucle (con el while puede no haber iteración alguna).
do {
instrucciones
} while(condición)
Se ejecutan
las instrucciones
hasta que
la condición
se haga falsa.
false
true
instrucciones
condición
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 57
07/06/2022
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 58
07/06/2022
break y continue
La instrucción break, además de servir para interrumpir la ejecución
del código en los casos de los switch, sirve para interrumpir la
ejecución de un bucle while o do...while
(dar por terminado el bucle, saliendo de él de forma inmediata).
La instrucción continue sirve para interrumpir la ejecución de
la iteración actual de un bucle while o do...while, pasando
por alto el resto del código del bucle que haya a continuación y
forzando a que siga el bucle con la siguiente iteración.
int i = 0; float suma = 0;
do {
int num = MyInput.readInt();
if(num == 0) break;
if(num < 0) continue;
suma += 1 / num;
i++;
} while(i < 5);
¿Qué error hay
en este ejemplo?
ContinueBreak.java
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 59
07/06/2022
Ejercicios
– Convertir el siguiente bucle for en un while y en un do-while:
long suma = 0;
for(int i = 0; i <= 1000; i++) suma += i;
– ¿Cuál es la salida del siguiente código?
int num = 1000;
while(true) {
if(num < 9) break;
num -= 9;
}
System.out.println("num = " + num);
– ¿Y la de este otro?
int num = 1000;
while(true) {
if(num < 9) continue;
num -= 9;
}
System.out.println("num = " + num);
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
60
07/06/2022
Contenido
▪ Introducción al Lenguaje de Programación Orientada a
Objetos y Plataformas de desarrollo.
▪ Variables, Tipos de datos, Operadores y alcance
▪ Sentencias, Uso de bucles (for, while, do while) y
condicionales (if, switch)
▪ Arreglo de tipos de datos simples
▪ Conceptos Básicos de POO: abstracción, clases, objetos,
atributos, métodos, operador this, parámetros por valor y
referencia.
Ph.D. Franklin Parrales 61
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
Una de las colecciones que más a menudo utilizamos es
la cadena de caracteres.
Una cadena de caracteres es una secuencia de caracteres que se
guardan juntos y en orden en una variable.
Bueno, más bien en un objeto, ya que en Java usamos una clase muy
versátil para las cadenas de caracteres: la clase String.
Es una clase de la biblioteca estándar.
Hay que tener muy en cuenta que las cadenas de caracteres que se
mantienen en objetos de la clase String no se pueden modificar.
Son objetos constantes que contienen la cadena que se les haya
proporcionado cuando se crearon.
Ph.D. Franklin Parrales 62
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
Creación de cadenas
Se crean como cualquier otro objeto:
String cadena = new String(cad);
donde cadena es el nombre para el objeto y cad es la cadena
de caracteres literal que se quiere mantener en el objeto String.
Por ejemplo:
String frase = new String("Me gusta programar en Java.");
Como las cadenas se usan mucho, Java nos permite abreviar
la creación de esta clase de objetos:
String frase = "Me gusta programar en Java.";
El objeto frase contendrá esa cadena durante toda su “vida”.
Ph.D. Franklin Parrales 63
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
Lectura de cadenas
Para obtener un objeto String que contenga la secuencia
de caracteres introducida por el usuario con el teclado,
la clase MyInput proporciona el método readString().
String frase = MyInput.readString();
El método readString() ya se encarga de crear el objeto.
Longitud y acceso a caracteres individuales
Para saber cuál es la longitud de la cadena (el número de caracteres
que contiene) se usa el método length():
int longitud = frase.length();
Se puede acceder a los caracteres individuales con el método
charAt(índice), donde índice va de 0 a longitud-1:
for(int i = 0; i < frase.length(); i++)
System.out.print(frase.charAt(i));
Asegurarse de que el
índice sea válido
Ph.D. Franklin Parrales 64
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
Comparación de cadenas
Como las cadenas son objetos, las variables correspondientes son
referencias y ya sabemos que cuando comparamos referencias lo que
comprobamos es si apuntan al mismo objeto, no si se trata
de la misma secuencia de caracteres.
String frase1 = new String("Hola");
String frase2 = "Hola";
if(frase1 != frase2)
System.out.println("No son el mismo objeto.");
String frase4 = frase1;
if(frase1 == frase4)
System.out.println("Son el mismo objeto.");
Ph.D. Franklin Parrales 65
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
Para saber si dos objetos contienen la misma secuencia de caracteres
se puede utilizar el método equals(String).
String frase1 = new String("Hola");
String frase2 = "Hola";
if(frase1.equals(frase2))
System.out.println("Contienen la misma cadena.");
Y para saber si la cadena es lexicográficamente menor o mayor
que otra se puede usar el método compareTo(String),
que devuelve un valor menor que cero si la cadena receptora
es menor que el argumento, cero si ambas cadenas son iguales
y un valor mayor que cero si la cadena receptora es mayor que
el argumento.
También está definido en la clase String el método
equalsIgnoreCase(String), que compara dos cadenas
ignorando mayúsculas y minúsculas.
Ph.D. Franklin Parrales 66
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
Concatenación
Para concatenar la cadena receptora con otra cadena se puede utilizar
el método concat(String), que devuelve otra cadena
con los caracteres de la receptora seguidos de los del argumento.
String frase1 = new String("Hola");
String frase2 = “y adios";
String frase3 = frase1.concat(frase2);
System.out.println(frase3); // Holay adios
También se puede utilizar el operador + para concatenar cadenas, (ya
lo hemos estado utilizando con System.out.print()).
String frase3 = frase1 + frase2;
Ph.D. Franklin Parrales 67
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
El método estándar toString()
Cuando en una instrucción System.out.print() (o println()) se
encuentra un objeto, automáticamente se llama al método
toString() de la clase del objeto. Este método devuelve un
String con la información del objeto en el formato deseado.
Si el programador no ha incluido un método toString() en la clase,
el compilador añade uno por su cuenta, pero seguramente la forma
en que se muestre la información no nos resultará adecuada.
Lo mejor, por tanto, es añadir un método toString() propio que
devuelva una cadena concatenando la información a mostrar.
public String toString() { // Clase Cuenta
return "Número de la cuenta: " + _num
+ "nD.N.I. del cliente: “ + _dni + "nSaldo: "
+ _saldo + " eurosnInterés: " + _interes + " %";
}
Ph.D. Franklin Parrales 68
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
Subcadenas
Para obtener una subcadena de la cadena receptora se utiliza
el método substring(int, int).
El primer argumento es el carácter (índice) por el que se quiere
empezar a copiar y el segundo argumento indica el primer carácter
(índice) que ya no se quiere incluir en la copia. Si no se proporciona
un segundo argumento, la subcadena llega hasta el final.
String frase1 = "abcdefghijklm";
String frase2 = frase1.substring(2, 6); // cdef
String frase3 = frase1.substring(6); // ghijklm
Para saber si un cadena se encuentra dentro de la cadena receptora
se utiliza el método indexOf(String), que devuelve el carácter en
el que empieza esa cadena como subcadena en la receptora
(-1 si no se encuentra). Cadenas.java
Ph.D. Franklin Parrales 69
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
Ejemplo: inversión de una cadena
Pedir una cadena, copiarla al revés en otra y mostrar ésta última.
public class Invertir {
public static void main (String[] args) {
System.out.print("Cadena a invertir: ");
String cad = MyInput.readString();
// Construir la inversa:
String inversa = "";
for(int i = 0; i < cad.length(); i++)
inversa = cad.substring(i, i+1) + inversa;
System.out.println("Al revés: " + inversa);
}
}
Invertir.java
¿Cuántos objetos String se crean?
Ph.D. Franklin Parrales 70
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
for(int i = 0; i < 4; i++) // cad.length() es 4
inversa = cad.substring(i, i+1) + inversa;
H
cad
o l a
inversa
Ph.D. Franklin Parrales 71
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
i = 0
inversa = cad.substring(0, 1) + inversa;
H
cad
o l a
H
inversa
Ph.D. Franklin Parrales 72
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
i = 0
inversa = cad.substring(0, 1) + inversa;
H
cad
o l a
H
H
inversa
Ph.D. Franklin Parrales 73
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
i = 0
inversa = cad.substring(0, 1) + inversa;
H
cad
o l a
H
H
inversa
Dos objetos creados (y perdidos)
en cada iteración
. . .
Ph.D. Franklin Parrales 74
07/06/2022
Programación Orientada a Objetos Carrera de Software
Cadenas de caracteres: la clase String
Ejemplo: reemplazo de texto en una cadena
Función que sustituye todas las ocurrencias de un texto (anterior)
por otro texto (nueva) en una cadena.
String reemplaza(String cadena, String anterior,
String nueva) {
int estaEn;
do {
estaEn = cadena.indexOf(anterior);
if(estaEn != -1)
cadena = cadena.substring(0, estaEn) + nueva +
cadena.substring(estaEn + anterior.length());
} while(estaEn != -1);
return cadena;
}
Reemplaza.java
Ph.D. Franklin Parrales 75
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase con atributos de clase String
Clase Persona
public class Persona {
private Nif nif;
private int edad;
private String nombre, apellidos;
// Constructor predeterminado
public Persona() {
nif = new Nif();
edad = 0;
nombre = new String("");
apellidos = new String("");
}
// Constructor parametrizado
public Persona(long dni, int edad, String nombre,
String apellidos) {
this.nif = new Nif(dni);
this.edad = edad;
this.nombre = nombre;
this.apellidos = apellidos;
}
Ph.D. Franklin Parrales 76
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase con atributos de clase String
// Accedentes
public Nif dameNif() { return nif; }
public int dameEdad() { return edad; }
public String dameNombre() { return nombre; }
public String dameApellidos() { return apellidos; }
// Mutadores
public void ponNif(Nif nif) { this.nif = nif; }
public void ponEdad(int edad) { this.edad = edad; }
public void ponNombre(String nombre)
{ this.nombre = nombre; }
public void ponApellidos(String apellidos)
{ this.apellidos = apellidos; }
// Resto de métodos
public void ponDni(long dni) { nif.ponDni(dni); }
public String toString() {
return nif.toString() + "n" + nombreCompleto()
+ "nEdad: " + edad + "n";
}
Ph.D. Franklin Parrales 77
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase con atributos de clase String
public String nombreCompleto() { // nombre y apellidos
return nombre + " " + apellidos;
}
public void leer() { // lectura de los datos de la persona
nif.leer();
System.out.print("Nombre: ");
nombre = MyInput.readString();
System.out.print("Apellidos: ");
apellidos = MyInput.readString();
System.out.print("Edad: ");
edad = MyInput.readInt();
}
}
Persona.java
Ph.D. Franklin Parrales 78
07/06/2022
Programación Orientada a Objetos Carrera de Software
La clase Array
La forma más básica de crear colecciones en Java (distintas de las
cadenas de caracteres) es utilizando arrays.
Para crear arrays Java proporciona la clase Array.
Los arrays son, por tanto, objetos que se han de crear.
Para declarar una variable array se indica el tipo (o clase)
de los elementos que se van a colocar en el mismo y unos corchetes
para especificar que se trata de un array. Los corchetes pueden ir
detrás del tipo o detrás del nombre de la variable:
double numeros[];
double[] masNumeros;
Cuenta[] banco;
Empleado empresa[];
bool[] interruptores;
Los arrays son colecciones homogéneas, de forma que todos los
elementos son de un mismo tipo (el tipo base del array).
Ph.D. Franklin Parrales 79
07/06/2022
Programación Orientada a Objetos Carrera de Software
La clase Array
Todavía no tenemos ningún array disponible. Como los arrays son
objetos hay que crearlos, como siempre con la instrucción new.
En la creación es cuando se especifica la longitud del array,
el número de posiciones (elementos) que se desea tener.
La capacidad se indica entre corchetes a continuación del tipo:
numeros = new double[10];
masNumeros = new double[25];
banco = new Cuenta[1000];
empresa = new Empleado[60];
interruptores = new bool[4];
Y, por supuesto, se pueden crear al declararlos:
double numeros[] = new double[10];
double[] masNumeros = new double[25];
Cuenta[] banco = new Cuenta[1000];
Empleado empresa[] = new Empleado[60];
bool[] interruptores = new bool[4];
Ph.D. Franklin Parrales 80
07/06/2022
Programación Orientada a Objetos Carrera de Software
La clase Array
Acceso a los elementos del array
Las posiciones del array se acceden por índice, siempre un entero.
Para acceder a un elemento del array se pone el índice entre
corchetes a continuación del nombre del array:
numeros[índice] banco[índice]
La primera posición del array es la 0 y la última la longitud menos 1.
Debemos asegurarnos de que la posición a la que queramos acceder
sea una posición válida. Si no, se elevará una excepción y se
interrumpirá la ejecución del programa.
Los elementos del array numeros son:
numeros[0] numeros[1] numeros[2] ... numeros[9]
Y los del array banco son:
banco[0] banco[1] banco[2] ... banco[999]
Ph.D. Franklin Parrales 81
07/06/2022
Programación Orientada a Objetos Carrera de Software
La clase Array
Los arrays disponen de una propiedad (atributo público) denominada
length que contiene el número de posiciones del array.
int longitud = numeros.length; // No es un método!
Se recomienda utilizar la propiedad length en lugar del número de
posiciones indicado al crear el array.
for(int i = 0; i < banco.length; i++)
banco[i].println();
Cuando se trabaja con arrays de objetos, antes de acceder a un
objeto de una posición del array hay que estar seguro de que en
esa posición efectivamente hay un objeto (se apunta a un objeto). No
hay que olvidar que se trata de referencias.
for(int i = 0; i < banco.length; i++)
if(banco[i] != null) banco[i].println();
Sea como sea, hay que estar seguro.
Ph.D. Franklin Parrales 82
07/06/2022
Programación Orientada a Objetos Carrera de Software
Arrays de objetos
Vamos a usar la clase Array para crear listas de objetos.
El array lo necesitamos para mantener los distintos objetos que
se coloquen en la lista (bueno, las referencias a los objetos).
Para guardar objetos de una clase en un array basta con definir
un array cuyo tipo base sea esa clase:
Persona _array[];
Y como ya sabemos, el array se crea así:
_array = new Persona[100];
El array ya está listo para que se asignen Personas a las distintas
posiciones del array según se necesite.
La creación del array no crea ningún objeto de clase Persona.
Las Personas que se quieran colocar en el array se deberán crear
antes de colocarlas.
Ph.D. Franklin Parrales 83
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase Lista
La lista es una estructura de datos y como tal es un elemento de
programa independiente que debe estar implementado en una clase.
El array de objetos será un atributo de la clase Lista.
Como en el array no tienen por qué estar todas las posiciones
ocupadas por objetos que se hayan insertado en la lista,
debemos saber cuántas posiciones están ocupadas
en cada momento (y cuáles).
Lo mejor es mantener todos los objetos en posiciones contiguas,
a partir de la primera (la 0), de forma que lo único que necesitamos
saber es cuántos hay. Bastará un contador de elementos.
El contador de elementos será otro atributo de la clase Lista.
El contador de elementos indicará la primera posición que está
disponible. Lo inicializaremos a cero y no cabrán más objetos en la
lista cuando valga MAX, una constante de la clase.
Ph.D. Franklin Parrales 84
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase Lista
Atributos de la clase Lista
No necesitamos más datos, por lo que la lista de atributos será:
public class Lista {
private final static int MAX = 100;
private Persona _array[];
private int _cont = 0; // Indica la primera posición
// libre del array. Igual al número de elementos.
...
MAX es una constante de clase.
Ph.D. Franklin Parrales 85
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase Lista
Métodos de la clase Lista
Como la lista es una máquina de datos, no se debe tener acceso
a sus interioridades (atributos), sino que se utilizará exclusivamente
a través de las operaciones definidas.
No ya es que no tenga utilidad conocer los valores de los atributos (el
contador y el array), sino que se podría hacer que la máquina fallase
si se modificaran sus atributos (¡el contador indicando más allá de la
primera posición vacía!).
Por tanto, no definiremos en la clase Lista ni accedentes
ni mutadores, excepto un accedente para el contador.
El resto de los métodos se corresponderán con operaciones
específicas de la lista como estructura de datos.
Ph.D. Franklin Parrales 86
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase Lista
Como se trata de un ejemplo de lista, no vamos a implementar un
conjunto completo de operaciones, sino tan sólo algunas que nos
permitan probar suficientemente la lista.
◼ ¿Caben más objetos?
El método llena() devolverá true si no caben más objetos
y false en caso contrario.
◼ ¿Hay algún objeto que se pueda recuperar?
El método vacia() devolverá true si no hay objetos
y false en caso contrario.
◼ Nuevo elemento
El método insertar() insertará el objeto que acepta en la lista.
◼ Obtener elemento
El método recuperar() devolverá el objeto dada una posición de la
lista. Aunque la primera posición del array es la 0, para este método se
indicará la primera posición de la lista como la 1.
◼ Visualización: método toString().
Ph.D. Franklin Parrales 87
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase Lista
Métodos que indican su éxito o fracaso
A menudo implementaremos, como métodos, operaciones que pueden
fallar. Por ejemplo, si la lista está llena, el método insertar() no
podrá insertar el objeto en la lista tal como se
le solicita. Y si al método recuperar() se le pasa una posición en la
que no hay objeto también fallará (no habrá objeto que devolver).
Cuando una operación que no tiene que devolver nada puede fallar
(como insertar()), el método debe indicar el éxito o el fallo de la
operación. ¿Cómo? Por ejemplo, devolviendo un valor boolean que
lo indique (true si éxito y false si fallo).
El método recuperar(), sin embargo, devuelve algo: la Persona
que se encuentra en la posición solicitada. En el caso de que la
posición no sea válida, deberá indicar que la operación ha fallado.
Ahora se puede indicar sencillamente que no hay objeto que devolver.
Y ya sabemos que para eso está el valor especial null.
Ph.D. Franklin Parrales 88
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase Lista
public class Lista {
private final static int MAX = 100;
private Persona _array[];
private int _cont = 0; // Indica la primera posición
// libre del array. Igual al número de elementos
public Lista() { _array = new Persona[MAX]; }
public boolean llena() { return _cont == MAX; }
public boolean vacia() { return _cont == 0; }
public int length() { return _cont; }
public boolean insertar(Persona p) {
// Devuelve true si se inserta; false si lista llena
if(_cont == MAX) return false;
_array[_cont] = p;
_cont++;
return true;
}
(continúa)
Ph.D. Franklin Parrales 89
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase Lista
public Persona recuperar(int pos) {// pos: 1 ... _cont
// true si tiene éxito; false si posición no válida
if((pos < 1) || (pos > _cont)) return null;
return _array[pos-1];
}
public String toString() {
String cad = "Elementos de la lista:nn";
for(int i = 0; i < _cont; i++)
cad += _array[i].toString() + "n";
return cad;
}
}
Persona
Lista 0..MAX
Lista.java
Nif
1
Ph.D. Franklin Parrales 90
07/06/2022
Programación Orientada a Objetos Carrera de Software
Una clase Lista
Se debe tener muy presente
que lo que se coloca en
las posiciones del array
son referencias a objetos,
por lo que si se inserta
dos veces el mismo objeto
Persona, habrá dos posiciones
que apunten al mismo objeto.
Persona per = new Persona();
Lista lista = new Lista();
lista.insertar(per);
lista.insertar(per);
... 2
Objeto
Persona
...
_array
_cont
lista
PruebaLista.java
Ph.D. Franklin Parrales 91
07/06/2022
Programación Orientada a Objetos Carrera de Software
Arrays: varias dimensiones
tipo[][] idMatriz = new tipo[t1][t2];
tipo[][][]idMatriz = new tipo[t1][t2][t3];
Definición : int[][] tabla = new int[4][10];
Acceso a los elementos : tabla[2][5]
...
int a,b,c;
double[][] otraTabla = new int[a][b*c];
int[][] tabla2 = {{1,2,3},{4,5,6},{7,8,9}};
...
float tabla3[][] = new float[4][];
tabla3[0] = new float[5];
tabla3[1] = new float[10]; Sólo se puede hacer al definirla
Ph.D. Franklin Parrales 92
07/06/2022
Programación Orientada a Objetos Carrera de Software
Ejemplo: matriz identidad
public class PruebaMatriz {
public static void main(String[] args){
int[][] m = new int[4][4];
for(int i=0; i<m.length;i++){
for(int j=0; j<m[i].length;j++){
if (i==j)m[i][j]=1;
else m[i][j]=0;}
}
for(int i=0; i<m.length;i++){
for(int j=0; j<m[i].length;j++){
System.out.print (m[i][j]+” “);}
System.out.println();
}
}
}
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Ph.D. Franklin Parrales 93
07/06/2022
Programación Orientada a Objetos Carrera de Software
Ejemplo: máximo de matriz
public class Maximo {
static int mayor(int[][] a){
int mayor=a[0][0];
for(int i=0; i<a.length; i++){
for(int j=0; j<a[i].length;j++){
if (mayor<a[i][j]) mayor=a[i][j]; }
}
return mayor;
}
public static void main(String[] args) {
int[][]m = {{23,3,95},{13,42,12}};
System.out.println(mayor(m));
}
}
Ph.D. Franklin Parrales 94
07/06/2022
Programación Orientada a Objetos Carrera de Software
Ejercicio: una clase Tablero
Crea una clase Tablero que modele un tablero de 5x5;
Atributos:
◼ La matriz que representa al tablero
Métodos:
◼ Constructor : inicializa el tablero con valores double aleatorios
(entre 0 y 1)
◼ toString() : permite mostrar el tablero en formato filas y
columnas
◼ vacia(int fil, int col) : pone a cero la casilla indicada por
los parámetros
Crea una clase PruebaTablero que cree un tablero de ejemplo y lo
muestre
PruebaTablero.java
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
95
07/06/2022
Contenido
▪ Introducción al Lenguaje de Programación Orientada a
Objetos y Plataformas de desarrollo.
▪ Variables, Tipos de datos, Operadores y alcance
▪ Sentencias, Uso de bucles (for, while, do while) y
condicionales (if, switch)
▪ Arreglo de tipos de datos simples
▪ Conceptos Básicos de POO: abstracción, clases, objetos,
atributos, métodos, operador this, parámetros por valor y
referencia.
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
96
07/06/2022
Abstracción
▪ La abstracción es ignorancia selectiva
▪ Decidir qué es importante y qué no lo es
▪ Concentrarse en lo importante y depender de ello
▪ Ignorar lo que no es importante y no depender de ello
▪ Usar encapsulación para forzar una abstracción
El objetivo de la abstracción es no perderse en vaguedades y crear
un nuevo nivel semántico en el que se pueda ser absolutamente preciso.
Edsger Dijkstra
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
97
07/06/2022
Qué es un objeto?
▪ Un objeto es una abstracción de un conjunto de cosas del
mundo real de tal forma que:
▪ Todos los elementos del conjunto (las instancias) tienen las
mismas características.
▪ Todas las instancias están sujetas a y conforman las mismas
reglas.
Mundo Real Software
Abstracción
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
98
07/06/2022
Objetos
▪ Objeto = unidad atómica que encapsula estado y
comportamiento
▪ La encapsulación en un objeto permite una alta cohesión y
un bajo acoplamiento
▪ Un objeto puede caracterizar una entidad física (coche) o
abstracta (ecuación matemática)
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
99
07/06/2022
… Objetos
▪ El Modelado de Objetos permite representar el ciclo de vida de
los objetos a través de sus interacciones
▪ En UML, un objeto se representa por un rectángulo con un
nombre subrayado
Otro
Objeto
Un Objeto
Otro
Objeto
más
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
100
07/06/2022
… Objetos
▪ Ejemplo de varios objetos relacionados:
Felipe
Juan
Cuenta Corriente 101
Cuenta Corriente 114
Banco de Valencia
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
101
07/06/2022
… Objetos
▪ Objeto = Identidad + Estado + Comportamiento
▪ El estado está representado por los valores de los atributos
▪ Un atributo toma un valor en un dominio concreto
Un coche
Azul
979 Kg
70 CV
...
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
102
07/06/2022
Qué es un objeto?
▪ Es una entidad tangible que muestra algún
comportamiento bien definido.
▪ Posee funcionalidad (operaciones que son capaces de
hacer y mensajes que son capaces de responder).
▪ Características de los objetos: Identidad, Clasificación,
estado, comportamiento, herencia, Polimorfismo (se verán
más adelante).
▪ Estas características pueden ser usadas en forma independiente,
pero juntas se complementan.
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
103
07/06/2022
Identidad
Variable Dirección
unCredito 10001324
unDebito 54647875
unaCuenta 87896545
unaCuentadeAhorros 87020486
Una tabla de símbolos
caballo
Doris
Residencia de Doris
Mi Computadora
Una bicicleta roja
cuenta bancaria
antena parabólica
Cada objeto tiene su propia identidad inherente
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
104
07/06/2022
▪ Oid (Object Identifier)
Cada objeto posee un oid. El oid establece la identidad del objeto y
tiene las siguientes características:
❖ Constituye un identificador único y global para cada objeto dentro del
sistema
❖ Es determinado en el momento de la creación del objeto
❖ Es independiente de la localización física del objeto, es decir, provee
completa independencia de localización
Identidad
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
105
07/06/2022
❖ Es independiente de las propiedades del objeto, lo cual implica
independencia de valor y de estructura
❖ No cambia durante toda la vida del objeto. Además, un oid no se
reutiliza aunque el objeto deje de existir
❖ No se tiene ningún control sobre los oids y su manipulación resulta
transparente
▪ Sin embargo, es preciso contar con algún medio para hacer
referencia a un objeto utilizando referencias del dominio (valores
de atributos)
… Identidad
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
106
07/06/2022
Clasificación
(1,3)
(2,2)
(2,1)
(5,2.5)
Vehículo
Punto
Figura
Animal
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
107
07/06/2022
Estado
▪ El estado evoluciona con el tiempo
▪ Algunos atributos pueden ser constantes
▪ El comportamiento agrupa las competencias de un objeto y
describe las acciones y reacciones de ese objeto
▪ Las operaciones de un objeto son consecuencia de un estímulo
externo representado como mensaje enviado desde otro objeto
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
108
07/06/2022
Comportamiento
▪ Ejemplo de interacción:
Otro objeto
Un objeto
Un mensaje
Operacion 1
Operacion 2
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
109
07/06/2022
… Comportamiento
▪ Los mensajes navegan por los enlaces, a priori en ambas
direcciones
▪ Estado y comportamiento están relacionados
▪ Ejemplo: no es posible aterrizar un avión si no está
volando. Está volando como consecuencia de haber
despegado del suelo
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
110
07/06/2022
¿Qué es una clase?
▪ Para el filósofo…
▪ Un artefacto de clasificación humana
▪ Clasificamos según un comportamiento o atributos comunes
▪ Acordamos descripciones y nombres de clases útiles
▪ Creamos vocabulario; nos comunicamos; ¡pensamos!
▪ Para el programador orientado a objetos…
▪ Una construcción sintáctica con nombre que describe un
comportamiento y atributos comunes
▪ Una estructura de datos que incluye datos y funciones
¿COCHE?
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
111
07/06/2022
¿Qué es una clase?
❖ Una clase es una descripción de un conjunto de objetos que
comparten: atributos, operaciones, relaciones y semántica”.
❖ Una clase define los conceptos que forman parte del dominio
del problema o de la solución.
Dominio del problema:
Conceptos
Dominio de la solución:
Clases
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
112
07/06/2022
Clase
▪ Una clase describe un conjunto de ejemplares (objetos) con
propiedades y comportamientos similares.
▪ Una clase se describe por:
▪ Nombre
▪ Interfaz (métodos, mensajes)
▪ Atributos (datos)
▪ En término de programación es un tipo de dato definido por el
usuario.
▪ Equivalente a un TDA. Ej: Rectangulo, Lista, Cola, NumeroComplejo,
etc.
▪ Las clases son las plantillas a partir de las cuales se crean los
objetos.
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
113
07/06/2022
Clases
▪ Una clase es la descripción de un conjunto de objetos que
comparten los mismos:
▪ atributos (características)
▪ métodos (operaciones)
▪ relaciones
▪ La estructura de una clase esta compuesta de:
▪ Los atributos: Datos asociados a los elementos y que toman
valor al instanciar objetos de una clase.
▪ Las operaciones (métodos): Funciones o procesos propios de los
objetos de una clase.
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
114
07/06/2022
Notación UML para clases
Identificador de la clase,
si es abstracta va en
cursiva
atributos
métodos
Rectángulo
longitud
ancho
crearRectangulo
obtenerArea
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
115
07/06/2022
Clase Instancia 1 Instancia 2
Perro unPerro
Fido
Sultán
unPerro
nombre
Clases
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
116
07/06/2022
¿Qué es un objeto?
▪ Un objeto es una instancia de una clase
▪ Los objetos se caracterizan por:
▪ Identidad: Los objetos se distinguen unos de otros
▪ Comportamiento: Los objetos pueden realizar tareas
▪ Estado: Los objetos contienen información
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
117
07/06/2022
¿Qué es un objeto?
▪ En términos de programación es una variable.
▪ Un objeto es una instancia de una clase.
▪ Los objetos creados a partir de una clase, tienen una
estructura idéntica, pero cada objeto puede tener valores
distintos.
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
118
07/06/2022
Clases y Objetos
Class Template
Objetos
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
119
07/06/2022
Atributos
▪ Un atributo representa una propiedad que es compartida por
todos los objetos de una misma clase. Ejemplo: Un persona
tiene nombre, edad, etc.
▪ Los nombres de atributos son únicos dentro de una misma
clase.
▪ Cada atributo tiene un valor para cada instancia
▪ En UML:
▪ La primera letra de un atributo se escribe con minúscula.
▪ La sintaxis para los atributos en un diagrama UML de clases es la
siguiente:
▪ visibilidad nombre : tipo de dato
▪ Ejemplo: + nombre : String
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
120
07/06/2022
Clase Instancia 1 Instancia 2
atributo X valor x1 valor x2
Perro unPerro
nombre
peso
Sultán
19 libras
unPerro
Fido
9 libras
Atributos de Clases
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
121
07/06/2022
Perro
nombre
piel
peso
edad
estátus
Nombrar o identificar objetos
Describir características
Describir estados
Clases de Atributos
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
122
07/06/2022
¿Cómo encontrar atributos?
▪ Para encontrar atributos de una clase preguntarse:
▪ Qué información necesitamos conocer sobre ese objeto?
▪ Qué características necesitamos recordar en el tiempo?
▪ Qué dato es importante para soportar las responsabilidades de la
clase en el sistema?
▪ Algunos atributos podrían ser extraídos del análisis de los
sustantivos y añadidos a la clase apropiada.
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
123
07/06/2022
Atributos
▪ Una entidad con estructura, comportamiento o identidad
debe ser modelado como una clase, no como atributo de
otra clase.
▪ Sólo considere atributos que directamente estén
relacionados a una aplicación particular. Obtenga los
atributos más importantes primero, se adicionarán detalles
después.
▪ Asegúrese de dar a cada atributo un nombre significativo.
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
124
07/06/2022
Métodos
▪ Los métodos, son los procesos que una clase sabe cómo
llevar a cabo. Ejemplo: cambiar-dirección.
▪ Un objeto se caracteriza por el comportamiento que es
capaz de mostrar, no solo por sus atributos.
▪ En el modelo estático, únicamente se muestra los nombres de los
métodos.
▪ La información de las operaciones se muestra en el modelo dinámico.
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
125
07/06/2022
Sinónimos de Método
▪ Operación
▪ Responsabilidad
▪ Servicio
▪ Función
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
126
07/06/2022
Clase Instancia 1 Instancia 2
Perro unPerro
atributo X valor x1 valor x2
nombre
peso
Sultán
19 libras
unPerro
Fido
9 libras
operación OPT OPT OPT
sentarse
girar
operaciones de
la clase
operaciones de
la clase
Métodos
Programación Orientada a Objetos
Ph.D. Franklin Parrales
Carrera de Software
127
07/06/2022
Métodos
▪ Puede ocurrir que una clase no tenga métodos.
▪ En UML:
▪ La primera letra de los nombres de los métodos se escribe con
minúscula.
▪ Los métodos pueden tener parámetros, y también pueden
retornar valores. La sintaxis para los métodos en un diagrama
UML de clases, es la siguiente:
▪ visibilidad nombre (lista-de-parámetros): tipo-dato-a-retornar.
▪ Ejemplo: #addMessage (m : Message, len : Integer): Status
Ph.D. Franklin Parrales 128
07/06/2022
Programación Orientada a Objetos Carrera de Software
Representaciones gráficas
Para representar gráficamente los elementos de los programas
orientados a objetos y sus relaciones vamos a utilizar diagramas
similares a los de UML que se usan en Ingeniería del Software.
A medida que vayamos estudiando los conceptos y los mecanismos de
la POO iremos viendo cómo representarlos gráficamente.
De momento, comencemos con la representación de las clases:
Nombre
Atributos
Métodos
Nombre de la clase
Atributos definidos
en la clase
Métodos definidos
en la clase
Ph.D. Franklin Parrales 129
07/06/2022
Programación Orientada a Objetos Carrera de Software
Representaciones gráficas
Las representaciones gráficas de las clases se pueden desarrollar
con distintos niveles de detalle.
Con el mayor nivel de detalle se incluyen todas las características
(atributos y métodos) definidas en la clase.
Punto
_x
_y
x():double
x(double)
y():double
y(double)
print()
Circulo
_centro
_radio
Circulo()
Circulo(Punto,double)
centro():Punto
centro(Punto)
radio():double
radio(double)
print()
Métodos:
Nombre seguido de los
tipos de los parámetros
separados por comas
y entre paréntesis.
Si la función devuelve
un valor, el tipo de valor
que devuelve se coloca
al final y precedido de :
Ph.D. Franklin Parrales 130
07/06/2022
Programación Orientada a Objetos Carrera de Software
Representaciones gráficas
Si interesa se pueden omitir secciones o dejarlas en blanco.
Por ejemplo, para mostrar la forma en que se usan los objetos de una
clase, la parte de atributos no es relevante, por lo que la podemos
dejar en blanco:
Se pueden quitar del todo secciones por el final; es decir, si la que se
deja en blanco es la de métodos, al ser la última sí se puede quitar,
pero como la de atributos no es la última, estará en blanco.
Punto
x():double
x(double)
y():double
y(double)
print()
Circulo
Circulo()
Circulo(Punto,double)
centro():Punto
centro(Punto)
radio():double
radio(double)
print()
Ph.D. Franklin Parrales 131
07/06/2022
Programación Orientada a Objetos Carrera de Software
Representaciones gráficas
Si lo que se quiere es omitir la información sobre métodos, entonces
se puede dejar en blanco o se puede quitar del todo:
Se pueden quitar las dos secciones de atributos y métodos, dejando
simplemente el nombre de la clase; es el menor nivel de detalle:
Punto
_x
_y
Circulo
_centro
_radio
Punto Circulo
Ph.D. Franklin Parrales 132
07/06/2022
Programación Orientada a Objetos Carrera de Software
Representaciones gráficas
Relaciones entre clases
Las relaciones entre las clases también se representan gráficamente.
La única relación entre clases que hemos visto es la de clientelismo:
Los objetos de la clase Circulo contienen objetos de la clase Punto.
La relación de clientelismo se representa conectando las clases
mediante líneas con un rombo en un extremo.
El rombo se coloca en la clase que contiene objetos de la otra:
Podemos indicar el número de objetos que se contienen:
Punto
Circulo
Punto
Circulo 1
Ph.D. Franklin Parrales 133
07/06/2022
Programación Orientada a Objetos Carrera de Software
Clases en Java
Una clase es una implementación de un tipo abstracto de datos.
datos + operaciones TAD
atributos + métodos Clase
Las clases, como los TAD, son declaraciones.
Ejemplares (lo que existe durante la ejecución):
variables para un TAD, objetos para una clase.
Los datos se identifican como atributos en la clase:
cada ejemplar (objeto) de la clase tendrá sus propios atributos.
Todos los objetos de una clase tienen definido un mismo conjunto
de métodos (operaciones).
Encapsulación de código y datos: la clase como módulo.
Ocultación de información: público/privado (interfaz/implementación).
Ph.D. Franklin Parrales 134
07/06/2022
Programación Orientada a Objetos Carrera de Software
Las clases en Java: la estructura class
Una clase define un determinado tipo de objetos.
Características de los objetos:
✓ Atributos (datos que contienen)
✓ Métodos (operaciones que se les puede aplicar)
La estructura class engloba las declaraciones de atributos y
métodos:
class Clase {
// Declaraciones de atributos y métodos
}
Nombre de la clase
Ph.D. Franklin Parrales 135
07/06/2022
Programación Orientada a Objetos Carrera de Software
Las clases en Java: atributos y métodos
Los atributos son variables. El tipo puede ser otra clase
o un tipo primitivo de Java (int, double, etcétera).
Se declaran fuera de todos los métodos.
Los métodos son declaraciones de funciones que contienen
el código que se ejecutará cuando se invoquen.
class Clase {
// Declaraciones de atributos
// Declaraciones de atributos
// Declaraciones de atributos
// ...
// Declaración de método
// Declaración de método
// Declaración de método
// ...
}
Ph.D. Franklin Parrales 136
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un ejemplo de clase: Punto
class Punto {
double _x; // atributo _x
double _y; // atributo _y
double x() { // método x()
return _x;
}
double y() { // método y()
return _y;
}
void x(double d) { // método x(double)
_x = d;
}
void y(double d) { // método y(double)
_y = d;
}
void print() { // método print()
System.out.print("(" + _x + "," + _y + ")");
}
}
2 atributos y 5 métodos
Sin método main()
→ No se puede ejecutar
Ph.D. Franklin Parrales 137
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un ejemplo de clase: Punto
La clase no puede ejecutarse por sí misma.
Es una definición que nos permite crear y
manipular objetos de esa clase.
La creación y manipulación de objetos se llevará
a cabo en alguna otra clase del programa.
Tal como está definida la clase anterior,
sólo se conocerá en el paquete en el que
se encuentre.
En el mismo archivo fuente puede haber otras clases,
como por ejemplo una que contenga el programa principal
(el método main() con el que comenzará la ejecución).
Vamos a crear en el mismo archivo fuente un programa principal que
cree y manipule objetos de la clase Punto.
Punto
_x
_y
x():double
x(double)
y():double
y(double)
print()
UML
Ph.D. Franklin Parrales 138
07/06/2022
Programación Orientada a Objetos Carrera de Software
Los objetos en Java
Los objetos se manejan a través de las variables. Se declaran
normalmente, pero utilizando el nombre de la clase como tipo:
NombreClase nombreObjeto;
Por ejemplo:
Punto miPunto;
Esto tan sólo declara una variable de ese tipo (clase),
pero NO crea nada. Los objetos se han de crear explícitamente
utilizando el operador new:
nombreObjeto = new NombreClase();
Por ejemplo:
miPunto = new Punto();
Ahora ya sí existe un objeto de clase Punto que se puede utilizar
a través de la variable miPunto.
Ph.D. Franklin Parrales 139
07/06/2022
Programación Orientada a Objetos Carrera de Software
Los objetos en Java
¿Qué podemos hacer con el objeto?
Acceder a sus características: atributos y métodos.
Para acceder a las características se utiliza la notación punto:
nombreObjeto.característica;
Por ejemplo:
miPunto._x
miPunto._y
miPunto.x()
miPunto.print()
...
Si se trata de un método, deberán incluirse los paréntesis
(y los argumentos, si es que tiene definidos parámetros).
La ejecución de un método se dice que es un paso de mensaje.
Objeto receptor del mensaje: miPunto.
Mensaje que se le pasa: x().
Ph.D. Franklin Parrales 140
07/06/2022
Programación Orientada a Objetos Carrera de Software
Los objetos en Java
class Punto {
...
}
public class Prueba {
// Programa principal
public static void main(String[] args)
{
Punto p = new Punto();
p.x(3);
p.print();
}
}
PruebaPunto.java
Muestra (3.0,0.0) → Los atributos se inicializan automáticamente
Punto.java
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 141
07/06/2022
Métodos
Los métodos de las clases son las unidades funcionales de Java.
Son similares a las funciones de otros lenguajes.
✓ modificadores: indican cómo (dónde) se puede invocar el método.
De momento, simplemente static.
✓ tipo: tipo de dato que devuelve el método (void si nada).
✓ parámetros: declaraciones separadas por comas.
[modificadores] tipo nombre (parámetros)
{
// Cuerpo del método
}
Cabecera
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 142
07/06/2022
Métodos
static int max(int num1, int num2)
{
int result;
if(num1 > num2) result = num1;
else result = num2;
return result;
}
✓ Para devolver valores se usa la instrucción return.
✓ El método termina al ejecutar una instrucción return
o al llegar a la llave de cierre.
static int max(int num1, int num2) {
if(num1 > num2) return num1;
else return num2;
}
Cada parámetro
con su tipo.
int num1, num2
Si el método no es
de tipo void, debe
terminar siempre
con un return.
Signatura
Se puede forzar el fin de un método void con una instrucción return;
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 143
07/06/2022
Métodos: invocación
int mayor = max(3, 4);
int num1, num2;
...
mayor = max(num1, num2);
System.out.println(12 * max(num1, num2) – 3);
max(num1, num2); // válido, pero se pierde el resultado
✓ Los métodos de tipo void sólo se pueden invocar
como instrucciones independientes:
static void algo(...) {
...
}
algo(...);
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 144
07/06/2022
Métodos: invocación
✓ Los métodos static se pueden invocar directamente (con su
nombre) en los demás métodos de su misma clase:
public class MayorMenor {
public static void main(String[] args){
int num1, num2, mayor, menor;
...
mayor = max(num1, num2);
menor = min(num1, num2);
}
static int max(int num1, int num2) {
if(num1 > num2) return num1;
else return num2;
}
static int min(int num1, int num2) {
if(num1 < num2) return num1;
else return num2;
}
}
MayorMenor.java
Paso de parámetros
POR VALOR.
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 145
07/06/2022
Ejercicios
– Modificar el programa MayorMenor para que muestre el mayor
y el menor de cuatro números.
– Crear un programa que pida al usuario un número entero largo
y muestre la suma de los dígitos del número.
Usará un método que se encargue de realizar dicha suma.
– Crear un programa que muestre los 100 primeros números primos.
Usará un método esPrimo() que indique si un número es o no
primo. Mostrará diez números primos por línea (y alineados en
columnas).
MayorMenor2
SumaDigitos
Primos
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 146
07/06/2022
Métodos: sobrecarga
✓ Los métodos se pueden sobrecargar: varios métodos con igual
nombre pero diferente signatura.
public class X {
public static void main(String[] args){
...
}
static int max(int num1, int num2) { ... }
static long max(long num1, long num2) { ... }
static float max(float num1, float num2) { ... }
static double max(double num1, double num2) { ... }
}
✓ Se sabe cuál usar por el tipo de los argumentos.
Sobrecarga.java
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 147
07/06/2022
Métodos: recursividad
✓ También llamada recursión, es la posibilidad de que un método
se invoque a sí mismo.
public class Factorial {
public static void main(String[] args){
long num;
System.out.print("Introduce el numero cuyo
factorial quieres calcular: ");
num = MyInput.readLong();
System.out.println("El factorial de " + num +
" es " + factorial(num));
}
static long factorial(long num) {
if(num == 1) return 1; // Caso base
return num * factorial(num - 1);
// Cada vez más cerca del caso base
}
} Factorial.java
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 148
07/06/2022
Ejercicios
– Crear un programa que calcule números de Fibonacci.
Pedirá el número del que se quiere calcular su Fibonacci.
F(0) = 0
F(1) = 1
F(N) = F(N-2) + F(N-1) si N > 1
– Crear un programa que indique los movimientos que hay que realizar
para resolver el problema de las torres de Hanoi.
Se pedirá el número de discos que se quieren mover.
Cada pedestal está identificado por una letra (A, B y C).
La torre está inicialmente en el A y se quiere llevar al C.
Para mover una torre de discos de un pedestal X a otro pedestal Y, el
primer movimiento es mover el disco superior de la torre al tercer
pedestal, que se usa como auxiliar.
Fibonacci
Hanoi
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 149
07/06/2022
Ejercicio de refuerzo
Desarrollar un programa que permita manipular fechas.
El día, el mes y el año serán variables de clase (static)
(se podrán acceder en cualquier método de la clase).
Los métodos que se desea que tenga el programa son:
✓ leer(): leerá del teclado el día, el mes y el año de la fecha.
✓ valida(): comprobará si la fecha leída es correcta
(entre el 1-1-1900 y el 31-12-2050); si no es válida,
la ajustará para que lo sea. Se llamará al final de leer().
✓ mostrarCorta(): mostrará la fecha en formato corto
(por ejemplo, 02-09-2003).
✓ bisiesto(): dirá si el año de la fecha es bisiesto.
✓ diasMes(mes): devolverá el número de días del mes
que se le pasa para el año de la fecha. . . .
Programación Orientada a Objetos Carrera de Software
Ph.D. Franklin Parrales 150
07/06/2022
Ejercicio de refuerzo
✓ diasTranscurridos(): devolverá el número de días
transcurridos desde el 1-1-1900 hasta la fecha.
✓ diaSemana(): devolverá el día de la semana de la fecha
(0 para domingo, 1 para lunes, ..., 6 para sábado).
El 1 de enero de 1900 fue domingo.
✓ mostrarLarga(): mostrará la fecha en formato largo
(por ejemplo, martes 2 de septiembre de 2020).
✓ fechaTras(dias): establecerá la fecha que corresponde
a haber pasado esos días desde el 1-1-1900.
✓ siguiente(): pasará al día siguiente.
El método main() servirá para probar los demás métodos.
Fecha
Ph.D. Franklin Parrales 151
07/06/2022
Programación Orientada a Objetos Carrera de Software
La palabra clave this
Si dentro de un método se necesita hacer referencia al objeto
receptor del correspondiente mensaje, se puede usar this.
Por ejemplo, si un parámetro se llama igual que un atributo, entonces
se puede acceder al atributo a través de this:
class Clase {
int dato = 0;
void dato(int dato) {
this.dato = dato;
}
}
Receptor.java
Ph.D. Franklin Parrales 152
07/06/2022
Programación Orientada a Objetos Carrera de Software
Variables de tipos primitivos frente a variables de objetos
Las variables que hemos utilizado hasta ahora, las que declaramos de
algún tipo primitivo (int, double, etcétera), son contenedores de
valores: la variable y su valor se consideran la misma cosa.
int unNumero = 4, otroNumero = 10;
Así, cuando se asigna una variable a otra, lo que se hace es
copiar el valor de una a la otra:
otroNumero = unNumero;
Las variables de objetos no funcionan de la misma forma ...
unNumero
4
otroNumero
10
unNumero
4
otroNumero
4 unNumero == otroNumero → true
Ph.D. Franklin Parrales 153
07/06/2022
Programación Orientada a Objetos Carrera de Software
Las variables de objetos son referencias
Las variables de objetos son referencias: la variable referencia a
un objeto, una entidad aparte que contiene atributos y responde
a ciertas operaciones (los métodos definidos en la clase).
Punto unPunto = new Punto();
Punto otroPunto = new Punto();
unPunto otroPunto
0.0
_x
0.0
_y
0.0
_x
0.0
_y
Ph.D. Franklin Parrales 154
07/06/2022
Programación Orientada a Objetos Carrera de Software
Las variables de objetos son referencias
Los objetos se manejan a través de sus referencias (variables).
Un objeto sólo se puede utilizar a través de alguna referencia suya.
unPunto.x(4);
otroPunto.y(7);
unPunto otroPunto
4.0
_x
0.0
_y
0.0
_x
7.0
_y
Ph.D. Franklin Parrales 155
07/06/2022
Programación Orientada a Objetos Carrera de Software
Las variables de objetos son referencias
Si se copian referencias (con el operador de asignación =),
lo que se consigue es tener varias referencias apuntando
a un mismo objeto.
otroPunto = unPunto;
unPunto otroPunto
4.0
_x
0.0
_y
0.0
_x
7.0
_y
Este objeto se ha perdido.
Ya no se puede acceder a él
de ninguna forma (no hay
referencia que lo apunte)
El “recolector de basura”
(garbage collector)
entra en acción
Ph.D. Franklin Parrales 156
07/06/2022
Programación Orientada a Objetos Carrera de Software
Las variables de objetos son referencias
Si se comparan dos referencias con el operador de igualdad (==),
lo que se comprueba es si apuntan al mismo objeto o no
(no se comprueba si los dos objetos son iguales).
otroPunto == unPunto en este momento es true.
unPunto otroPunto
4.0
_x
0.0
_y
0.0
_x
7.0
_y
Ph.D. Franklin Parrales 157
07/06/2022
Programación Orientada a Objetos Carrera de Software
Las variables de objetos son referencias
Punto unPunto = new Punto();
unPunto.x(4);
Punto otroPunto = new Punto();
otroPunto.x(4);
otroPunto == unPunto ahora es false.
unPunto otroPunto
4.0
_x
0.0
_y
4.0
_x
0.0
_y
Aunque los dos objetos
tengan el mismo estado
(mismos valores en sus
respectivos atributos).
Las variables referencias no se
inicializan automáticamente.
unPunto = null;
indicaría que unPunto
no apunta a ningún objeto.
Ph.D. Franklin Parrales 158
07/06/2022
Programación Orientada a Objetos Carrera de Software
Las variables de objetos son referencias
class Punto { ... }
public class Referencias {
public static void main(String[] args)
{
Punto uno = new Punto();
uno.x(3);
uno.y(7);
uno.print(); System.out.println();
Punto dos = uno;
dos.print(); System.out.println();
if(uno == dos) System.out.println("Son el mismo objeto");
dos = new Punto();
dos.print(); System.out.println();
if(uno != dos) System.out.println("No son el mismo objeto");
dos.x(15);
dos.y(23);
uno.print(); System.out.println();
dos.print(); System.out.println();
}
} Referencias.java
Ph.D. Franklin Parrales 159
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
Cuando pasamos a métodos variables que son referencias,
el paso de parámetro también se realiza por valor,
pero el resultado, a efectos prácticos, es equivalente
a un paso de parámetro por referencia.
La variable en sí se pasa por valor, pero al tratarse de una referencia,
el objeto al que referencia el argumento es el mismo
que el que referencia el parámetro.
Por ejemplo, supongamos que en una clase Parametros
hay un método traslada() como el siguiente:
public void traslada(Punto p, double dx, double dy) {
p.x(p.x() + dx);
p.y(p.y() + dy);
}
El método traslada el punto p una distancia dx en el eje de abscisas
y una distancia dy en el eje de ordenadas.
Ph.D. Franklin Parrales 160
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
Cuando pasamos un punto al método, se copia el argumento (una
referencia) en el parámetro (otra referencia). Como las referencias
son iguales, el objeto al que apuntan es el mismo y cualquier
modificación que hagamos sobre el objeto apuntado será efectiva.
public static void main(String[] args) {
Punto p1 = new Punto();
Circulo c1 = new Circulo(p1, 13);
c1.print(); System.out.println();
traslada(p1, 5, 13);
c1.print(); System.out.println();
}
Parametros.java
Ph.D. Franklin Parrales 161
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
traslada(p1, 5, 13);
0.0
_x
0.0
_y
p1
Ph.D. Franklin Parrales 162
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
traslada(p1, 5, 13);
public void traslada(Punto p, double dx, double dy) {
p.x(p.x() + dx);
p.y(p.y() + dy);
}
0.0
_x
0.0
_y
p1 p
5.0
dx
13.0
dy
Ph.D. Franklin Parrales 163
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
traslada(p1, 5, 13);
public void traslada(Punto p, double dx, double dy) {
p.x(p.x() + dx);
p.y(p.y() + dy);
}
5.0
_x
13.0
_y
p1 p
5.0
dx
13.0
dy
Ph.D. Franklin Parrales 164
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
traslada(p1, 5, 13);
5.0
_x
13.0
_y
p1
El objeto al que apunta
el argumento p1
se ha visto afectado
por las modificaciones
realizadas dentro del método
(a través del parámetro p).
Ph.D. Franklin Parrales 165
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
Si dentro del método se cambia el parámetro referencia,
haciendo que apunte a otro objeto,
el argumento referencia no se verá afectado,
de forma que después de la ejecución del método seguirá
apuntando al mismo objeto que antes.
public static void main(String[] args)
{
Punto p1 = new Punto();
Circulo c1 = new Circulo(p1, 13);
c1.print(); System.out.println();
otro(p1);
c1.print(); System.out.println();
}
public static void otro(Punto p) {
Punto tmp = new Punto(4, 5);
p = tmp;
}
Parametros2.java
Ph.D. Franklin Parrales 166
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
otro(p1);
...
public static void otro(Punto p) {
Punto tmp = new Punto(4, 5);
p = tmp;
}
0.0
_x
0.0
_y
p1
Ph.D. Franklin Parrales 167
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
otro(p1);
...
public static void otro(Punto p) {
Punto tmp = new Punto(4, 5);
p = tmp;
}
0.0
_x
0.0
_y
p1 p
Ph.D. Franklin Parrales 168
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
otro(p1);
...
public static void otro(Punto p) {
Punto tmp = new Punto(4, 5);
p = tmp;
}
0.0
_x
0.0
_y
p1 p
4.0
_x
5.0
_y
tmp
Ph.D. Franklin Parrales 169
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
otro(p1);
...
public static void otro(Punto p) {
Punto tmp = new Punto(4, 5);
p = tmp;
}
0.0
_x
0.0
_y
p1 p
4.0
_x
5.0
_y
tmp
Ph.D. Franklin Parrales 170
07/06/2022
Programación Orientada a Objetos Carrera de Software
Paso de objetos a métodos
otro(p1);
...
public static void otro(Punto p) {
Punto tmp = new Punto(4, 5);
p = tmp;
}
0.0
_x
0.0
_y
p1
Ph.D. Franklin Parrales 171
07/06/2022
Programación Orientada a Objetos Carrera de Software
Los atributos
Atributos: datos de tipos previamente definidos (primitivos) o
ejemplares (objetos) de otras clases.
Si se usan variables de tipos primitivos se habla a veces de
programación mixta o híbrida (P.O.O. + Programación con tipos).
Java incluye clases envoltorios para los tipos primitivos (Integer),
lo que permite una POO pura.
Si un atributo es un objeto de otra clase, simplemente se maneja en
la implementación como tal, pasándole mensajes.
Cuando una clase A hace uso de otra clase B al utilizar en su
implementación objetos de esa clase B (al pasar mensajes a atributos,
parámetros o variables locales que son objetos de esa clase),
se dice que la clase A es cliente de la clase B.
Primer tipo de relación que se establece entre las clases:
Relación de clientelismo
Ph.D. Franklin Parrales 172
07/06/2022
Programación Orientada a Objetos Carrera de Software
Otro ejemplo de clase: Circulo
public class Circulo {
public Circulo() { _radio = 0; } // Constructor
public Circulo(Punto p, double r) { // Constructor
_centro = p;
_radio = r;
}
public double radio() { return _radio; }
public Punto centro() { return _centro; }
public void radio(double r) { _radio = r; }
public void centro(Punto p) { _centro = p; }
public void print() {
System.out.print("[");
_centro.print(); // Pasa mensaje al objeto atributo
System.out.print("," + _radio + "]");
}
private double _radio;
private Punto _centro; // Atrib. objeto de otra clase
}
Circulo.java
Devolución de objeto
Objeto parámetro
La clase Circulo es cliente de la clase Punto
Ph.D. Franklin Parrales 173
07/06/2022
Programación Orientada a Objetos Carrera de Software
Convenios de denominación
Para dar nombre a los elementos de los programas se puede utilizar
cualquier convenio de denominación, pero lo mejor es utilizar uno y
ser consecuente. Aquí vamos a seguir las siguientes reglas:
✓ Los identificadores se escribirán en general en minúsculas,
a excepción, en los casos que se indique, de ciertas letras.
✓ Las clases comenzarán por mayúscula: Punto, Circulo.
✓ Los atributos comenzarán por subrayado: _centro, _x.
✓ Los métodos comenzarán por minúscula: print(), centro().
(Excepción: constructores, que se llaman igual que la clase.)
✓ Lo objetos comenzarán por minúscula: objeto1, punto.
✓ Métodos accedentes: nombre del atributo sin subrayado: x(), y().
✓ Métodos mutadores: nombre del atributo sin subrayado: x(), y().
✓ Identificadores compuestos por varias palabras: la segunda y
siguientes palabras llevarán su primera letra en mayúscula:
listaObjetosGraficos, CirculoColor.
Ph.D. Franklin Parrales 174
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un problema con la clase Circulo
El constructor predeterminado de la clase Circulo
sólo inicializa explícitamente el atributo _radio,
por lo que el otro atributo (_centro) es inicializado automáticamente
por el compilador.
Como se trata de una referencia a objeto, se inicializa a null
(lo que significa que no hace referencia aún a ningún objeto).
Entonces, corremos el riesgo de que se produzca un error
en el método print():
public void print() {
System.out.print("[");
_centro.print();
System.out.print("," + _radio + "]");
}
Si _centro es null, no apunta a ningún objeto; no se puede pasar
mensaje alguno; el programa falla (eleva una excepción).
Circulos.java
Ph.D. Franklin Parrales 175
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un problema con la clase Circulo
Podemos solucionar este problema de dos formas:
1. Comprobando si la referencia apunta a un objeto
antes de intentar pasar el mensaje.
2. Asegurándonos de que la referencia siempre apunte a un objeto.
Con la primera solución el método print() quedará así:
public void print() {
System.out.print("[");
if(_centro == null) System.out.print("(null)");
else _centro.print();
System.out.print("," + _radio + "]");
}
Ahora simplemente se muestra (null) como centro
si no se ha asignado ningún Punto a _centro.
Circulo2.java
Ph.D. Franklin Parrales 176
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un problema con la clase Circulo
Con la segunda solución, el constructor predeterminado de la clase
Circulo creará el objeto Punto para el _centro, de forma que
todos los objetos Circulo que se creen dispongan desde el principio
de su objeto Punto como _centro:
public Circulo3() {
_radio = 0;
_centro = new Punto();
}
El constructor predeterminado de la clase Punto
(añadido automáticamente en este caso por el compilador)
se encarga de inicializar los atributos del Punto.
Nos aseguramos así de que todo se inicializará adecuadamente
(encadenamiento de inicializaciones).
Circulo3.java
Ph.D. Franklin Parrales 177
07/06/2022
Programación Orientada a Objetos Carrera de Software
La vida de los objetos
En Java es el sistema el que se encarga de destruir los objetos.
El entorno de ejecución de Java dispone de un recolector de basura
que destruye los objetos (liberando su memoria) cuando detecta
que los objetos ya no son accesibles (se han perdido).
Cuando ya no hay ninguna variable que haga referencia a un objeto,
bien directamente o bien mediante atributos de otros objetos,
entonces el recolector de basura sabe que puede eliminar
el objeto sin riesgos.
Ph.D. Franklin Parrales 178
07/06/2022
Programación Orientada a Objetos Carrera de Software
Clonación de objetos
La copia de referencias, como hemos visto, tan sólo hace
que las dos referencias apunten al mismo objeto.
Si necesitamos obtener una copia de un objeto, debemos encargarnos
nosotros mismos de hacer las copias oportunas.
Basta con que añadamos en cada clase un método copia()
que devuelva una copia del objeto receptor. El método creará
un objeto de la clase, copiará en él los atributos del objeto receptor
que sean valores simples (tipos primitivos) o pedirá una copia
de los atributos que sean objetos a las correspondientes clases,
y devolverá el objeto creado (que será una copia del receptor).
public class Punto {
public Punto copia() {
Punto tmp = new Punto();
tmp._x = _x;
tmp._y = _y;
return tmp;
} ...
Punto3.java
Ph.D. Franklin Parrales 179
07/06/2022
Programación Orientada a Objetos Carrera de Software
Clonación de objetos
public class Circulo {
public Circulo copia() {
Circulo tmp = new Circulo();
tmp._radio = _radio;
tmp._centro = _centro.copia();
return tmp;
}
...
public class Clonacion {
public static void main(String[] args) {
Circulo4 c1 = new Circulo4();
c1.print(); System.out.print(" ");
Circulo4 c2 = c1.copia();
c2.print(); System.out.println();
c1.radio(4);
c1.print(); System.out.print(" ");
c2.print(); System.out.println();
Punto3 p = new Punto3(1, 1);
c2.centro(p);
c1.print(); System.out.print(" ");
c2.print(); System.out.println();
}
}
Clonacion.java
Circulo4.java
Ph.D. Franklin Parrales 180
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
¿Cuántos objetos se crean en el siguiente programa?
¿Cuántos quedan inaccesibles (se pierden)?
public class Objetos {
public static void main(String[] args)
{
Circulo c1 = new Circulo();
Punto p1 = new Punto();
c1.radio(7);
c1.centro(p1);
Circulo c2 = new Circulo(p1, 13);
Punto p2 = new Punto(5, 2);
c1.centro(p2);
Circulo c3 = c2;
p1 = new Punto(1, 1);
c3.centro(p1);
}
} Objetos.java
Ph.D. Franklin Parrales 181
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c1
?
c1
Ph.D. Franklin Parrales 182
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c1 new Circulo();
?
_radio
?
_centro
?
c1
Ph.D. Franklin Parrales 183
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c1 new Circulo();
_radio = 0;
?
_radio
?
_centro
?
c1
0.0
Ph.D. Franklin Parrales 184
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c1 new Circulo();
_radio = 0;
new Punto();
0.0
_x
0.0
_y
0.0
_radio
?
_centro
?
c1
Ph.D. Franklin Parrales 185
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c1 new Circulo(); _radio = 0;
_centro = new Punto();
0.0
_radio
_centro
?
c1
0.0
_x
0.0
_y
Ph.D. Franklin Parrales 186
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c1 = new Circulo();
0.0
_radio
_centro
c1
0.0
_x
0.0
_y
Ph.D. Franklin Parrales 187
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c1 = new Circulo();
Punto p1 = new Punto();
0.0
_radio
_centro
c1
0.0
_x
0.0
_y
0.0
_x
0.0
_y
p1
Ph.D. Franklin Parrales 188
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c1 = new Circulo();
Punto p1 = new Punto();
c1.radio(7);
7.0
_radio
_centro
c1
0.0
_x
0.0
_y
0.0
_x
0.0
_y
p1
Ph.D. Franklin Parrales 189
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c1 = new Circulo();
Punto p1 = new Punto();
c1.radio(7);
c1.centro(p1);
7.0
_radio
_centro
c1
0.0
_x
0.0
_y
0.0
_x
0.0
_y
p1
public void centro(Punto p) {
_centro = p;
}
Ph.D. Franklin Parrales 190
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c1 = new Circulo();
Punto p1 = new Punto();
c1.radio(7);
c1.centro(p1);
PERDIDO
7.0
_radio
_centro
c1
0.0
_x
0.0
_y
0.0
_x
0.0
_y
p1
Ph.D. Franklin Parrales 191
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Punto p1 = new Punto();
c1.radio(7);
c1.centro(p1);
Circulo c2 = new Circulo(p1, 13);
PERDIDO
7.0
_radio
_centro
c1
0.0
_x
0.0
_y
0.0
_x
0.0
_y
p1
13.0
_radio
_centro
c2
Ph.D. Franklin Parrales 192
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
c1.radio(7);
c1.centro(p1);
Circulo c2 = new Circulo(p1, 13);
Punto p2 = new Punto(5, 2);
PERDIDO
7.0
_radio
_centro
c1
0.0
_x
0.0
_y
0.0
_x
0.0
_y
p1
13.0
_radio
_centro
c2
5.0
_x
2.0
_y
p2
Ph.D. Franklin Parrales 193
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
c1.centro(p1);
Circulo c2 = new Circulo(p1, 13);
Punto p2 = new Punto(5, 2);
c1.centro(p2);
PERDIDO
7.0
_radio
_centro
c1
0.0
_x
0.0
_y
0.0
_x
0.0
_y
p1
13.0
_radio
_centro
c2
5.0
_x
2.0
_y
p2
Ph.D. Franklin Parrales 194
07/06/2022
Programación Orientada a Objetos Carrera de Software
Un mundo de objetos
Circulo c2 = new Circulo(p1, 13);
Punto p2 = new Punto(5, 2);
c1.centro(p2);
Circulo c3 = c2;
PERDIDO
7.0
_radio
_centro
c1
0.0
_x
0.0
_y
0.0
_x
0.0
_y
p1
13.0
_radio
_centro
c2
5.0
_x
2.0
_y
p2
c3
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a Objetos

More Related Content

What's hot

Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Josue Lara Reyes
 
Tabla comparativa de programacion orientada , objetos y estructurada.
Tabla comparativa de programacion orientada , objetos y estructurada.Tabla comparativa de programacion orientada , objetos y estructurada.
Tabla comparativa de programacion orientada , objetos y estructurada.Sandy Montoya Reyes
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..NANO-06
 
Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..NANO-06
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosJosé Antonio Sandoval Acosta
 
DB1 Unidad 1: Sistemas de almacenamiento de la información
DB1 Unidad 1: Sistemas de almacenamiento de la informaciónDB1 Unidad 1: Sistemas de almacenamiento de la información
DB1 Unidad 1: Sistemas de almacenamiento de la informaciónFranklin Parrales Bravo
 
ED Unidad 1: Introducción a las estructuras de datos (TDA) con objetos
ED Unidad 1: Introducción a las estructuras de datos (TDA) con objetosED Unidad 1: Introducción a las estructuras de datos (TDA) con objetos
ED Unidad 1: Introducción a las estructuras de datos (TDA) con objetosFranklin Parrales Bravo
 
Paradigmas de programacion
Paradigmas de programacionParadigmas de programacion
Paradigmas de programacionyamy matin
 
Guia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansGuia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansEmerson Garay
 
Diagramas Analisis
Diagramas AnalisisDiagramas Analisis
Diagramas Analisisinnovalabcun
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesJosé Antonio Sandoval Acosta
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Rubi Veronica Chimal Cuxin
 
Programacion estructurada en objetos
Programacion estructurada en objetosProgramacion estructurada en objetos
Programacion estructurada en objetosAngel Ordoñez
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosFranklin Parrales Bravo
 

What's hot (20)

Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)
 
Tabla comparativa de programacion orientada , objetos y estructurada.
Tabla comparativa de programacion orientada , objetos y estructurada.Tabla comparativa de programacion orientada , objetos y estructurada.
Tabla comparativa de programacion orientada , objetos y estructurada.
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..
 
Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
 
Colas
ColasColas
Colas
 
DB1 Unidad 1: Sistemas de almacenamiento de la información
DB1 Unidad 1: Sistemas de almacenamiento de la informaciónDB1 Unidad 1: Sistemas de almacenamiento de la información
DB1 Unidad 1: Sistemas de almacenamiento de la información
 
Conceptos Fundamentales de Base de Datos
Conceptos Fundamentales de Base de DatosConceptos Fundamentales de Base de Datos
Conceptos Fundamentales de Base de Datos
 
ED Unidad 1: Introducción a las estructuras de datos (TDA) con objetos
ED Unidad 1: Introducción a las estructuras de datos (TDA) con objetosED Unidad 1: Introducción a las estructuras de datos (TDA) con objetos
ED Unidad 1: Introducción a las estructuras de datos (TDA) con objetos
 
Paradigmas de programacion
Paradigmas de programacionParadigmas de programacion
Paradigmas de programacion
 
Guia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansGuia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeans
 
Diagramas Analisis
Diagramas AnalisisDiagramas Analisis
Diagramas Analisis
 
Estructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no linealesEstructura de Datos - Unidad 4 Estructuras no lineales
Estructura de Datos - Unidad 4 Estructuras no lineales
 
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
 
Algoritmos de ordenamiento externos
Algoritmos de ordenamiento externosAlgoritmos de ordenamiento externos
Algoritmos de ordenamiento externos
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
Estructuras de datos
Estructuras de datosEstructuras de datos
Estructuras de datos
 
Programacion estructurada en objetos
Programacion estructurada en objetosProgramacion estructurada en objetos
Programacion estructurada en objetos
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivos
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 

Similar to POO Unidad 1: Introducción a la Programación Orientada a Objetos

Taller de programación clase #1
Taller de programación   clase #1Taller de programación   clase #1
Taller de programación clase #1Juan Cardona
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosDoris Aguagallo
 
POOI- Unidad 1.pdf
POOI- Unidad 1.pdfPOOI- Unidad 1.pdf
POOI- Unidad 1.pdfWillGuzman3
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java Eudris Cabrera
 
[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma JavaEudris Cabrera
 
AITEC -Curso introducción al desarrollo de aplicaciones con java
AITEC -Curso introducción al desarrollo de aplicaciones con javaAITEC -Curso introducción al desarrollo de aplicaciones con java
AITEC -Curso introducción al desarrollo de aplicaciones con javaFranklin David Moya Dávila
 
Programación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a ObjetosProgramación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a Objetosanytrix
 
Apuntes ejercicios programacion i
Apuntes ejercicios programacion iApuntes ejercicios programacion i
Apuntes ejercicios programacion iRicardo Ramos
 
Programacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptProgramacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptRobert Moreira
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaglfloresgilberto
 
Mi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de PreferenciaMi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de PreferenciaNelson Rivera
 
Mi lenguaje de programacion de preferencia
Mi lenguaje de programacion de preferenciaMi lenguaje de programacion de preferencia
Mi lenguaje de programacion de preferenciaNelson Rivera
 
Tutorial de prolog
Tutorial de prologTutorial de prolog
Tutorial de prologPedro Vera
 

Similar to POO Unidad 1: Introducción a la Programación Orientada a Objetos (20)

Programación con java en Eclipse
Programación con java en EclipseProgramación con java en Eclipse
Programación con java en Eclipse
 
Lp pract2006
Lp pract2006Lp pract2006
Lp pract2006
 
Taller de programación clase #1
Taller de programación   clase #1Taller de programación   clase #1
Taller de programación clase #1
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetos
 
POOI- Unidad 1.pdf
POOI- Unidad 1.pdfPOOI- Unidad 1.pdf
POOI- Unidad 1.pdf
 
S01.s1 - Lenguaje Java-1.pdf
S01.s1 - Lenguaje Java-1.pdfS01.s1 - Lenguaje Java-1.pdf
S01.s1 - Lenguaje Java-1.pdf
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java
 
[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java
 
AITEC -Curso introducción al desarrollo de aplicaciones con java
AITEC -Curso introducción al desarrollo de aplicaciones con javaAITEC -Curso introducción al desarrollo de aplicaciones con java
AITEC -Curso introducción al desarrollo de aplicaciones con java
 
Programación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a ObjetosProgramación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a Objetos
 
Apuntes ejercicios programacion i
Apuntes ejercicios programacion iApuntes ejercicios programacion i
Apuntes ejercicios programacion i
 
Java12
Java12Java12
Java12
 
Programacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptProgramacion orientada a objetos en javascript
Programacion orientada a objetos en javascript
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
 
Mi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de PreferenciaMi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de Preferencia
 
Mi lenguaje de programacion de preferencia
Mi lenguaje de programacion de preferenciaMi lenguaje de programacion de preferencia
Mi lenguaje de programacion de preferencia
 
Tutorial de prolog
Tutorial de prologTutorial de prolog
Tutorial de prolog
 
FPJUCE - Capitulo1
FPJUCE - Capitulo1FPJUCE - Capitulo1
FPJUCE - Capitulo1
 
Programacion de algoritmos
Programacion de algoritmosProgramacion de algoritmos
Programacion de algoritmos
 
¿QUE ES JAVA?
¿QUE ES JAVA?¿QUE ES JAVA?
¿QUE ES JAVA?
 

More from Franklin Parrales Bravo

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaFranklin Parrales Bravo
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebFranklin Parrales Bravo
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaFranklin Parrales Bravo
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosFranklin Parrales Bravo
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebFranklin Parrales Bravo
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaFranklin Parrales Bravo
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasFranklin Parrales Bravo
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosFranklin Parrales Bravo
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosFranklin Parrales Bravo
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosFranklin Parrales Bravo
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosFranklin Parrales Bravo
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraFranklin Parrales Bravo
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareFranklin Parrales Bravo
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software Franklin Parrales Bravo
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoFranklin Parrales Bravo
 
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4Franklin Parrales Bravo
 
RD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y RedesRD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y RedesFranklin Parrales Bravo
 
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventosPOE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventosFranklin Parrales Bravo
 
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...Franklin Parrales Bravo
 

More from Franklin Parrales Bravo (20)

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en Cuenca
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería Web
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicua
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelos
 
MOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modeladoMOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modelado
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuida
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidas
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgos
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectos
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestra
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y Enrutamiento
 
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
 
RD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y RedesRD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y Redes
 
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventosPOE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
 
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
 

POO Unidad 1: Introducción a la Programación Orientada a Objetos

  • 1. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 0 07/06/2022 Introducción a la Programación Orientada a Objetos Unidad 1 Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo para uso de los cursos de Programación Orientada a Objetos
  • 2. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 1 07/06/2022 Objetivo general de la Unidad 1 Expresar entidades del mundo real en clases, objetos, atributos y métodos utilizando un lenguaje de programación orientado a objetos.
  • 3. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 2 07/06/2022 Contenido ▪ Introducción al Lenguaje de Programación Orientada a Objetos y Plataformas de desarrollo. ▪ Variables, Tipos de datos, Operadores y alcance ▪ Sentencias, Uso de bucles (for, while, do while) y condicionales (if, switch) ▪ Arreglo de tipos de datos simples ▪ Conceptos Básicos de POO: abstracción, clases, objetos, atributos, métodos, operador this, parámetros por valor y referencia.
  • 4. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 3 07/06/2022 Un sistema es… ▪ Un conjunto de elementos que interactúan entre sí ▪ Una Universidad es un sistema en la que las personas interactúan entre sí ▪ En un sistema Orientado a Objetos los elementos toman el nombre de “Objetos”
  • 5. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 4 07/06/2022 Topología de un sistema estructurado Topología de un sistema orientado a objetos Modelado Estructurado vs O-O
  • 6. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 5 07/06/2022 Un sistema Orientado a Objetos es ... ...como una empresa Gerente General Los colaboradores del gerente Los colaboradores de los colaboradores del gerente Algunas personas tienen la misma función colaboraciones
  • 7. Ph.D. Franklin Parrales 6 07/06/2022 Programación Orientada a Objetos Carrera de Software Características del lenguaje Java ✓ Sencillo (en comparación con su predecesor C++). Sin punteros. Sin herencia múltiple (interfaces). Gestión automática de la memoria dinámica (garbage collector). Sintaxis sencilla (pocas construcciones de programa). ✓ Orientado a objetos. Programación híbrida o mixta (clases + tipos). ✓ Distribuido. Las clases pueden estar ubicadas en distintas máquinas de la red.
  • 8. Ph.D. Franklin Parrales 7 07/06/2022 Programación Orientada a Objetos Carrera de Software Características del lenguaje Java ✓ Interpretado.
  • 9. Ph.D. Franklin Parrales 8 07/06/2022 Programación Orientada a Objetos Carrera de Software Características del lenguaje Java ✓ Independiente de la plataforma.
  • 10. Ph.D. Franklin Parrales 9 07/06/2022 Programación Orientada a Objetos Carrera de Software Características del lenguaje Java ✓ Robusto (fiable). Sin construcciones peligrosas (punteros). Manejo de excepciones. ✓ Seguro. Mecanismos de seguridad que protegen el sistema. ✓ Portable. ✓ Multihebra.
  • 11. Ph.D. Franklin Parrales 10 07/06/2022 Programación Orientada a Objetos Carrera de Software Características del lenguaje Java ✓ Rendimiento de Java: Menor que otros lenguajes como C++. Mejor con cada nueva versión de la JVM. Tecnología JIT (Just-in-Time Compilation): Java Bytecode Java Bytecode Compiler Native Machine Code
  • 12. Ph.D. Franklin Parrales 11 07/06/2022 Programación Orientada a Objetos Carrera de Software Herramientas de desarrollo java (Máquina Virtual) javac (Compilador a bytecode) javadoc (Documentador) jdb (Depurador de consola) clases java.* Documentación JDK - Java Development toolKit Modelado visual Depuración Rapidez de desarrollo Entornos RAD JBuilder Visual Cafe Forte JCreator … Instalación del JDK
  • 13. Ph.D. Franklin Parrales 12 07/06/2022 Programación Orientada a Objetos Carrera de Software Tecnologías Java Servlets Java Server Pages Aplicaciones web JDBC Conexión con bases de datos Applets W W W Java3D Java2D Programación de gráficos Enterprise JavaBeans RMI Programación distribuida CORBA AWT Programación de interfaces gráficas Swing JavaBeans JNI Programación en general java.* JINI Sistemas empotrados JavaSpaces
  • 14. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 13 07/06/2022 IDEs
  • 15. Ph.D. Franklin Parrales 14 07/06/2022 Programación Orientada a Objetos Carrera de Software El típico primer programa: HolaMundo.java HolaMundo.java // HolaMundo.java public class HolaMundo { public static void main(String[] args) { System.out.println("Hola mundo"); } } Comentarios (en verde) Palabras reservadas (en azul) Cadenas de caracteres Objetos
  • 16. Ph.D. Franklin Parrales 15 07/06/2022 Programación Orientada a Objetos Carrera de Software El típico primer programa: HolaMundo.java ✓ Las clases pueden ser públicas o privadas. ✓ En cada archivo fuente debe haber una sola clase pública y ha de llamarse igual que el archivo fuente. ✓ Alguna clase del programa debe tener el método main(), que es con el que comienza la ejecución. HolaMundo.java // HolaMundo.java public class HolaMundo { public static void main(String[] args) { System.out.println("Hola mundo"); } }
  • 17. Ph.D. Franklin Parrales 16 07/06/2022 Programación Orientada a Objetos Carrera de Software ¿Cómo es el programa? ✓ Dejando aparte el comentario inicial, lo que tenemos es una definición de una clase: public class HolaMundo { ... } Es una clase pública (accesible desde fuera del paquete). ✓ Dentro de la clase se define un único método: public static void main(String[] args) { System.out.println("Hola mundo"); } También el método es público. Es un método de clase (static) y no devuelve nada (void).
  • 18. Ph.D. Franklin Parrales 17 07/06/2022 Programación Orientada a Objetos Carrera de Software ¿Qué hace el programa? ✓ Se ejecuta el método main(): public static void main(String[] args) { System.out.println("Hola mundo"); } El método está preparado para aceptar argumentos de línea de órdenes, pero en este caso no hacemos nada con ellos. ✓ Tan sólo se pasa un mensaje: System.out.println("Hola mundo"); El objeto estático out de la clase System recibe el mensaje println() con la cadena que se quiere mostrar. El objeto out representa la pantalla, lugar donde se imprime la cadena.
  • 19. Ph.D. Franklin Parrales 18 07/06/2022 Programación Orientada a Objetos Carrera de Software Compilación y ejecución del programa ✓ Se puede compilar el programa con javac, el compilador de línea del JDK. Se crean tantos .class como clases haya. ✓ Una vez que hemos compilado el código fuente, podemos ejecutar el método main() con java, el intérprete de Java que hay en el JDK. ✓ El compilador debe poder encontrar las bibliotecas con las clases utilizadas (CLASSPATH).
  • 20. Ph.D. Franklin Parrales 19 07/06/2022 Programación Orientada a Objetos Carrera de Software Compilación y ejecución del programa
  • 21. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 20 07/06/2022 Contenido ▪ Introducción al Lenguaje de Programación Orientada a Objetos y Plataformas de desarrollo. ▪ Variables, Tipos de datos, Operadores y alcance ▪ Sentencias, Uso de bucles (for, while, do while) y condicionales (if, switch) ▪ Arreglo de tipos de datos simples ▪ Conceptos Básicos de POO: abstracción, clases, objetos, atributos, métodos, operador this, parámetros por valor y referencia.
  • 22. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 21 07/06/2022 Un par de cosas sobre las clases ✓ Un programa está compuesto por un conjunto de clases (al menos una). Las clases son los módulos del programa. ✓ Una clase consiste en unos datos (atributos) y unas funciones (métodos). Debe haber un método main() en una de las clases. Una plantilla para los primeros programas de prueba: // Programa.java public class Programa { // Declaraciones globales public static void main(String[] args) { // Declaraciones locales // Instrucciones } }
  • 23. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 22 07/06/2022 Comentarios ✓ Tres tipos de comentarios: // De una sola línea /* De una ó más líneas */ /** De documentación, de una o varias líneas. Justo antes del elemento que documenta (clase, método, etcétera) */ ✓ Los comentarios de documentación son utilizados por javadoc para generar documentación en formato HTML. Pueden llevar etiquetas.
  • 24. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 23 07/06/2022 Comentarios: etiquetas para javadoc ✓ Etiquetas para referencias: @see <otra clase> ✓ Etiquetas de documentación de clases: @version <información sobre la versión> @author <nombre autor> ✓ Etiquetas de documentación de métodos: @param <nombre argumento><descripción> @return <descripción> @exception <excepción
  • 25. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 24 07/06/2022 Comentarios: ejemplo de uso de javadoc HolaMundo.java // Hola.java /** Primera clase de prueba @author Franklin Parrales @version 1.0 @see Adios */ public class HolaMundo { /** Método principal @param args argumentos de línea de órdenes @return nada */ public static void main(String[] args) { System.out.println("Hola mundo"); } }
  • 26. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 25 07/06/2022
  • 27. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 26 07/06/2022 Comentarios: resultado de javadoc javadoc HolaMundo.java HolaMundo.html y otras páginas más.
  • 28. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 27 07/06/2022 Identificadores ✓ En Java, un identificador comienza con una letra, un subrayado (_) o un símbolo de dólar ($). Los siguientes caracteres pueden ser letras o dígitos. Convenios: ✓ Nombre de clase: empieza por mayúscula.. ✓ Nombre de método o atributo: empieza por minúscula (quizá con un subrayado delante para los atributos). ✓ Las constantes: todo en mayúsculas. ✓ Identificadores formados por varias palabras: comienzo de cada nueva palabra en mayúsculas (dibujaRectangulo) Java distingue entre mayúsculas y minúsculas
  • 29. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 28 07/06/2022 Palabras reservadas abstract continue for new switch boolean default goto null synchronized break do if package this byte double implements private threadsafe byvalue else import protected throw case extends instanceof public transient catch false int return true char final interface short try class finally long static void const float native super while
  • 30. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 29 07/06/2022 Separadores () Para delimitar listas de parámetros o de argumentos. Para modificar la precedencia en una expresión. Para delimitar condiciones. Para realizar conversiones de tipo (moldes o casting). {} Para definir bloques de código. Para delimitar listas de valores iniciales de los vectores (arrays). [] Para declarar vectores y referenciar elementos de los mismos. ; Para terminar instrucciones. , Para separar identificadores en declaraciones. Para encadenar expresiones (operador coma). . Para acceder a atributos de objetos u objetos globales de clases. Para pasar mensajes a objetos. Para acceder a un subpaquete de un paquete.
  • 31. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 30 07/06/2022 Tipos de datos numéricos Tipo byte short int long float double Tamaño 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits Valor mínimo -128 -32768 -2147483648 < -9 x 1018 +/- 3.4 x 1038 con 7 dígitos significativos +/- 1.7 x 10308 con 15 dígitos significativos Valor máximo 127 32767 2147483647 > 9 x 1018 Promoción de tipos Un tipo A es de mayor rango que un tipo B si A es superconjunto de B. Las variales de tipo B siempre se pueden asignar a las de tipo A double > float > long > int > short > byte
  • 32. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 31 07/06/2022 Tipos de datos no numéricos boolean: true false char: caracteres (16 bits) Clases envolventes de tipos básicos: Integer Long Float Double Boolean Character Permiten manipular los tipos primitivos como objetos
  • 33. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 32 07/06/2022 Literales ✓ Numéricos: como en otros lenguajes. Para que una constante sea long y no int, se añade una L (29L). Para que una constante sea float y no double, se añade una F. ✓ Literales de carácter: entre comillas simples ('a'). Ciertos caracteres especiales se pueden representar utilizando secuencias de escape: n para un salto de línea (u000A). t para un tabulador (u0009). b para un retroceso (u0008). r para un retorno de carro (u000D). ✓ Literales de cadenas de caracteres: entre comillas dobles "Hola mundo"
  • 34. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 33 07/06/2022 Variables: declaración tipo nombre; tipo nombre = expresión; // inicialización tipo nombre1, nombre2,...; tipo nombre1 = exp1, nombre2 = exp2, ...; long suma = 234; int altura = 23, ancho = 45; double resultado = 0.0; float area = 23 * 45; boolean encontrado = false; char nl = 'n'; Variables.java
  • 35. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 34 07/06/2022 Variables: consideraciones ✓ Variables compuestas por más de una palabra: iniciales en mayúscula menos la primera (nombreDato). ✓ Variables globales de la clase: si no se inicializan explícitamente, se les asigna un valor por defecto. ✓ Variables locales de los métodos: deben inicializarse siempre de forma explícita. El modificador final Impide que se altere el valor de la variable (constante): final int ANCHURA_MAXIMA = 120; final double PI = 3.1416; final int ABRIR_ARCHIVO = 1; Por convenio, las constantes se escriben en mayúsculas.
  • 36. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 35 07/06/2022 Constantes de clase ✓ Accesibles en toda la clase. ✓ Se declaran en la sección de declaraciones globales de la clase. ✓ Se declaran como static (de clase) y final (inmodificables), asignándoles el valor en la declaración. public class Pruebas { static final double PI = 3.14159265; public static void main (String[] args) { System.out.println(PI); } }
  • 37. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 36 07/06/2022 Bloques y ámbito de los identificadores ✓ Las llaves delimitan bloques de código: { ... } ✓ Los bloques están anidados unos dentro de otros (a excepción del bloque correspondiente a la clase entera). ✓ Las reglas de ámbito (alcance) y visibilidad de los identificadores son las habituales: ➢ El ámbito es el bloque en el que está definido (junto con todos los bloques que contenga). ➢ La visibilidad es menor que el ámbito si en bloques interiores se declaran otros identificadores iguales. Nota: Java permite que haya variables locales de los métodos con igual nombre que atributos de la clase (los ocultan), pero no permite que dentro de los métodos se use dos veces un mismo identificador. ✓ Por defecto, las variables se crean cuando se entra en su ámbito y se destruyen cuando se sale de él.
  • 38. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 37 07/06/2022 Operadores Operador de asignación = variable = expresión; Operadores aritméticos Unarios: + - ++ (incremento) -- (decremento) x = y++; // Se asigna y a x; luego se incrementa y x = ++y; // Se incrementa y; luego se asigna y a x Binarios: + - * / % (módulo) Ternario: ? (x < y) ? x : y (si x < y, entonces x, si no y) Abreviaturas x += y; equivale a x = x + y; x -= y; equivale a x = x - y; x *= y; equivale a x = x * y; x /= y; equivale a x = x / y; x %= y; equivale a x = x % y; Area.java
  • 39. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 38 07/06/2022 Operadores Operadores relacionales == != < <= > >= Operadores lógicos (booleanos) Evaluación perezosa ! Negación (NOT) && Conjunción (AND) (& para evaluación no perezosa) || Disyunción (OR) (| para evaluación no perezosa) ^ O exclusiva (XOR) Conversiones de tipos: los moldes (casts) La promoción de tipos es automática (de menor a mayor). Las conversiones de tipos mayores a tipos menores se debe hacer explícita por medio de moldes: el tipo deseado entre paréntesis. (tipo) expresión El molde precede a lo que se quiere convertir. Casting.java
  • 40. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 39 07/06/2022 Operadores: precedencia Mayor moldes ++ -- (prefijos) ! * / % + - < <= > >= == != & ^ | && || Menor = += -= *= /= %= Los paréntesis nos permiten pasar por alto la precedencia
  • 41. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 40 07/06/2022 Entrada/salida básica Java no proporciona métodos directos para leer datos del teclado. Proporciona métodos para leer líneas. Una clase MyInput para leer números y cadenas del teclado: MyInput.java ... public class MyInput { public static String readString() { ... } public static int readInt() { ... } public static double readDouble() { ... } public static byte readByte() { ... } public static short readShort() { ... } public static long readLong() { ... } public static float readFloat() { ... } } Reproducido de “Introduction to Java”, Y. Daniel Liang, Prentice Hall 2001.
  • 42. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 41 07/06/2022 Ejercicios Desarrollar un programa en una clase denominada AreaCirculo que pida el radio de un círculo y muestre el área del mismo.
  • 43. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 42 07/06/2022 Ejercicios Desarrollar un programa, con una clase que se denomine CalculoHipoteca, que permita calcular los pagos mensual y total de un crédito hipotecario. Pedirá la tasa de interés anual (porcentaje), el número de años y la cantidad a prestar. donde tasaInteresMensual está normalizada (entre 0 y 1). AB → Math.pow(A,B);  Si quieres que no se cambie de línea cuando imprimas en la pantalla: System.out.print(); 12 ) 1 ( 1 1  + −  = años sMensual tasaIntere sMensual tasaIntere cantidad l pagoMensua
  • 44. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 43 07/06/2022 Una clase muy útil para números: Math La clase Math proporciona dos constantes (Math.E y Math.PI) y muchos métodos (de clase) útiles para operaciones matemáticas. Es una clase del lenguaje (java.lang) y por eso se importa automáticamente. Algunos de los métodos de la clase son: Math.abs(num) Math.acos(num) Math.atan(num) Math.cos(num) Math.exp(num) Math.log(num) Math.max(a,b) Math.min(a,b) Math.pow(a,b) Math.random() Math.round(num) Math.sin(num) Math.sqrt(num) Math.tan(num) Math.toDegrees(num) Math.toRadians(num) Práctica: Rehacer los dos ejercicios anteriores para que el área del círculo sea más precisa y los resultados se muestren con dos decimales. AreaCirculo2 CalculoHipoteca2
  • 45. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 44 07/06/2022 Contenido ▪ Introducción al Lenguaje de Programación Orientada a Objetos y Plataformas de desarrollo. ▪ Variables, Tipos de datos, Operadores y alcance ▪ Sentencias, Uso de bucles (for, while, do while) y condicionales (if, switch) ▪ Arreglo de tipos de datos simples ▪ Conceptos Básicos de POO: abstracción, clases, objetos, atributos, métodos, operador this, parámetros por valor y referencia.
  • 46. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 45 07/06/2022 Instrucciones de control del flujo ✓ Instrucciones de selección condicional: ➢ Bifurcación: if if-else ➢ Selección múltiple: switch ✓ Instrucciones de bucles: ➢ Número de iteraciones predeterminado: for ➢ Bucles condicionales: while do-while ✓ Instrucciones de paso de control: break continue
  • 47. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 46 07/06/2022 Selección condicional: bifurcación Para la bifurcación condicional disponemos de la típica estructura if. Veamos sus distintas variaciones: if(condición) instrucción; if(condición) instrucción-if; else instrucción-else; if(condición) { secuencia-de-instrucciones; } if(condición) { secuencia-de-instrucciones-if; } else { secuencia-de-instrucciones-else; } condición true Instrucción o bloque if false Instrucción o bloque else
  • 48. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 47 07/06/2022 Selección condicional: bifurcación if-else anidados: cada else se asocia al if anterior más cercano. if(i == j) { if(j == k) System.out.println("i igual a k"); } // Llaves para que el else se asocie al primer if else { System.out.println("i no es igual a j"); } Escalera if-else-if: if(n == 1 ) { // Bloque 1 } else if(n == 2) { // Bloque 2 } else { // Si todo falla, Bloque 3 }
  • 49. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 48 07/06/2022 Ejercicios – Modificar el programa de cálculo de pagos de hipotecas, de forma que el interés anual dependa del número de años del préstamo: ➢ 7,25% hasta 15 años (exclusive) ➢ 8,5% hasta 20 años (exclusive) ➢ 9,75% hasta 25 años (exclusive) ➢ 11% hasta 30 años Además, los préstamos no pueden durar menos de 10 años ni más de 30. Nota: para forzar la finalización del programa se puede usar System.exit(0). A menudo evita tener que anidar demasiadas bifurcaciones condicionales. – Crear un programa que pida tres números (num1, num2 y num3) y los ordene, de forma que num1 contenga el mayor, num2 contenga el intermedio y num3 contenga el menor. CalculoHipoteca3 Ordena
  • 50. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 49 07/06/2022 Selección condicional: ramificación múltiple Si tenemos que disponer más de dos ramas de ejecución y la elegida depende del valor de una variable o una expresión, entonces debemos elegir la instrucción switch. La sintaxis básica es la siguiente: switch(expresión) { case valor1: instrucciones1 [break;] case valor2: instrucciones2 [break;] ... [ default: por-defecto ] } [...] : opcional exp==val1 false exp==val2 instrucciones2 true true exp==valN ... false false true instrucciones1 instruccionesN por-defecto La instrucción vacía existe
  • 51. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 50 07/06/2022 Selección condicional: ramificación múltiple switch(mes) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numeroDias = 31; break; case 4: case 6: case 9: case 11: numeroDias = 30; break; default: numeroDias = 28; }
  • 52. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 51 07/06/2022 Bucles: la instrucción for Para ejecutar un determinado número de veces una instrucción o un bloque de código disponemos de la típica instrucción for: for(inicialización;condición;incremento) instrucción; for(inicialización;condición;incremento) { secuencia-de-instrucciones } La sección de inicialización sirve para establecer la situación inicial; habitualmente se trata simplemente de la asignación de un valor inicial a una variable de control de bucle. La sección de condición indica si debe proseguir la repetición; mientras sea cierta (true) el bucle continuará. La sección de incremento sirve para establecer la nueva situación de la siguiente iteración; habitualmente se incrementa la variable.
  • 53. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 52 07/06/2022 Bucles: la instrucción for for(contador = 1; contador <= ciclos; contador++) instrucción; true instrucción contador <= ciclos contador = 1 false contador++
  • 54. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 53 07/06/2022 Bucles: la instrucción for TestMulTable.java ... // Display the number title System.out.print(" | "); for(int j = 1; j <= 9; j++) System.out.print(" " + j); System.out.println(" "); // Print table body for(int i = 1; i <= 9; i++) { System.out.print(i+" | "); for(int j = 1; j <= 9; j++) { // j de otro bloque // Display the product and align properly if(i * j < 10) System.out.print(" " + i * j); else System.out.print(" " + i * j); } System.out.println(); } ... Reproducido de “Introduction to Java”, Y. Daniel Liang, Prentice Hall 2001.
  • 55. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 54 07/06/2022 Ejercicios – Crear un programa que pida un número y muestre una pirámide como la siguiente (para el caso en el que el número sea 8): 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 – Sabiendo que el valor de  se puede aproximar mediante la siguiente fórmula:  = 4 x (1 – 1/3 + 1/5 – 1/7 + 1/9 – 1/11 + 1/13 ...) Crear un programa que pida al usuario un número de iteraciones y calcule el valor de  con ese número de aproximaciones. Piramide CalculoPI
  • 56. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 55 07/06/2022 Bucles: la instrucción while La instrucción while es una de las dos que están disponibles para bucles no determinados, aquellos que no tienen establecido de antemano un número fijo de iteraciones. La continuidad del bucle depende de alguna condición. Mientras (while) que la condición sea cierta, se sigue iterando; en el momento en que la condición se vuelva falsa, el bucle termina. while(condición) instrucción; while(condición) { instrucciones } false condición true instrucción
  • 57. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 56 07/06/2022 Bucles: la instrucción do...while La instrucción do...while es la otra instrucción disponible para bucles no determinados. La diferencia con el bucle while se encuentra en que la condición se comprueba al final, después de haber ejecutado el bloque. Así, siempre se realiza al menos una iteración del bucle (con el while puede no haber iteración alguna). do { instrucciones } while(condición) Se ejecutan las instrucciones hasta que la condición se haga falsa. false true instrucciones condición
  • 58. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 57 07/06/2022
  • 59. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 58 07/06/2022 break y continue La instrucción break, además de servir para interrumpir la ejecución del código en los casos de los switch, sirve para interrumpir la ejecución de un bucle while o do...while (dar por terminado el bucle, saliendo de él de forma inmediata). La instrucción continue sirve para interrumpir la ejecución de la iteración actual de un bucle while o do...while, pasando por alto el resto del código del bucle que haya a continuación y forzando a que siga el bucle con la siguiente iteración. int i = 0; float suma = 0; do { int num = MyInput.readInt(); if(num == 0) break; if(num < 0) continue; suma += 1 / num; i++; } while(i < 5); ¿Qué error hay en este ejemplo? ContinueBreak.java
  • 60. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 59 07/06/2022 Ejercicios – Convertir el siguiente bucle for en un while y en un do-while: long suma = 0; for(int i = 0; i <= 1000; i++) suma += i; – ¿Cuál es la salida del siguiente código? int num = 1000; while(true) { if(num < 9) break; num -= 9; } System.out.println("num = " + num); – ¿Y la de este otro? int num = 1000; while(true) { if(num < 9) continue; num -= 9; } System.out.println("num = " + num);
  • 61. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 60 07/06/2022 Contenido ▪ Introducción al Lenguaje de Programación Orientada a Objetos y Plataformas de desarrollo. ▪ Variables, Tipos de datos, Operadores y alcance ▪ Sentencias, Uso de bucles (for, while, do while) y condicionales (if, switch) ▪ Arreglo de tipos de datos simples ▪ Conceptos Básicos de POO: abstracción, clases, objetos, atributos, métodos, operador this, parámetros por valor y referencia.
  • 62. Ph.D. Franklin Parrales 61 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String Una de las colecciones que más a menudo utilizamos es la cadena de caracteres. Una cadena de caracteres es una secuencia de caracteres que se guardan juntos y en orden en una variable. Bueno, más bien en un objeto, ya que en Java usamos una clase muy versátil para las cadenas de caracteres: la clase String. Es una clase de la biblioteca estándar. Hay que tener muy en cuenta que las cadenas de caracteres que se mantienen en objetos de la clase String no se pueden modificar. Son objetos constantes que contienen la cadena que se les haya proporcionado cuando se crearon.
  • 63. Ph.D. Franklin Parrales 62 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String Creación de cadenas Se crean como cualquier otro objeto: String cadena = new String(cad); donde cadena es el nombre para el objeto y cad es la cadena de caracteres literal que se quiere mantener en el objeto String. Por ejemplo: String frase = new String("Me gusta programar en Java."); Como las cadenas se usan mucho, Java nos permite abreviar la creación de esta clase de objetos: String frase = "Me gusta programar en Java."; El objeto frase contendrá esa cadena durante toda su “vida”.
  • 64. Ph.D. Franklin Parrales 63 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String Lectura de cadenas Para obtener un objeto String que contenga la secuencia de caracteres introducida por el usuario con el teclado, la clase MyInput proporciona el método readString(). String frase = MyInput.readString(); El método readString() ya se encarga de crear el objeto. Longitud y acceso a caracteres individuales Para saber cuál es la longitud de la cadena (el número de caracteres que contiene) se usa el método length(): int longitud = frase.length(); Se puede acceder a los caracteres individuales con el método charAt(índice), donde índice va de 0 a longitud-1: for(int i = 0; i < frase.length(); i++) System.out.print(frase.charAt(i)); Asegurarse de que el índice sea válido
  • 65. Ph.D. Franklin Parrales 64 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String Comparación de cadenas Como las cadenas son objetos, las variables correspondientes son referencias y ya sabemos que cuando comparamos referencias lo que comprobamos es si apuntan al mismo objeto, no si se trata de la misma secuencia de caracteres. String frase1 = new String("Hola"); String frase2 = "Hola"; if(frase1 != frase2) System.out.println("No son el mismo objeto."); String frase4 = frase1; if(frase1 == frase4) System.out.println("Son el mismo objeto.");
  • 66. Ph.D. Franklin Parrales 65 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String Para saber si dos objetos contienen la misma secuencia de caracteres se puede utilizar el método equals(String). String frase1 = new String("Hola"); String frase2 = "Hola"; if(frase1.equals(frase2)) System.out.println("Contienen la misma cadena."); Y para saber si la cadena es lexicográficamente menor o mayor que otra se puede usar el método compareTo(String), que devuelve un valor menor que cero si la cadena receptora es menor que el argumento, cero si ambas cadenas son iguales y un valor mayor que cero si la cadena receptora es mayor que el argumento. También está definido en la clase String el método equalsIgnoreCase(String), que compara dos cadenas ignorando mayúsculas y minúsculas.
  • 67. Ph.D. Franklin Parrales 66 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String Concatenación Para concatenar la cadena receptora con otra cadena se puede utilizar el método concat(String), que devuelve otra cadena con los caracteres de la receptora seguidos de los del argumento. String frase1 = new String("Hola"); String frase2 = “y adios"; String frase3 = frase1.concat(frase2); System.out.println(frase3); // Holay adios También se puede utilizar el operador + para concatenar cadenas, (ya lo hemos estado utilizando con System.out.print()). String frase3 = frase1 + frase2;
  • 68. Ph.D. Franklin Parrales 67 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String El método estándar toString() Cuando en una instrucción System.out.print() (o println()) se encuentra un objeto, automáticamente se llama al método toString() de la clase del objeto. Este método devuelve un String con la información del objeto en el formato deseado. Si el programador no ha incluido un método toString() en la clase, el compilador añade uno por su cuenta, pero seguramente la forma en que se muestre la información no nos resultará adecuada. Lo mejor, por tanto, es añadir un método toString() propio que devuelva una cadena concatenando la información a mostrar. public String toString() { // Clase Cuenta return "Número de la cuenta: " + _num + "nD.N.I. del cliente: “ + _dni + "nSaldo: " + _saldo + " eurosnInterés: " + _interes + " %"; }
  • 69. Ph.D. Franklin Parrales 68 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String Subcadenas Para obtener una subcadena de la cadena receptora se utiliza el método substring(int, int). El primer argumento es el carácter (índice) por el que se quiere empezar a copiar y el segundo argumento indica el primer carácter (índice) que ya no se quiere incluir en la copia. Si no se proporciona un segundo argumento, la subcadena llega hasta el final. String frase1 = "abcdefghijklm"; String frase2 = frase1.substring(2, 6); // cdef String frase3 = frase1.substring(6); // ghijklm Para saber si un cadena se encuentra dentro de la cadena receptora se utiliza el método indexOf(String), que devuelve el carácter en el que empieza esa cadena como subcadena en la receptora (-1 si no se encuentra). Cadenas.java
  • 70. Ph.D. Franklin Parrales 69 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String Ejemplo: inversión de una cadena Pedir una cadena, copiarla al revés en otra y mostrar ésta última. public class Invertir { public static void main (String[] args) { System.out.print("Cadena a invertir: "); String cad = MyInput.readString(); // Construir la inversa: String inversa = ""; for(int i = 0; i < cad.length(); i++) inversa = cad.substring(i, i+1) + inversa; System.out.println("Al revés: " + inversa); } } Invertir.java ¿Cuántos objetos String se crean?
  • 71. Ph.D. Franklin Parrales 70 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String for(int i = 0; i < 4; i++) // cad.length() es 4 inversa = cad.substring(i, i+1) + inversa; H cad o l a inversa
  • 72. Ph.D. Franklin Parrales 71 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String i = 0 inversa = cad.substring(0, 1) + inversa; H cad o l a H inversa
  • 73. Ph.D. Franklin Parrales 72 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String i = 0 inversa = cad.substring(0, 1) + inversa; H cad o l a H H inversa
  • 74. Ph.D. Franklin Parrales 73 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String i = 0 inversa = cad.substring(0, 1) + inversa; H cad o l a H H inversa Dos objetos creados (y perdidos) en cada iteración . . .
  • 75. Ph.D. Franklin Parrales 74 07/06/2022 Programación Orientada a Objetos Carrera de Software Cadenas de caracteres: la clase String Ejemplo: reemplazo de texto en una cadena Función que sustituye todas las ocurrencias de un texto (anterior) por otro texto (nueva) en una cadena. String reemplaza(String cadena, String anterior, String nueva) { int estaEn; do { estaEn = cadena.indexOf(anterior); if(estaEn != -1) cadena = cadena.substring(0, estaEn) + nueva + cadena.substring(estaEn + anterior.length()); } while(estaEn != -1); return cadena; } Reemplaza.java
  • 76. Ph.D. Franklin Parrales 75 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase con atributos de clase String Clase Persona public class Persona { private Nif nif; private int edad; private String nombre, apellidos; // Constructor predeterminado public Persona() { nif = new Nif(); edad = 0; nombre = new String(""); apellidos = new String(""); } // Constructor parametrizado public Persona(long dni, int edad, String nombre, String apellidos) { this.nif = new Nif(dni); this.edad = edad; this.nombre = nombre; this.apellidos = apellidos; }
  • 77. Ph.D. Franklin Parrales 76 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase con atributos de clase String // Accedentes public Nif dameNif() { return nif; } public int dameEdad() { return edad; } public String dameNombre() { return nombre; } public String dameApellidos() { return apellidos; } // Mutadores public void ponNif(Nif nif) { this.nif = nif; } public void ponEdad(int edad) { this.edad = edad; } public void ponNombre(String nombre) { this.nombre = nombre; } public void ponApellidos(String apellidos) { this.apellidos = apellidos; } // Resto de métodos public void ponDni(long dni) { nif.ponDni(dni); } public String toString() { return nif.toString() + "n" + nombreCompleto() + "nEdad: " + edad + "n"; }
  • 78. Ph.D. Franklin Parrales 77 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase con atributos de clase String public String nombreCompleto() { // nombre y apellidos return nombre + " " + apellidos; } public void leer() { // lectura de los datos de la persona nif.leer(); System.out.print("Nombre: "); nombre = MyInput.readString(); System.out.print("Apellidos: "); apellidos = MyInput.readString(); System.out.print("Edad: "); edad = MyInput.readInt(); } } Persona.java
  • 79. Ph.D. Franklin Parrales 78 07/06/2022 Programación Orientada a Objetos Carrera de Software La clase Array La forma más básica de crear colecciones en Java (distintas de las cadenas de caracteres) es utilizando arrays. Para crear arrays Java proporciona la clase Array. Los arrays son, por tanto, objetos que se han de crear. Para declarar una variable array se indica el tipo (o clase) de los elementos que se van a colocar en el mismo y unos corchetes para especificar que se trata de un array. Los corchetes pueden ir detrás del tipo o detrás del nombre de la variable: double numeros[]; double[] masNumeros; Cuenta[] banco; Empleado empresa[]; bool[] interruptores; Los arrays son colecciones homogéneas, de forma que todos los elementos son de un mismo tipo (el tipo base del array).
  • 80. Ph.D. Franklin Parrales 79 07/06/2022 Programación Orientada a Objetos Carrera de Software La clase Array Todavía no tenemos ningún array disponible. Como los arrays son objetos hay que crearlos, como siempre con la instrucción new. En la creación es cuando se especifica la longitud del array, el número de posiciones (elementos) que se desea tener. La capacidad se indica entre corchetes a continuación del tipo: numeros = new double[10]; masNumeros = new double[25]; banco = new Cuenta[1000]; empresa = new Empleado[60]; interruptores = new bool[4]; Y, por supuesto, se pueden crear al declararlos: double numeros[] = new double[10]; double[] masNumeros = new double[25]; Cuenta[] banco = new Cuenta[1000]; Empleado empresa[] = new Empleado[60]; bool[] interruptores = new bool[4];
  • 81. Ph.D. Franklin Parrales 80 07/06/2022 Programación Orientada a Objetos Carrera de Software La clase Array Acceso a los elementos del array Las posiciones del array se acceden por índice, siempre un entero. Para acceder a un elemento del array se pone el índice entre corchetes a continuación del nombre del array: numeros[índice] banco[índice] La primera posición del array es la 0 y la última la longitud menos 1. Debemos asegurarnos de que la posición a la que queramos acceder sea una posición válida. Si no, se elevará una excepción y se interrumpirá la ejecución del programa. Los elementos del array numeros son: numeros[0] numeros[1] numeros[2] ... numeros[9] Y los del array banco son: banco[0] banco[1] banco[2] ... banco[999]
  • 82. Ph.D. Franklin Parrales 81 07/06/2022 Programación Orientada a Objetos Carrera de Software La clase Array Los arrays disponen de una propiedad (atributo público) denominada length que contiene el número de posiciones del array. int longitud = numeros.length; // No es un método! Se recomienda utilizar la propiedad length en lugar del número de posiciones indicado al crear el array. for(int i = 0; i < banco.length; i++) banco[i].println(); Cuando se trabaja con arrays de objetos, antes de acceder a un objeto de una posición del array hay que estar seguro de que en esa posición efectivamente hay un objeto (se apunta a un objeto). No hay que olvidar que se trata de referencias. for(int i = 0; i < banco.length; i++) if(banco[i] != null) banco[i].println(); Sea como sea, hay que estar seguro.
  • 83. Ph.D. Franklin Parrales 82 07/06/2022 Programación Orientada a Objetos Carrera de Software Arrays de objetos Vamos a usar la clase Array para crear listas de objetos. El array lo necesitamos para mantener los distintos objetos que se coloquen en la lista (bueno, las referencias a los objetos). Para guardar objetos de una clase en un array basta con definir un array cuyo tipo base sea esa clase: Persona _array[]; Y como ya sabemos, el array se crea así: _array = new Persona[100]; El array ya está listo para que se asignen Personas a las distintas posiciones del array según se necesite. La creación del array no crea ningún objeto de clase Persona. Las Personas que se quieran colocar en el array se deberán crear antes de colocarlas.
  • 84. Ph.D. Franklin Parrales 83 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase Lista La lista es una estructura de datos y como tal es un elemento de programa independiente que debe estar implementado en una clase. El array de objetos será un atributo de la clase Lista. Como en el array no tienen por qué estar todas las posiciones ocupadas por objetos que se hayan insertado en la lista, debemos saber cuántas posiciones están ocupadas en cada momento (y cuáles). Lo mejor es mantener todos los objetos en posiciones contiguas, a partir de la primera (la 0), de forma que lo único que necesitamos saber es cuántos hay. Bastará un contador de elementos. El contador de elementos será otro atributo de la clase Lista. El contador de elementos indicará la primera posición que está disponible. Lo inicializaremos a cero y no cabrán más objetos en la lista cuando valga MAX, una constante de la clase.
  • 85. Ph.D. Franklin Parrales 84 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase Lista Atributos de la clase Lista No necesitamos más datos, por lo que la lista de atributos será: public class Lista { private final static int MAX = 100; private Persona _array[]; private int _cont = 0; // Indica la primera posición // libre del array. Igual al número de elementos. ... MAX es una constante de clase.
  • 86. Ph.D. Franklin Parrales 85 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase Lista Métodos de la clase Lista Como la lista es una máquina de datos, no se debe tener acceso a sus interioridades (atributos), sino que se utilizará exclusivamente a través de las operaciones definidas. No ya es que no tenga utilidad conocer los valores de los atributos (el contador y el array), sino que se podría hacer que la máquina fallase si se modificaran sus atributos (¡el contador indicando más allá de la primera posición vacía!). Por tanto, no definiremos en la clase Lista ni accedentes ni mutadores, excepto un accedente para el contador. El resto de los métodos se corresponderán con operaciones específicas de la lista como estructura de datos.
  • 87. Ph.D. Franklin Parrales 86 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase Lista Como se trata de un ejemplo de lista, no vamos a implementar un conjunto completo de operaciones, sino tan sólo algunas que nos permitan probar suficientemente la lista. ◼ ¿Caben más objetos? El método llena() devolverá true si no caben más objetos y false en caso contrario. ◼ ¿Hay algún objeto que se pueda recuperar? El método vacia() devolverá true si no hay objetos y false en caso contrario. ◼ Nuevo elemento El método insertar() insertará el objeto que acepta en la lista. ◼ Obtener elemento El método recuperar() devolverá el objeto dada una posición de la lista. Aunque la primera posición del array es la 0, para este método se indicará la primera posición de la lista como la 1. ◼ Visualización: método toString().
  • 88. Ph.D. Franklin Parrales 87 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase Lista Métodos que indican su éxito o fracaso A menudo implementaremos, como métodos, operaciones que pueden fallar. Por ejemplo, si la lista está llena, el método insertar() no podrá insertar el objeto en la lista tal como se le solicita. Y si al método recuperar() se le pasa una posición en la que no hay objeto también fallará (no habrá objeto que devolver). Cuando una operación que no tiene que devolver nada puede fallar (como insertar()), el método debe indicar el éxito o el fallo de la operación. ¿Cómo? Por ejemplo, devolviendo un valor boolean que lo indique (true si éxito y false si fallo). El método recuperar(), sin embargo, devuelve algo: la Persona que se encuentra en la posición solicitada. En el caso de que la posición no sea válida, deberá indicar que la operación ha fallado. Ahora se puede indicar sencillamente que no hay objeto que devolver. Y ya sabemos que para eso está el valor especial null.
  • 89. Ph.D. Franklin Parrales 88 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase Lista public class Lista { private final static int MAX = 100; private Persona _array[]; private int _cont = 0; // Indica la primera posición // libre del array. Igual al número de elementos public Lista() { _array = new Persona[MAX]; } public boolean llena() { return _cont == MAX; } public boolean vacia() { return _cont == 0; } public int length() { return _cont; } public boolean insertar(Persona p) { // Devuelve true si se inserta; false si lista llena if(_cont == MAX) return false; _array[_cont] = p; _cont++; return true; } (continúa)
  • 90. Ph.D. Franklin Parrales 89 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase Lista public Persona recuperar(int pos) {// pos: 1 ... _cont // true si tiene éxito; false si posición no válida if((pos < 1) || (pos > _cont)) return null; return _array[pos-1]; } public String toString() { String cad = "Elementos de la lista:nn"; for(int i = 0; i < _cont; i++) cad += _array[i].toString() + "n"; return cad; } } Persona Lista 0..MAX Lista.java Nif 1
  • 91. Ph.D. Franklin Parrales 90 07/06/2022 Programación Orientada a Objetos Carrera de Software Una clase Lista Se debe tener muy presente que lo que se coloca en las posiciones del array son referencias a objetos, por lo que si se inserta dos veces el mismo objeto Persona, habrá dos posiciones que apunten al mismo objeto. Persona per = new Persona(); Lista lista = new Lista(); lista.insertar(per); lista.insertar(per); ... 2 Objeto Persona ... _array _cont lista PruebaLista.java
  • 92. Ph.D. Franklin Parrales 91 07/06/2022 Programación Orientada a Objetos Carrera de Software Arrays: varias dimensiones tipo[][] idMatriz = new tipo[t1][t2]; tipo[][][]idMatriz = new tipo[t1][t2][t3]; Definición : int[][] tabla = new int[4][10]; Acceso a los elementos : tabla[2][5] ... int a,b,c; double[][] otraTabla = new int[a][b*c]; int[][] tabla2 = {{1,2,3},{4,5,6},{7,8,9}}; ... float tabla3[][] = new float[4][]; tabla3[0] = new float[5]; tabla3[1] = new float[10]; Sólo se puede hacer al definirla
  • 93. Ph.D. Franklin Parrales 92 07/06/2022 Programación Orientada a Objetos Carrera de Software Ejemplo: matriz identidad public class PruebaMatriz { public static void main(String[] args){ int[][] m = new int[4][4]; for(int i=0; i<m.length;i++){ for(int j=0; j<m[i].length;j++){ if (i==j)m[i][j]=1; else m[i][j]=0;} } for(int i=0; i<m.length;i++){ for(int j=0; j<m[i].length;j++){ System.out.print (m[i][j]+” “);} System.out.println(); } } } 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
  • 94. Ph.D. Franklin Parrales 93 07/06/2022 Programación Orientada a Objetos Carrera de Software Ejemplo: máximo de matriz public class Maximo { static int mayor(int[][] a){ int mayor=a[0][0]; for(int i=0; i<a.length; i++){ for(int j=0; j<a[i].length;j++){ if (mayor<a[i][j]) mayor=a[i][j]; } } return mayor; } public static void main(String[] args) { int[][]m = {{23,3,95},{13,42,12}}; System.out.println(mayor(m)); } }
  • 95. Ph.D. Franklin Parrales 94 07/06/2022 Programación Orientada a Objetos Carrera de Software Ejercicio: una clase Tablero Crea una clase Tablero que modele un tablero de 5x5; Atributos: ◼ La matriz que representa al tablero Métodos: ◼ Constructor : inicializa el tablero con valores double aleatorios (entre 0 y 1) ◼ toString() : permite mostrar el tablero en formato filas y columnas ◼ vacia(int fil, int col) : pone a cero la casilla indicada por los parámetros Crea una clase PruebaTablero que cree un tablero de ejemplo y lo muestre PruebaTablero.java
  • 96. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 95 07/06/2022 Contenido ▪ Introducción al Lenguaje de Programación Orientada a Objetos y Plataformas de desarrollo. ▪ Variables, Tipos de datos, Operadores y alcance ▪ Sentencias, Uso de bucles (for, while, do while) y condicionales (if, switch) ▪ Arreglo de tipos de datos simples ▪ Conceptos Básicos de POO: abstracción, clases, objetos, atributos, métodos, operador this, parámetros por valor y referencia.
  • 97. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 96 07/06/2022 Abstracción ▪ La abstracción es ignorancia selectiva ▪ Decidir qué es importante y qué no lo es ▪ Concentrarse en lo importante y depender de ello ▪ Ignorar lo que no es importante y no depender de ello ▪ Usar encapsulación para forzar una abstracción El objetivo de la abstracción es no perderse en vaguedades y crear un nuevo nivel semántico en el que se pueda ser absolutamente preciso. Edsger Dijkstra
  • 98. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 97 07/06/2022 Qué es un objeto? ▪ Un objeto es una abstracción de un conjunto de cosas del mundo real de tal forma que: ▪ Todos los elementos del conjunto (las instancias) tienen las mismas características. ▪ Todas las instancias están sujetas a y conforman las mismas reglas. Mundo Real Software Abstracción
  • 99. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 98 07/06/2022 Objetos ▪ Objeto = unidad atómica que encapsula estado y comportamiento ▪ La encapsulación en un objeto permite una alta cohesión y un bajo acoplamiento ▪ Un objeto puede caracterizar una entidad física (coche) o abstracta (ecuación matemática)
  • 100. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 99 07/06/2022 … Objetos ▪ El Modelado de Objetos permite representar el ciclo de vida de los objetos a través de sus interacciones ▪ En UML, un objeto se representa por un rectángulo con un nombre subrayado Otro Objeto Un Objeto Otro Objeto más
  • 101. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 100 07/06/2022 … Objetos ▪ Ejemplo de varios objetos relacionados: Felipe Juan Cuenta Corriente 101 Cuenta Corriente 114 Banco de Valencia
  • 102. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 101 07/06/2022 … Objetos ▪ Objeto = Identidad + Estado + Comportamiento ▪ El estado está representado por los valores de los atributos ▪ Un atributo toma un valor en un dominio concreto Un coche Azul 979 Kg 70 CV ...
  • 103. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 102 07/06/2022 Qué es un objeto? ▪ Es una entidad tangible que muestra algún comportamiento bien definido. ▪ Posee funcionalidad (operaciones que son capaces de hacer y mensajes que son capaces de responder). ▪ Características de los objetos: Identidad, Clasificación, estado, comportamiento, herencia, Polimorfismo (se verán más adelante). ▪ Estas características pueden ser usadas en forma independiente, pero juntas se complementan.
  • 104. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 103 07/06/2022 Identidad Variable Dirección unCredito 10001324 unDebito 54647875 unaCuenta 87896545 unaCuentadeAhorros 87020486 Una tabla de símbolos caballo Doris Residencia de Doris Mi Computadora Una bicicleta roja cuenta bancaria antena parabólica Cada objeto tiene su propia identidad inherente
  • 105. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 104 07/06/2022 ▪ Oid (Object Identifier) Cada objeto posee un oid. El oid establece la identidad del objeto y tiene las siguientes características: ❖ Constituye un identificador único y global para cada objeto dentro del sistema ❖ Es determinado en el momento de la creación del objeto ❖ Es independiente de la localización física del objeto, es decir, provee completa independencia de localización Identidad
  • 106. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 105 07/06/2022 ❖ Es independiente de las propiedades del objeto, lo cual implica independencia de valor y de estructura ❖ No cambia durante toda la vida del objeto. Además, un oid no se reutiliza aunque el objeto deje de existir ❖ No se tiene ningún control sobre los oids y su manipulación resulta transparente ▪ Sin embargo, es preciso contar con algún medio para hacer referencia a un objeto utilizando referencias del dominio (valores de atributos) … Identidad
  • 107. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 106 07/06/2022 Clasificación (1,3) (2,2) (2,1) (5,2.5) Vehículo Punto Figura Animal
  • 108. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 107 07/06/2022 Estado ▪ El estado evoluciona con el tiempo ▪ Algunos atributos pueden ser constantes ▪ El comportamiento agrupa las competencias de un objeto y describe las acciones y reacciones de ese objeto ▪ Las operaciones de un objeto son consecuencia de un estímulo externo representado como mensaje enviado desde otro objeto
  • 109. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 108 07/06/2022 Comportamiento ▪ Ejemplo de interacción: Otro objeto Un objeto Un mensaje Operacion 1 Operacion 2
  • 110. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 109 07/06/2022 … Comportamiento ▪ Los mensajes navegan por los enlaces, a priori en ambas direcciones ▪ Estado y comportamiento están relacionados ▪ Ejemplo: no es posible aterrizar un avión si no está volando. Está volando como consecuencia de haber despegado del suelo
  • 111. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 110 07/06/2022 ¿Qué es una clase? ▪ Para el filósofo… ▪ Un artefacto de clasificación humana ▪ Clasificamos según un comportamiento o atributos comunes ▪ Acordamos descripciones y nombres de clases útiles ▪ Creamos vocabulario; nos comunicamos; ¡pensamos! ▪ Para el programador orientado a objetos… ▪ Una construcción sintáctica con nombre que describe un comportamiento y atributos comunes ▪ Una estructura de datos que incluye datos y funciones ¿COCHE?
  • 112. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 111 07/06/2022 ¿Qué es una clase? ❖ Una clase es una descripción de un conjunto de objetos que comparten: atributos, operaciones, relaciones y semántica”. ❖ Una clase define los conceptos que forman parte del dominio del problema o de la solución. Dominio del problema: Conceptos Dominio de la solución: Clases
  • 113. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 112 07/06/2022 Clase ▪ Una clase describe un conjunto de ejemplares (objetos) con propiedades y comportamientos similares. ▪ Una clase se describe por: ▪ Nombre ▪ Interfaz (métodos, mensajes) ▪ Atributos (datos) ▪ En término de programación es un tipo de dato definido por el usuario. ▪ Equivalente a un TDA. Ej: Rectangulo, Lista, Cola, NumeroComplejo, etc. ▪ Las clases son las plantillas a partir de las cuales se crean los objetos.
  • 114. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 113 07/06/2022 Clases ▪ Una clase es la descripción de un conjunto de objetos que comparten los mismos: ▪ atributos (características) ▪ métodos (operaciones) ▪ relaciones ▪ La estructura de una clase esta compuesta de: ▪ Los atributos: Datos asociados a los elementos y que toman valor al instanciar objetos de una clase. ▪ Las operaciones (métodos): Funciones o procesos propios de los objetos de una clase.
  • 115. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 114 07/06/2022 Notación UML para clases Identificador de la clase, si es abstracta va en cursiva atributos métodos Rectángulo longitud ancho crearRectangulo obtenerArea
  • 116. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 115 07/06/2022 Clase Instancia 1 Instancia 2 Perro unPerro Fido Sultán unPerro nombre Clases
  • 117. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 116 07/06/2022 ¿Qué es un objeto? ▪ Un objeto es una instancia de una clase ▪ Los objetos se caracterizan por: ▪ Identidad: Los objetos se distinguen unos de otros ▪ Comportamiento: Los objetos pueden realizar tareas ▪ Estado: Los objetos contienen información
  • 118. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 117 07/06/2022 ¿Qué es un objeto? ▪ En términos de programación es una variable. ▪ Un objeto es una instancia de una clase. ▪ Los objetos creados a partir de una clase, tienen una estructura idéntica, pero cada objeto puede tener valores distintos.
  • 119. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 118 07/06/2022 Clases y Objetos Class Template Objetos
  • 120. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 119 07/06/2022 Atributos ▪ Un atributo representa una propiedad que es compartida por todos los objetos de una misma clase. Ejemplo: Un persona tiene nombre, edad, etc. ▪ Los nombres de atributos son únicos dentro de una misma clase. ▪ Cada atributo tiene un valor para cada instancia ▪ En UML: ▪ La primera letra de un atributo se escribe con minúscula. ▪ La sintaxis para los atributos en un diagrama UML de clases es la siguiente: ▪ visibilidad nombre : tipo de dato ▪ Ejemplo: + nombre : String
  • 121. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 120 07/06/2022 Clase Instancia 1 Instancia 2 atributo X valor x1 valor x2 Perro unPerro nombre peso Sultán 19 libras unPerro Fido 9 libras Atributos de Clases
  • 122. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 121 07/06/2022 Perro nombre piel peso edad estátus Nombrar o identificar objetos Describir características Describir estados Clases de Atributos
  • 123. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 122 07/06/2022 ¿Cómo encontrar atributos? ▪ Para encontrar atributos de una clase preguntarse: ▪ Qué información necesitamos conocer sobre ese objeto? ▪ Qué características necesitamos recordar en el tiempo? ▪ Qué dato es importante para soportar las responsabilidades de la clase en el sistema? ▪ Algunos atributos podrían ser extraídos del análisis de los sustantivos y añadidos a la clase apropiada.
  • 124. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 123 07/06/2022 Atributos ▪ Una entidad con estructura, comportamiento o identidad debe ser modelado como una clase, no como atributo de otra clase. ▪ Sólo considere atributos que directamente estén relacionados a una aplicación particular. Obtenga los atributos más importantes primero, se adicionarán detalles después. ▪ Asegúrese de dar a cada atributo un nombre significativo.
  • 125. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 124 07/06/2022 Métodos ▪ Los métodos, son los procesos que una clase sabe cómo llevar a cabo. Ejemplo: cambiar-dirección. ▪ Un objeto se caracteriza por el comportamiento que es capaz de mostrar, no solo por sus atributos. ▪ En el modelo estático, únicamente se muestra los nombres de los métodos. ▪ La información de las operaciones se muestra en el modelo dinámico.
  • 126. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 125 07/06/2022 Sinónimos de Método ▪ Operación ▪ Responsabilidad ▪ Servicio ▪ Función
  • 127. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 126 07/06/2022 Clase Instancia 1 Instancia 2 Perro unPerro atributo X valor x1 valor x2 nombre peso Sultán 19 libras unPerro Fido 9 libras operación OPT OPT OPT sentarse girar operaciones de la clase operaciones de la clase Métodos
  • 128. Programación Orientada a Objetos Ph.D. Franklin Parrales Carrera de Software 127 07/06/2022 Métodos ▪ Puede ocurrir que una clase no tenga métodos. ▪ En UML: ▪ La primera letra de los nombres de los métodos se escribe con minúscula. ▪ Los métodos pueden tener parámetros, y también pueden retornar valores. La sintaxis para los métodos en un diagrama UML de clases, es la siguiente: ▪ visibilidad nombre (lista-de-parámetros): tipo-dato-a-retornar. ▪ Ejemplo: #addMessage (m : Message, len : Integer): Status
  • 129. Ph.D. Franklin Parrales 128 07/06/2022 Programación Orientada a Objetos Carrera de Software Representaciones gráficas Para representar gráficamente los elementos de los programas orientados a objetos y sus relaciones vamos a utilizar diagramas similares a los de UML que se usan en Ingeniería del Software. A medida que vayamos estudiando los conceptos y los mecanismos de la POO iremos viendo cómo representarlos gráficamente. De momento, comencemos con la representación de las clases: Nombre Atributos Métodos Nombre de la clase Atributos definidos en la clase Métodos definidos en la clase
  • 130. Ph.D. Franklin Parrales 129 07/06/2022 Programación Orientada a Objetos Carrera de Software Representaciones gráficas Las representaciones gráficas de las clases se pueden desarrollar con distintos niveles de detalle. Con el mayor nivel de detalle se incluyen todas las características (atributos y métodos) definidas en la clase. Punto _x _y x():double x(double) y():double y(double) print() Circulo _centro _radio Circulo() Circulo(Punto,double) centro():Punto centro(Punto) radio():double radio(double) print() Métodos: Nombre seguido de los tipos de los parámetros separados por comas y entre paréntesis. Si la función devuelve un valor, el tipo de valor que devuelve se coloca al final y precedido de :
  • 131. Ph.D. Franklin Parrales 130 07/06/2022 Programación Orientada a Objetos Carrera de Software Representaciones gráficas Si interesa se pueden omitir secciones o dejarlas en blanco. Por ejemplo, para mostrar la forma en que se usan los objetos de una clase, la parte de atributos no es relevante, por lo que la podemos dejar en blanco: Se pueden quitar del todo secciones por el final; es decir, si la que se deja en blanco es la de métodos, al ser la última sí se puede quitar, pero como la de atributos no es la última, estará en blanco. Punto x():double x(double) y():double y(double) print() Circulo Circulo() Circulo(Punto,double) centro():Punto centro(Punto) radio():double radio(double) print()
  • 132. Ph.D. Franklin Parrales 131 07/06/2022 Programación Orientada a Objetos Carrera de Software Representaciones gráficas Si lo que se quiere es omitir la información sobre métodos, entonces se puede dejar en blanco o se puede quitar del todo: Se pueden quitar las dos secciones de atributos y métodos, dejando simplemente el nombre de la clase; es el menor nivel de detalle: Punto _x _y Circulo _centro _radio Punto Circulo
  • 133. Ph.D. Franklin Parrales 132 07/06/2022 Programación Orientada a Objetos Carrera de Software Representaciones gráficas Relaciones entre clases Las relaciones entre las clases también se representan gráficamente. La única relación entre clases que hemos visto es la de clientelismo: Los objetos de la clase Circulo contienen objetos de la clase Punto. La relación de clientelismo se representa conectando las clases mediante líneas con un rombo en un extremo. El rombo se coloca en la clase que contiene objetos de la otra: Podemos indicar el número de objetos que se contienen: Punto Circulo Punto Circulo 1
  • 134. Ph.D. Franklin Parrales 133 07/06/2022 Programación Orientada a Objetos Carrera de Software Clases en Java Una clase es una implementación de un tipo abstracto de datos. datos + operaciones TAD atributos + métodos Clase Las clases, como los TAD, son declaraciones. Ejemplares (lo que existe durante la ejecución): variables para un TAD, objetos para una clase. Los datos se identifican como atributos en la clase: cada ejemplar (objeto) de la clase tendrá sus propios atributos. Todos los objetos de una clase tienen definido un mismo conjunto de métodos (operaciones). Encapsulación de código y datos: la clase como módulo. Ocultación de información: público/privado (interfaz/implementación).
  • 135. Ph.D. Franklin Parrales 134 07/06/2022 Programación Orientada a Objetos Carrera de Software Las clases en Java: la estructura class Una clase define un determinado tipo de objetos. Características de los objetos: ✓ Atributos (datos que contienen) ✓ Métodos (operaciones que se les puede aplicar) La estructura class engloba las declaraciones de atributos y métodos: class Clase { // Declaraciones de atributos y métodos } Nombre de la clase
  • 136. Ph.D. Franklin Parrales 135 07/06/2022 Programación Orientada a Objetos Carrera de Software Las clases en Java: atributos y métodos Los atributos son variables. El tipo puede ser otra clase o un tipo primitivo de Java (int, double, etcétera). Se declaran fuera de todos los métodos. Los métodos son declaraciones de funciones que contienen el código que se ejecutará cuando se invoquen. class Clase { // Declaraciones de atributos // Declaraciones de atributos // Declaraciones de atributos // ... // Declaración de método // Declaración de método // Declaración de método // ... }
  • 137. Ph.D. Franklin Parrales 136 07/06/2022 Programación Orientada a Objetos Carrera de Software Un ejemplo de clase: Punto class Punto { double _x; // atributo _x double _y; // atributo _y double x() { // método x() return _x; } double y() { // método y() return _y; } void x(double d) { // método x(double) _x = d; } void y(double d) { // método y(double) _y = d; } void print() { // método print() System.out.print("(" + _x + "," + _y + ")"); } } 2 atributos y 5 métodos Sin método main() → No se puede ejecutar
  • 138. Ph.D. Franklin Parrales 137 07/06/2022 Programación Orientada a Objetos Carrera de Software Un ejemplo de clase: Punto La clase no puede ejecutarse por sí misma. Es una definición que nos permite crear y manipular objetos de esa clase. La creación y manipulación de objetos se llevará a cabo en alguna otra clase del programa. Tal como está definida la clase anterior, sólo se conocerá en el paquete en el que se encuentre. En el mismo archivo fuente puede haber otras clases, como por ejemplo una que contenga el programa principal (el método main() con el que comenzará la ejecución). Vamos a crear en el mismo archivo fuente un programa principal que cree y manipule objetos de la clase Punto. Punto _x _y x():double x(double) y():double y(double) print() UML
  • 139. Ph.D. Franklin Parrales 138 07/06/2022 Programación Orientada a Objetos Carrera de Software Los objetos en Java Los objetos se manejan a través de las variables. Se declaran normalmente, pero utilizando el nombre de la clase como tipo: NombreClase nombreObjeto; Por ejemplo: Punto miPunto; Esto tan sólo declara una variable de ese tipo (clase), pero NO crea nada. Los objetos se han de crear explícitamente utilizando el operador new: nombreObjeto = new NombreClase(); Por ejemplo: miPunto = new Punto(); Ahora ya sí existe un objeto de clase Punto que se puede utilizar a través de la variable miPunto.
  • 140. Ph.D. Franklin Parrales 139 07/06/2022 Programación Orientada a Objetos Carrera de Software Los objetos en Java ¿Qué podemos hacer con el objeto? Acceder a sus características: atributos y métodos. Para acceder a las características se utiliza la notación punto: nombreObjeto.característica; Por ejemplo: miPunto._x miPunto._y miPunto.x() miPunto.print() ... Si se trata de un método, deberán incluirse los paréntesis (y los argumentos, si es que tiene definidos parámetros). La ejecución de un método se dice que es un paso de mensaje. Objeto receptor del mensaje: miPunto. Mensaje que se le pasa: x().
  • 141. Ph.D. Franklin Parrales 140 07/06/2022 Programación Orientada a Objetos Carrera de Software Los objetos en Java class Punto { ... } public class Prueba { // Programa principal public static void main(String[] args) { Punto p = new Punto(); p.x(3); p.print(); } } PruebaPunto.java Muestra (3.0,0.0) → Los atributos se inicializan automáticamente Punto.java
  • 142. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 141 07/06/2022 Métodos Los métodos de las clases son las unidades funcionales de Java. Son similares a las funciones de otros lenguajes. ✓ modificadores: indican cómo (dónde) se puede invocar el método. De momento, simplemente static. ✓ tipo: tipo de dato que devuelve el método (void si nada). ✓ parámetros: declaraciones separadas por comas. [modificadores] tipo nombre (parámetros) { // Cuerpo del método } Cabecera
  • 143. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 142 07/06/2022 Métodos static int max(int num1, int num2) { int result; if(num1 > num2) result = num1; else result = num2; return result; } ✓ Para devolver valores se usa la instrucción return. ✓ El método termina al ejecutar una instrucción return o al llegar a la llave de cierre. static int max(int num1, int num2) { if(num1 > num2) return num1; else return num2; } Cada parámetro con su tipo. int num1, num2 Si el método no es de tipo void, debe terminar siempre con un return. Signatura Se puede forzar el fin de un método void con una instrucción return;
  • 144. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 143 07/06/2022 Métodos: invocación int mayor = max(3, 4); int num1, num2; ... mayor = max(num1, num2); System.out.println(12 * max(num1, num2) – 3); max(num1, num2); // válido, pero se pierde el resultado ✓ Los métodos de tipo void sólo se pueden invocar como instrucciones independientes: static void algo(...) { ... } algo(...);
  • 145. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 144 07/06/2022 Métodos: invocación ✓ Los métodos static se pueden invocar directamente (con su nombre) en los demás métodos de su misma clase: public class MayorMenor { public static void main(String[] args){ int num1, num2, mayor, menor; ... mayor = max(num1, num2); menor = min(num1, num2); } static int max(int num1, int num2) { if(num1 > num2) return num1; else return num2; } static int min(int num1, int num2) { if(num1 < num2) return num1; else return num2; } } MayorMenor.java Paso de parámetros POR VALOR.
  • 146. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 145 07/06/2022 Ejercicios – Modificar el programa MayorMenor para que muestre el mayor y el menor de cuatro números. – Crear un programa que pida al usuario un número entero largo y muestre la suma de los dígitos del número. Usará un método que se encargue de realizar dicha suma. – Crear un programa que muestre los 100 primeros números primos. Usará un método esPrimo() que indique si un número es o no primo. Mostrará diez números primos por línea (y alineados en columnas). MayorMenor2 SumaDigitos Primos
  • 147. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 146 07/06/2022 Métodos: sobrecarga ✓ Los métodos se pueden sobrecargar: varios métodos con igual nombre pero diferente signatura. public class X { public static void main(String[] args){ ... } static int max(int num1, int num2) { ... } static long max(long num1, long num2) { ... } static float max(float num1, float num2) { ... } static double max(double num1, double num2) { ... } } ✓ Se sabe cuál usar por el tipo de los argumentos. Sobrecarga.java
  • 148. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 147 07/06/2022 Métodos: recursividad ✓ También llamada recursión, es la posibilidad de que un método se invoque a sí mismo. public class Factorial { public static void main(String[] args){ long num; System.out.print("Introduce el numero cuyo factorial quieres calcular: "); num = MyInput.readLong(); System.out.println("El factorial de " + num + " es " + factorial(num)); } static long factorial(long num) { if(num == 1) return 1; // Caso base return num * factorial(num - 1); // Cada vez más cerca del caso base } } Factorial.java
  • 149. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 148 07/06/2022 Ejercicios – Crear un programa que calcule números de Fibonacci. Pedirá el número del que se quiere calcular su Fibonacci. F(0) = 0 F(1) = 1 F(N) = F(N-2) + F(N-1) si N > 1 – Crear un programa que indique los movimientos que hay que realizar para resolver el problema de las torres de Hanoi. Se pedirá el número de discos que se quieren mover. Cada pedestal está identificado por una letra (A, B y C). La torre está inicialmente en el A y se quiere llevar al C. Para mover una torre de discos de un pedestal X a otro pedestal Y, el primer movimiento es mover el disco superior de la torre al tercer pedestal, que se usa como auxiliar. Fibonacci Hanoi
  • 150. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 149 07/06/2022 Ejercicio de refuerzo Desarrollar un programa que permita manipular fechas. El día, el mes y el año serán variables de clase (static) (se podrán acceder en cualquier método de la clase). Los métodos que se desea que tenga el programa son: ✓ leer(): leerá del teclado el día, el mes y el año de la fecha. ✓ valida(): comprobará si la fecha leída es correcta (entre el 1-1-1900 y el 31-12-2050); si no es válida, la ajustará para que lo sea. Se llamará al final de leer(). ✓ mostrarCorta(): mostrará la fecha en formato corto (por ejemplo, 02-09-2003). ✓ bisiesto(): dirá si el año de la fecha es bisiesto. ✓ diasMes(mes): devolverá el número de días del mes que se le pasa para el año de la fecha. . . .
  • 151. Programación Orientada a Objetos Carrera de Software Ph.D. Franklin Parrales 150 07/06/2022 Ejercicio de refuerzo ✓ diasTranscurridos(): devolverá el número de días transcurridos desde el 1-1-1900 hasta la fecha. ✓ diaSemana(): devolverá el día de la semana de la fecha (0 para domingo, 1 para lunes, ..., 6 para sábado). El 1 de enero de 1900 fue domingo. ✓ mostrarLarga(): mostrará la fecha en formato largo (por ejemplo, martes 2 de septiembre de 2020). ✓ fechaTras(dias): establecerá la fecha que corresponde a haber pasado esos días desde el 1-1-1900. ✓ siguiente(): pasará al día siguiente. El método main() servirá para probar los demás métodos. Fecha
  • 152. Ph.D. Franklin Parrales 151 07/06/2022 Programación Orientada a Objetos Carrera de Software La palabra clave this Si dentro de un método se necesita hacer referencia al objeto receptor del correspondiente mensaje, se puede usar this. Por ejemplo, si un parámetro se llama igual que un atributo, entonces se puede acceder al atributo a través de this: class Clase { int dato = 0; void dato(int dato) { this.dato = dato; } } Receptor.java
  • 153. Ph.D. Franklin Parrales 152 07/06/2022 Programación Orientada a Objetos Carrera de Software Variables de tipos primitivos frente a variables de objetos Las variables que hemos utilizado hasta ahora, las que declaramos de algún tipo primitivo (int, double, etcétera), son contenedores de valores: la variable y su valor se consideran la misma cosa. int unNumero = 4, otroNumero = 10; Así, cuando se asigna una variable a otra, lo que se hace es copiar el valor de una a la otra: otroNumero = unNumero; Las variables de objetos no funcionan de la misma forma ... unNumero 4 otroNumero 10 unNumero 4 otroNumero 4 unNumero == otroNumero → true
  • 154. Ph.D. Franklin Parrales 153 07/06/2022 Programación Orientada a Objetos Carrera de Software Las variables de objetos son referencias Las variables de objetos son referencias: la variable referencia a un objeto, una entidad aparte que contiene atributos y responde a ciertas operaciones (los métodos definidos en la clase). Punto unPunto = new Punto(); Punto otroPunto = new Punto(); unPunto otroPunto 0.0 _x 0.0 _y 0.0 _x 0.0 _y
  • 155. Ph.D. Franklin Parrales 154 07/06/2022 Programación Orientada a Objetos Carrera de Software Las variables de objetos son referencias Los objetos se manejan a través de sus referencias (variables). Un objeto sólo se puede utilizar a través de alguna referencia suya. unPunto.x(4); otroPunto.y(7); unPunto otroPunto 4.0 _x 0.0 _y 0.0 _x 7.0 _y
  • 156. Ph.D. Franklin Parrales 155 07/06/2022 Programación Orientada a Objetos Carrera de Software Las variables de objetos son referencias Si se copian referencias (con el operador de asignación =), lo que se consigue es tener varias referencias apuntando a un mismo objeto. otroPunto = unPunto; unPunto otroPunto 4.0 _x 0.0 _y 0.0 _x 7.0 _y Este objeto se ha perdido. Ya no se puede acceder a él de ninguna forma (no hay referencia que lo apunte) El “recolector de basura” (garbage collector) entra en acción
  • 157. Ph.D. Franklin Parrales 156 07/06/2022 Programación Orientada a Objetos Carrera de Software Las variables de objetos son referencias Si se comparan dos referencias con el operador de igualdad (==), lo que se comprueba es si apuntan al mismo objeto o no (no se comprueba si los dos objetos son iguales). otroPunto == unPunto en este momento es true. unPunto otroPunto 4.0 _x 0.0 _y 0.0 _x 7.0 _y
  • 158. Ph.D. Franklin Parrales 157 07/06/2022 Programación Orientada a Objetos Carrera de Software Las variables de objetos son referencias Punto unPunto = new Punto(); unPunto.x(4); Punto otroPunto = new Punto(); otroPunto.x(4); otroPunto == unPunto ahora es false. unPunto otroPunto 4.0 _x 0.0 _y 4.0 _x 0.0 _y Aunque los dos objetos tengan el mismo estado (mismos valores en sus respectivos atributos). Las variables referencias no se inicializan automáticamente. unPunto = null; indicaría que unPunto no apunta a ningún objeto.
  • 159. Ph.D. Franklin Parrales 158 07/06/2022 Programación Orientada a Objetos Carrera de Software Las variables de objetos son referencias class Punto { ... } public class Referencias { public static void main(String[] args) { Punto uno = new Punto(); uno.x(3); uno.y(7); uno.print(); System.out.println(); Punto dos = uno; dos.print(); System.out.println(); if(uno == dos) System.out.println("Son el mismo objeto"); dos = new Punto(); dos.print(); System.out.println(); if(uno != dos) System.out.println("No son el mismo objeto"); dos.x(15); dos.y(23); uno.print(); System.out.println(); dos.print(); System.out.println(); } } Referencias.java
  • 160. Ph.D. Franklin Parrales 159 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos Cuando pasamos a métodos variables que son referencias, el paso de parámetro también se realiza por valor, pero el resultado, a efectos prácticos, es equivalente a un paso de parámetro por referencia. La variable en sí se pasa por valor, pero al tratarse de una referencia, el objeto al que referencia el argumento es el mismo que el que referencia el parámetro. Por ejemplo, supongamos que en una clase Parametros hay un método traslada() como el siguiente: public void traslada(Punto p, double dx, double dy) { p.x(p.x() + dx); p.y(p.y() + dy); } El método traslada el punto p una distancia dx en el eje de abscisas y una distancia dy en el eje de ordenadas.
  • 161. Ph.D. Franklin Parrales 160 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos Cuando pasamos un punto al método, se copia el argumento (una referencia) en el parámetro (otra referencia). Como las referencias son iguales, el objeto al que apuntan es el mismo y cualquier modificación que hagamos sobre el objeto apuntado será efectiva. public static void main(String[] args) { Punto p1 = new Punto(); Circulo c1 = new Circulo(p1, 13); c1.print(); System.out.println(); traslada(p1, 5, 13); c1.print(); System.out.println(); } Parametros.java
  • 162. Ph.D. Franklin Parrales 161 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos traslada(p1, 5, 13); 0.0 _x 0.0 _y p1
  • 163. Ph.D. Franklin Parrales 162 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos traslada(p1, 5, 13); public void traslada(Punto p, double dx, double dy) { p.x(p.x() + dx); p.y(p.y() + dy); } 0.0 _x 0.0 _y p1 p 5.0 dx 13.0 dy
  • 164. Ph.D. Franklin Parrales 163 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos traslada(p1, 5, 13); public void traslada(Punto p, double dx, double dy) { p.x(p.x() + dx); p.y(p.y() + dy); } 5.0 _x 13.0 _y p1 p 5.0 dx 13.0 dy
  • 165. Ph.D. Franklin Parrales 164 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos traslada(p1, 5, 13); 5.0 _x 13.0 _y p1 El objeto al que apunta el argumento p1 se ha visto afectado por las modificaciones realizadas dentro del método (a través del parámetro p).
  • 166. Ph.D. Franklin Parrales 165 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos Si dentro del método se cambia el parámetro referencia, haciendo que apunte a otro objeto, el argumento referencia no se verá afectado, de forma que después de la ejecución del método seguirá apuntando al mismo objeto que antes. public static void main(String[] args) { Punto p1 = new Punto(); Circulo c1 = new Circulo(p1, 13); c1.print(); System.out.println(); otro(p1); c1.print(); System.out.println(); } public static void otro(Punto p) { Punto tmp = new Punto(4, 5); p = tmp; } Parametros2.java
  • 167. Ph.D. Franklin Parrales 166 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos otro(p1); ... public static void otro(Punto p) { Punto tmp = new Punto(4, 5); p = tmp; } 0.0 _x 0.0 _y p1
  • 168. Ph.D. Franklin Parrales 167 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos otro(p1); ... public static void otro(Punto p) { Punto tmp = new Punto(4, 5); p = tmp; } 0.0 _x 0.0 _y p1 p
  • 169. Ph.D. Franklin Parrales 168 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos otro(p1); ... public static void otro(Punto p) { Punto tmp = new Punto(4, 5); p = tmp; } 0.0 _x 0.0 _y p1 p 4.0 _x 5.0 _y tmp
  • 170. Ph.D. Franklin Parrales 169 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos otro(p1); ... public static void otro(Punto p) { Punto tmp = new Punto(4, 5); p = tmp; } 0.0 _x 0.0 _y p1 p 4.0 _x 5.0 _y tmp
  • 171. Ph.D. Franklin Parrales 170 07/06/2022 Programación Orientada a Objetos Carrera de Software Paso de objetos a métodos otro(p1); ... public static void otro(Punto p) { Punto tmp = new Punto(4, 5); p = tmp; } 0.0 _x 0.0 _y p1
  • 172. Ph.D. Franklin Parrales 171 07/06/2022 Programación Orientada a Objetos Carrera de Software Los atributos Atributos: datos de tipos previamente definidos (primitivos) o ejemplares (objetos) de otras clases. Si se usan variables de tipos primitivos se habla a veces de programación mixta o híbrida (P.O.O. + Programación con tipos). Java incluye clases envoltorios para los tipos primitivos (Integer), lo que permite una POO pura. Si un atributo es un objeto de otra clase, simplemente se maneja en la implementación como tal, pasándole mensajes. Cuando una clase A hace uso de otra clase B al utilizar en su implementación objetos de esa clase B (al pasar mensajes a atributos, parámetros o variables locales que son objetos de esa clase), se dice que la clase A es cliente de la clase B. Primer tipo de relación que se establece entre las clases: Relación de clientelismo
  • 173. Ph.D. Franklin Parrales 172 07/06/2022 Programación Orientada a Objetos Carrera de Software Otro ejemplo de clase: Circulo public class Circulo { public Circulo() { _radio = 0; } // Constructor public Circulo(Punto p, double r) { // Constructor _centro = p; _radio = r; } public double radio() { return _radio; } public Punto centro() { return _centro; } public void radio(double r) { _radio = r; } public void centro(Punto p) { _centro = p; } public void print() { System.out.print("["); _centro.print(); // Pasa mensaje al objeto atributo System.out.print("," + _radio + "]"); } private double _radio; private Punto _centro; // Atrib. objeto de otra clase } Circulo.java Devolución de objeto Objeto parámetro La clase Circulo es cliente de la clase Punto
  • 174. Ph.D. Franklin Parrales 173 07/06/2022 Programación Orientada a Objetos Carrera de Software Convenios de denominación Para dar nombre a los elementos de los programas se puede utilizar cualquier convenio de denominación, pero lo mejor es utilizar uno y ser consecuente. Aquí vamos a seguir las siguientes reglas: ✓ Los identificadores se escribirán en general en minúsculas, a excepción, en los casos que se indique, de ciertas letras. ✓ Las clases comenzarán por mayúscula: Punto, Circulo. ✓ Los atributos comenzarán por subrayado: _centro, _x. ✓ Los métodos comenzarán por minúscula: print(), centro(). (Excepción: constructores, que se llaman igual que la clase.) ✓ Lo objetos comenzarán por minúscula: objeto1, punto. ✓ Métodos accedentes: nombre del atributo sin subrayado: x(), y(). ✓ Métodos mutadores: nombre del atributo sin subrayado: x(), y(). ✓ Identificadores compuestos por varias palabras: la segunda y siguientes palabras llevarán su primera letra en mayúscula: listaObjetosGraficos, CirculoColor.
  • 175. Ph.D. Franklin Parrales 174 07/06/2022 Programación Orientada a Objetos Carrera de Software Un problema con la clase Circulo El constructor predeterminado de la clase Circulo sólo inicializa explícitamente el atributo _radio, por lo que el otro atributo (_centro) es inicializado automáticamente por el compilador. Como se trata de una referencia a objeto, se inicializa a null (lo que significa que no hace referencia aún a ningún objeto). Entonces, corremos el riesgo de que se produzca un error en el método print(): public void print() { System.out.print("["); _centro.print(); System.out.print("," + _radio + "]"); } Si _centro es null, no apunta a ningún objeto; no se puede pasar mensaje alguno; el programa falla (eleva una excepción). Circulos.java
  • 176. Ph.D. Franklin Parrales 175 07/06/2022 Programación Orientada a Objetos Carrera de Software Un problema con la clase Circulo Podemos solucionar este problema de dos formas: 1. Comprobando si la referencia apunta a un objeto antes de intentar pasar el mensaje. 2. Asegurándonos de que la referencia siempre apunte a un objeto. Con la primera solución el método print() quedará así: public void print() { System.out.print("["); if(_centro == null) System.out.print("(null)"); else _centro.print(); System.out.print("," + _radio + "]"); } Ahora simplemente se muestra (null) como centro si no se ha asignado ningún Punto a _centro. Circulo2.java
  • 177. Ph.D. Franklin Parrales 176 07/06/2022 Programación Orientada a Objetos Carrera de Software Un problema con la clase Circulo Con la segunda solución, el constructor predeterminado de la clase Circulo creará el objeto Punto para el _centro, de forma que todos los objetos Circulo que se creen dispongan desde el principio de su objeto Punto como _centro: public Circulo3() { _radio = 0; _centro = new Punto(); } El constructor predeterminado de la clase Punto (añadido automáticamente en este caso por el compilador) se encarga de inicializar los atributos del Punto. Nos aseguramos así de que todo se inicializará adecuadamente (encadenamiento de inicializaciones). Circulo3.java
  • 178. Ph.D. Franklin Parrales 177 07/06/2022 Programación Orientada a Objetos Carrera de Software La vida de los objetos En Java es el sistema el que se encarga de destruir los objetos. El entorno de ejecución de Java dispone de un recolector de basura que destruye los objetos (liberando su memoria) cuando detecta que los objetos ya no son accesibles (se han perdido). Cuando ya no hay ninguna variable que haga referencia a un objeto, bien directamente o bien mediante atributos de otros objetos, entonces el recolector de basura sabe que puede eliminar el objeto sin riesgos.
  • 179. Ph.D. Franklin Parrales 178 07/06/2022 Programación Orientada a Objetos Carrera de Software Clonación de objetos La copia de referencias, como hemos visto, tan sólo hace que las dos referencias apunten al mismo objeto. Si necesitamos obtener una copia de un objeto, debemos encargarnos nosotros mismos de hacer las copias oportunas. Basta con que añadamos en cada clase un método copia() que devuelva una copia del objeto receptor. El método creará un objeto de la clase, copiará en él los atributos del objeto receptor que sean valores simples (tipos primitivos) o pedirá una copia de los atributos que sean objetos a las correspondientes clases, y devolverá el objeto creado (que será una copia del receptor). public class Punto { public Punto copia() { Punto tmp = new Punto(); tmp._x = _x; tmp._y = _y; return tmp; } ... Punto3.java
  • 180. Ph.D. Franklin Parrales 179 07/06/2022 Programación Orientada a Objetos Carrera de Software Clonación de objetos public class Circulo { public Circulo copia() { Circulo tmp = new Circulo(); tmp._radio = _radio; tmp._centro = _centro.copia(); return tmp; } ... public class Clonacion { public static void main(String[] args) { Circulo4 c1 = new Circulo4(); c1.print(); System.out.print(" "); Circulo4 c2 = c1.copia(); c2.print(); System.out.println(); c1.radio(4); c1.print(); System.out.print(" "); c2.print(); System.out.println(); Punto3 p = new Punto3(1, 1); c2.centro(p); c1.print(); System.out.print(" "); c2.print(); System.out.println(); } } Clonacion.java Circulo4.java
  • 181. Ph.D. Franklin Parrales 180 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos ¿Cuántos objetos se crean en el siguiente programa? ¿Cuántos quedan inaccesibles (se pierden)? public class Objetos { public static void main(String[] args) { Circulo c1 = new Circulo(); Punto p1 = new Punto(); c1.radio(7); c1.centro(p1); Circulo c2 = new Circulo(p1, 13); Punto p2 = new Punto(5, 2); c1.centro(p2); Circulo c3 = c2; p1 = new Punto(1, 1); c3.centro(p1); } } Objetos.java
  • 182. Ph.D. Franklin Parrales 181 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c1 ? c1
  • 183. Ph.D. Franklin Parrales 182 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c1 new Circulo(); ? _radio ? _centro ? c1
  • 184. Ph.D. Franklin Parrales 183 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c1 new Circulo(); _radio = 0; ? _radio ? _centro ? c1 0.0
  • 185. Ph.D. Franklin Parrales 184 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c1 new Circulo(); _radio = 0; new Punto(); 0.0 _x 0.0 _y 0.0 _radio ? _centro ? c1
  • 186. Ph.D. Franklin Parrales 185 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c1 new Circulo(); _radio = 0; _centro = new Punto(); 0.0 _radio _centro ? c1 0.0 _x 0.0 _y
  • 187. Ph.D. Franklin Parrales 186 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c1 = new Circulo(); 0.0 _radio _centro c1 0.0 _x 0.0 _y
  • 188. Ph.D. Franklin Parrales 187 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c1 = new Circulo(); Punto p1 = new Punto(); 0.0 _radio _centro c1 0.0 _x 0.0 _y 0.0 _x 0.0 _y p1
  • 189. Ph.D. Franklin Parrales 188 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c1 = new Circulo(); Punto p1 = new Punto(); c1.radio(7); 7.0 _radio _centro c1 0.0 _x 0.0 _y 0.0 _x 0.0 _y p1
  • 190. Ph.D. Franklin Parrales 189 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c1 = new Circulo(); Punto p1 = new Punto(); c1.radio(7); c1.centro(p1); 7.0 _radio _centro c1 0.0 _x 0.0 _y 0.0 _x 0.0 _y p1 public void centro(Punto p) { _centro = p; }
  • 191. Ph.D. Franklin Parrales 190 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c1 = new Circulo(); Punto p1 = new Punto(); c1.radio(7); c1.centro(p1); PERDIDO 7.0 _radio _centro c1 0.0 _x 0.0 _y 0.0 _x 0.0 _y p1
  • 192. Ph.D. Franklin Parrales 191 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Punto p1 = new Punto(); c1.radio(7); c1.centro(p1); Circulo c2 = new Circulo(p1, 13); PERDIDO 7.0 _radio _centro c1 0.0 _x 0.0 _y 0.0 _x 0.0 _y p1 13.0 _radio _centro c2
  • 193. Ph.D. Franklin Parrales 192 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos c1.radio(7); c1.centro(p1); Circulo c2 = new Circulo(p1, 13); Punto p2 = new Punto(5, 2); PERDIDO 7.0 _radio _centro c1 0.0 _x 0.0 _y 0.0 _x 0.0 _y p1 13.0 _radio _centro c2 5.0 _x 2.0 _y p2
  • 194. Ph.D. Franklin Parrales 193 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos c1.centro(p1); Circulo c2 = new Circulo(p1, 13); Punto p2 = new Punto(5, 2); c1.centro(p2); PERDIDO 7.0 _radio _centro c1 0.0 _x 0.0 _y 0.0 _x 0.0 _y p1 13.0 _radio _centro c2 5.0 _x 2.0 _y p2
  • 195. Ph.D. Franklin Parrales 194 07/06/2022 Programación Orientada a Objetos Carrera de Software Un mundo de objetos Circulo c2 = new Circulo(p1, 13); Punto p2 = new Punto(5, 2); c1.centro(p2); Circulo c3 = c2; PERDIDO 7.0 _radio _centro c1 0.0 _x 0.0 _y 0.0 _x 0.0 _y p1 13.0 _radio _centro c2 5.0 _x 2.0 _y p2 c3