poo1
DESCRIPTION
Poo JAVATRANSCRIPT
ProgramaciónOrientada a objetos
Conjunto de disciplinas (ingeniería) que desarrollan y modelan software que facilita la construcción de sistemas complejos a partir de componentes.
Propiedades
Abstracción
Encapsulamiento
Modularidad
Jerarquía
Polimorfismo
Objeto
Entidad que contiene los atributos que
describen el estado de un objeto del mundo real
y las acciones que se asocian con él.
Pieza de software única.
Posee características o propiedades (atributos).
Posee habilidades o funcionalidades
(comportamiento).
Pertenece a un tipo (clase).
Pueden o no corresponderse con objetos reales.
Objeto
Fundamentos de la POO (Allan Kay)
Todo es un Objeto.
Un programa es un conjunto de objetos enviándose mensajes entre sí.
Cada Objeto tiene su memoria, conformada por otros Objetos.
Todo Objeto tiene su propio tipo (pertenece a una clase).
Todo Objeto de un mismo tipo puede recibir los mismos mensajes.
Objeto
Composición
Objeto = estado + comportamiento + identidad
Estado: propiedades o atributos que caracterizan al Objeto.
Comportamiento: Viene determinado por la forma en la que el objeto interactúa en el sistema (mensajes).
Identidad: propiedad característica que distingue un Objeto del resto de los Objetos.
Mensajes
Mensaje es la acción realizada por un objeto
mediante la cual se invoca un método.
Receptor.método(información necesaria)
El conjunto de mensajes que puede recibir
un objeto se conoce como protocolo de un
objeto
Clase
Es una plantilla que se utiliza para definir
Objetos.
Puede verse como un tipo (que además,
define métodos).
Los Objetos que se definen a través de esa
clase son sus instancias.
Son las instancias las que reciben los
mensajes definidos en su clase.
Clase
Descripción de un conjunto de objetos
Métodos y datos que resumen las características comunes de un conjunto de objetos.
Muestra el comportamiento general de un grupo de objetos.
Creación de objetos
Destrucción de objetos
Clase (Representación)
NombreDeLaClase
- atributo1
- atributo2
- …
- atributoN
+ metodo1
+ metodo2
+ …
+ metodoN
Clase
Ventajas de usar Clases:
Cada clase puede crearse de modo independiente.
Asegura consistencia de los datos que la componen.
La implementación queda escondida al usuario.
Puede variarse la implementación sin tener que cambiar los programas que las usan.
Es altamente reutilizable.
Identificación de clases
Partiendo del enunciado de un problema:
1. Nombres del enunciado -> objetos
2. Adjetivos y complementos del verbo ->
atributos
3. Verbos -> métodos
Tipos de método:
Constructor / Destructor
Modificadores del estado
Selectores Mezcladores
Cálculos o procesamientos
POO
Booch: “La POO es un método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa un ejemplar de una clase y cuyas clases son miembros de una jerarquía de clases unidas mediante relaciones de herencia.”
En un Programa orientado a objetos
Creación de objetos mediante un mensaje de construcción a la clase.
Intercambio de mensajes entre objetos.
Eliminación de objetos cuando no se necesitan, mediante un mensaje de destrucción a la clase.
POO
La unidad lógica de programación es el objeto.
Los Objetos tienen relaciones.
Existen clases que agrupan conceptualmente los
objetos.
Las clases pertenecen a una jerarquía (son las
clases las que heredan y no los objetos).
POO
“Un programa orientado a objetos se estructura
como una comunidad de agentes interactuando,
llamados objetos. Cada objeto tiene un papel
que ejecutar. Cada objeto proporciona un
servicio, o realiza una acción, usada por otros
miembros de la comunidad.”
POO
“La acción se inicia por la transmisión de un mensaje a un agente (objeto) responsable de la acción. El mensaje contiene el nombre y los argumentos necesarios. Si el receptor acepta el mensaje, acepta la responsabilidad de llevar a cabo la acción solicitada. En respuesta al mensaje, realizará algún método para satisfacer la petición.”
POO
“El cliente que envía la solicitud no tiene por
qué conocer cómo se satisfará su petición”
Barrera difícil de superar
“La creencia del programador de que debe
escribir TODO y no usar los servicios de otros”
Debe desarrollar componentes reutilizables
POO
Mensajes frente a Procedimientos
M: Receptor designado
P: No hay receptor designado
M: Interpretación del mensaje depende del receptor y puede variar para diferentes receptores
M: Determino el método en Run Time
P: En tiempo de compilación
POO
Clases e Instancias (Objetos)
“Todos los objetos son instancias de una clase. El método invocado en respuesta a un mensaje es determinado por la clase del receptor. TODOS los objetos de la misma clase usan el mismo método en respuesta a mensajes similares”
Las diferentes instancias de cada clase (Objetos) difieren en los valores de los atributos.
Dos objetos con los mismos valores de los atributos pueden ser diferentes
POO
Ventajas de la POO
Reusabilidad.
Facilidades de prototipación.
Gran calidad de herramientas.
Mayor paralelismo en el desarrollo.
Representación del mundo real.
Tipo abstracto de datos
Tipo de dato definido por el programador que se puede manipular de un modo similar a los tipos de datos definidos por el sistema
Encapsulamiento + Ocultamiento.
Implementación escondida al cliente.
Se generan independientemente.
Se pueden probar independientemente.
Aumentan la reutilización de código.
Herencia
Herencia es la capacidad de un objeto para utilizar las estructuras y los métodos existentes en antepasados o ascendientes
Reutilización mediante herencia
Definición de nuevos tipos a partir de otros con los que comparten algún tipo de característica.
Tipos de herencia:
Herencia simple
Herencia múltiple
Anulación o sustitución
Herencia
Jerarquía de clases
Ej: Tom > gato > felino > mamífero > animal > ser vivo > objeto
El comportamiento de una categoría más general es aplicable a una categoría particular
Las clases se organizan en una estructura de herencia. Una clase hijo o subclase heredará atributos de una clase padre. Una clase padre abstracta es una clase para la que no hay instancias. Sólo se usa para crear subclases
Herencia
La búsqueda de un método a invocar en respuesta a un mensaje dado, se inicia con la clase del receptor.
Si no se encuentra un método apropiado, se busca en la clase padre.
La búsqueda continua hasta que la cadena de superclases se agota.
Si no se encuentra ningún método aplicable, se envía un mensaje de error.
Los métodos de nivel inferior sobrescriben (override) el comportamiento heredado.
Polimorfismo
El término polimorfismo se refiere a que una
característica de una clase puede tomar varias
formas.
Permite invocar métodos distintos con el mismo
mensaje, resolviéndose qué método se utilizará
en tiempo de ejecución
Tipos Por sobrecarga de funciones.
Por vinculación dinámica.
ACUERDOS EN LOS NOMBRES En las clases:
La primera letra ira en mayúscula.
Si esta formada por más de una palabra, la primera letra de la palabra estará en mayúscula.
Ejemplo: SalarioEmpleado
En los métodos o funciones:
La primera letra ira en minúscula.
Si esta formada por más de una palabra, la primera letra de la palabra estará en mayúscula.
Ejemplo: calculaSueldo
En las constantes:
Todas las letras irán en mayúsculas.
No pueden comenzar por números.
Ejemplo: IVA
En las variables:
La primera letra ira en minúscula.
Si esta formada por más de una palabra, la primera letra de la palabra estará en mayúscula. También se pueden usar separadores como guiones bajos.
No pueden comenzar por números.
Ejemplo: sueldoEmpleado o sueldo_empleado
En las interfaces:
La primera letra ira en mayúscula.
Si esta formada por más de una palabra, la primera letra de la palabra estará en mayúscula.
USO DE COMENTARIOS
Los comentarios son instrucciones especiales que no se ejecutan es muy útil para los programadores en cualquier lenguaje de programación, ya que nos permite insertar anotaciones que nos servirán para trozos de código que pueden resultar confusos en un futuro. También es útil, si nuestro código lo manejan mas personas.
Los comentarios en Java se pueden escribir de varias maneras:
Si queremos que un comentario sea de una línea escribimos // y el comentario a continuación.
Si queremos escribir un comentario de varias lineas, escribimos /* como apertura, el comentario va a continuación, puede ocupar varias líneas y para cerrar usamos */
Tenemos un tipo de comentario especial usado en Javadoc, que se usa para crear documentación de la aplicación, se insertan antes de clases, métodos, constructores, etc. Su apertura es /** y se cierra con */.
Ejemplo:
/**
* Comentario especial Javadoc usado para la documentación
* @author UPN
*
*/
//comentario de una línea
LAS VARIABLES Antes de empezar, las variable son estructuras de datos que pueden variar durante la ejecución de un
programa.
Declarar variables significa indicar el tipo de dato que almacenara las variables que participan en el programa.
En Java, se reserva una zona de memoria que la maquina virtual Java gestiona automáticamente. Las variables primitivas engloban los tipos de datos mas sencillos como puede ser un número, un carácter, etc.
Antes de usar una variable debemos declararla y es recomendable iniciarla. La primera vez que se usa debe declararse, el resto de veces no se debe hacer, es importante que el valor asignado sea compatible con el tipo de variable.
Por ejemplo, si declaramos una variable de tipo numérico, esta no puede contener una cadena de caracteres.
La sintaxis de una declaración de una variable es: tipo_variable nombre_variable; Por ejemplo, int num; pero como hemos dicho antes es recomendable iniciar estas variables con un numero genérico como uno o cero o según la ocasión.
Hay una serie de reglas a la hora de escribir el nombre de las variables:
Los nombres de las variables no pueden comenzar por números, pero si puede formar parte del nombre.
El nombre de una variable no puede tener espacios.
El nombre de la variable no puede estar formado por operadores como +, -, !, etc.
No puede haber dos variables que se llamen igual, aunque sean de distintos tipos, en el mismo ámbito (ya explicaremos esto mas tarde).
No pueden tener el nombre de palabras reservadas, en eclipse estas palabras se colorean.
Java es “case sensitive”, es decir, que diferencia entre mayúsculas y minúsculas. A es distinto quea.
Por convención, se suele escribir el nombre de las variables en minúscula, si hay mas de una palabra en la variable podemos separarlo con un _ o colocar la primera letra de la nueva palabra en mayúscula, por ejemplo, variablePrueba.
al final de cada instruccion se debe colocar un ;
Tipo Descripcion Ejemplo Rango valores
long Representa a un número
entero real. Usa 8 bytes.
long a=40000000;
long b=646334578;
long c=-32356;
-263
a 263
-1
int Representa a un número
entero real. Usa 4 bytes.
Es el mas usado
int a=-1;
int b=5;
int c=30000;
-231
a 231
-1
short Representa a un número
entero real. Usa 2 bytes.
short a=20;
short b=300;
short c=-30000;
-32768 a 32767
byte Representa a un número
entero real. Usa 1 byte.
byte a=30;
byte b=126;
byte c=-120;
-128 a 127
double Representa a un numero
de coma flotante, es
compatible con una
variable con un entero
real pero este no lo es con
double. Usa 4 bytes.
double a=5.5;
double b=30;
double c=30.0;
-1,79 * 10308
a 1,79 * 10308
float Representa a un número
real, aceptando
decimales. Pasa igual que
con double. Usa 4 bytes.
float a=4.55555;
float b=-1.8521;
float c=600.152;
-3,4 · 1038
a 3,4 · 1038
boolean Solo puede contener true
o false. Se usa para
condiciones lógicas. Usa 2
bytes
boolean a=true;
boolean b=false;
true o false
char Representa un numero,
letra o simbolo segun la
tabla ASCII. Es compatible
con un numero entero
real. Si es un caracter, va
char a='A';
char b=97;
(corresponde a la letra
a de la tabla ASCII)
char c='!';
Caracteres
Ejemplo:
Crear un nuevo proyecto Prueba
Dentro de main
public static void main(String[] args)
{
int a=30;
double b=30.5;
double suma=a+b; //si fuera un int daria error
System.out.print(suma);
}
En esta declaración intervienen palabras clave cuyo significado es
importante comprender
a) static: los atributos miembros de una clase pueden ser atributos de
clase o atributos de instancia; se dice que son atributos de clase si se
usa la palabra clave static: en ese caso la variable es única para todas
las instancias (objetos) de la clase (ocupa un único lugar en memoria).
A veces a las variables de clase se les llama variables estáticas. Si no se
usa static, el sistema crea un lugar nuevo para esa variable con cada
instancia (la variable es diferente para cada objeto). En el caso de una
constante no tiene sentido crear un nuevo lugar de memoria por cada
objeto de una clase que se cree. Por ello es adecuado el uso de la
palabra clave static. Cuando usamos “static final” se dice que creamos
una constante de clase, un atributo común a todos los objetos de esa
clase.
b) final: en este contexto indica que una variable es de tipo constante:
no admitirá cambios después de su declaración y asignación de valor.
final determina que un atributo no puede ser sobreescrito o redefinido.
O sea: no funcionará como una variable “tradicional”, sino como una
constante. Toda constante declarada con final ha de ser inicializada en
el mismo momento de declararla. final también se usa como palabra
clave en otro contexto: una clase final (final) es aquella que no puede
tener clases que la hereden. Lo veremos más adelante cuando hablemos
sobre herencia.
Los modificadores de acceso determinan desde qué clases se puede acceder a un determinado elemento. En Java tenemos
4 tipos: public, private, protected y el tipo por defecto, que no tiene ninguna palabra clave asociada, pero se suele conocer
como default o package-private.
DEFAULT:
Si no elegimos ningún modificador, se usa el de por defecto, que sólo puede ser accedido por clases que están en el mismo
paquete.
PUBLIC:
Este nivel de acceso permite a acceder al elemento desde cualquier clase, independientemente de que esta pertenezca o no
al paquete en que se encuentra el elemento.
PRIVATE:
Es el modificador más restrictivo y especifica que los elementos que lo utilizan sólo pueden ser accedidos desde la misma
clase en la que se encuentran. Este modificador sólo puede utilizarse sobre los miembros de una clase y sobre interfaces y
clases internas, no sobre clases o interfaces de primer nivel, dado que esto no tendría sentido.
PROTECTED:
Indica que los elementos sólo pueden ser accedidos desde su mismo paquete y desde cualquier clase que extienda la clase
en que se encuentra, independientemente de si esta se encuentra en el mismo paquete o no. Este modificador, como
private, no tiene sentido a nivel de clases o interfaces no internas.
En otras palabras, si determinada clase Hijo hereda el comportamiento de una clase Padre, la clase Hijo tendrá acceso a
todos aquellos campos/métodos definidos como protected en Padre, pero no aquellos declarados como private en Padre.
Modificadores de acceso