poo1

31
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

Upload: leonardo-corredor

Post on 21-Dec-2015

7 views

Category:

Documents


0 download

DESCRIPTION

Poo JAVA

TRANSCRIPT

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.

POO

Características:

Ocultamiento de la información.

Encapsulamiento.

Herencia.

Polimorfismo.

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

si todas las variables son del mismo tipo se pueden declarar

en una línea, inicializándonos o no.

EJEMPLOS

Crear un proyecto en java Prueba

En public static void main(String[]

args) // dentro de las llaves

{

digitar este código

int a=30, b=60, c=20;

int suma=a+b+c;

System.out.print(suma);

}