Unidad 3 CLASES, OBJETOS E INTSANCIAS

Post on 21-Jan-2018

165 views 0 download

Transcript of Unidad 3 CLASES, OBJETOS E INTSANCIAS

Unidad3PROGRAMACIÓNORIENTADAAOBJETOS

ESTRUCTURADEUNACLASE

Clases yObjetos

� Una clase describe un grupo de objetos que compartenpropiedades y métodos comunes

� Una clase es una plantilla que define qué forma tienenlos objetos de la clase

� Una clase se compone de:� Información:campos (atributos,propiedades)� Comportamiento:métodos (operaciones,funciones)

� Unobjeto es una instancia deuna clase

“Juan Pérez”StringVentana (tiempo de ejecución)Ventana (tiempo de diseño)Juan PérezEmpleadoLa MonedaCasaSodimacEmpresaObjetoClase

Implementacióndeunaclase

� Elementosqueaparecenenlaimplementacióndeunaclase:� Lapalabrareservadathis.� Modificadoresestáticos,dinámicosyfinalesdeunaClaseysuscomponentes.

� Modificadoresdevisibilidadpublic yprivate deunaClaseysuscomponentes.

DefinicióndeAtributos

� Los Atributos de una Clase almacenan los datos de laClase.

� Por lo general, los atributos se suelen definir privados yse definen métodos consultores y modificadores. Deesta manera se garantiza la encapsulación u ocultaciónde datos.

� Los atributos se alojan en variables.

Atributosdelaclase

classCirculo {//atributos//métodos//constructores//main()

}

ÁmbitodelasvariablesEn una clase pueden definirse tres tipos de variables:� Variables de clase o variables estáticas (static variables)

§ Son compartidas por todos los objetos de la clase, y de otras clases si elacceso a estas lo permite.

§ Pueden existir, aún asi no se hayan creado objetos y duran el tiempo quela clase se encuentra cargada en memoria.

§ Se guardan en la RAM, en el static storage.� Variables de instancia o de objeto

§ Son variables guardadas en cada objeto de la clase.§ Se guardan en la RAM, en el heap storage.

� Variables locales a los métodos.§ Duran hasta cuando se termina de ejecutar el método.§ Se guardan en la RAM, en el stack storage.

Variables

local

Deinstancia

Estática

classCirculo {//camposdoubleradio=5;Stringcolor;staticint numeroCirculos =0;staticfinaldoublePI=3.1416;//métodos//constructores//main()

}

nradio y color son variables de instancia, hay una copia de ellas por cada objeto Circulo

nnumeroCirculos y PI son variables static, están sólo una vez en memoria; PI además es constante (final): no puede modificarse

Acceso avariables

� Acceso avariablesdeinstancia:seutiliza lasintaxis"objeto."

Circulo c1=newCirculo();c1.radio=5;c1.color="rojo";//si c1es null,//segenerauna excepción NullPointerException

� Acceso avariablesstatic:seutiliza lasintaxis "clase."Circulo c1;Circulo.numeroCirculos++;System.out.println(Circulo.PI);

9

ReferenciasenJava

public class TestClase {public static void main(String args[]){

Circuloc1=newCirculo();Circuloc2;c2=c1;

}}�CreacióndeObjetosdeunaClase:

� c1esunavariableReferenciaalnuevoObjetocreado.� c2esunavariableReferenciaaningúnObjeto,i.e.trasladeclaraciónCirculoc2;c2==null

� ¿Quéocurresiseejecutac2=c1;?

ReferenciasenJava

�Una variable Referencia almacena la dirección dememoria en la que se encuentra el Objeto al quereferencia.

�Alhacer:�Circuloc2=c1;� Lavariablereferenciac2pasaatenerelmismovalorque7c1,esdecir,ambasapuntanalmismoobjeto.

Definicióndeconstructores

�Unconstructores unmétodo especialinvocado parainstanciar einicializar unobjeto deuna clase� Invocado conlasentencia new� Tiene elmismo nombre quelaclase� Puede tener ceroomás parámetros� Notiene tipo deretorno,ni siquiera void� Unconstructornopúblico restringe elacceso alacreación deobjetos

� Si la clase no tiene ningún constructor, el sistemaprovee un constructor default, sin parámetros

� Si la clase tiene algún constructor, debe usarse algunode los constructores definidos al instanciar la clase (elsistema no provee un constructor default en este caso)

Definicióndeconstructores

classCirculo {...//constructorespublicCirculo(){radio=1;

}publicCirculo(int r){radio=r;

}

voidf(){Circulo c=newCirculo(30);...

}}

Dosdiferentesconstructores

Instanciaciónusandoelsegundoconstructor

Definicióndeconstructores

� Los Constructores de una clase permiten dar un valorinicial a los atributos del objeto. Ejemplo: definición delos métodos Constructores de Circulo

InvocaciónentreConstructores

� Lapalabrathis puede ser utilizada en laprimera líneadeunconstructorparainvocar aotro constructor.classCirculo {privatedoubleradio;privatestatic int numeroCirculos =0;Circulo(int radio){this.radio =radio;Circulo.numeroCirculos++;

}Circulo(){this(10); //radiodefault:10

}}

This hacereferenciaalobjetosobreelqueseinvocaelmétodoysirvde paraevitar

aliasing denombres

¿This?

� Sirve para hacer referencia a un método o propiedaddel objeto actual.

¿This?

� ¿Donde se puede usar el this?Puedereferirseacualquiermiembrodelobjetoactualdesdedentrodeunmétododeinstanciaounconstructor.Siseintentautilizardentrodeun método estático (Staticmethods)lanzara:

"Cannot useThis inastatic context"

Definición deMétodos

� Instrucciones que operan sobre los datos de un objetopara obtener resultados.

� Pueden retornar un valor o pueden ser declaradosvoid para indicar que no retornan ningún valor

� Pueden ser de instancia o static.

classCirculo {//camposdoubleradio=5;Stringcolor;staticint numeroCirculos =0;staticfinaldoublePI=3.1416;//métodosdoublegetCircunferencia(){returngetCircunferencia(radio);

}staticdoublegetCircunferencia(doubler){return2*r*PI;

}//constructores//main()

}

Método de instancia, tiene acceso directo a las variables de instancia del objeto sobre el que se invoca

Método static, no tiene acceso directo a variables de instancia

Definición deMétodos

� LosMétodosdeunaclasedefinensufuncionalidad.� Ejemplo:DefinicióndeMétodosConsultoresenlaclaseCirculo.

�Al definir como privados todos los atributos de Circulo,se deben proporcionar métodos para acceder a su valor.

Sepodríautilizarthisparareferenciaraatributosperonoesnecesariopuestoquenohayaliasing de

nombres.

Definición deMétodos

�Al definir como privados todos los atributos de Circulo,se deben proporcionar métodos para modificar su valor.� Ejemplo:definicióndelosMétodosModificadores deCirculo.

Definición deMétodos

� Ejemplo:definicióndeotrosMétodosdeCirculo

� El uso de un método estático permite definirlo a nivelde clase, no a nivel de instancia (objeto individual).� SedeberáinvocarcomoCirculo.leerCirculo(...).

� Crea una clase Libro que modele la información que se mantiene enuna biblioteca sobre cada libro: título, autor (usa la clase Persona),ISBN, páginas, edición, editorial , lugar (ciudad y país) y fecha deedición (usa la clase Fecha). La clase debe proporcionar los siguientesservicios:� accedentesymutadores,� métodoparaleerlainformacióny� métodoparamostrarlainformación.Esteúltimométodomostrarálainformacióndellibroconesteformato:� Título:Introduction toJavaProgramming� 3a.edición� Autor:Liang,Y.Daniel� ISBN:0-13-031997-X� Prentice-Hall,NewJersey(USA),viernes16denoviembrede� 2001� 784páginas

Sobrecargademétodos(Overloading)� La firma de un método es la combinación del tipo dedato que regresa, su nombre y su lista de argumentos.

� La sobrecarga de métodos es la creación de variosmétodos con el mismo nombre pero con diferentesfirmas y definiciones.

�Se utiliza para reutilizar el nombre de un métodopero con diferentes argumentos.

Reglasparasobrecargarunmétodo� Los métodos sobrecargados deben de cambiar la listade argumentos.

� Pueden cambiar el tipo de retorno.�Un método puede ser sobrecargado en la misma clase oen una subclase.

� Pueden cambiar el modificador de acceso.� Pueden declarar nuevas o más amplias excepciones.

�Veamosunmétodoquesedeseasobrecargar:

� LossiguientesmétodossonsobrecargaslegalesdelmétodocambiarTamano():

Heap,Stack yVariablesdereferencia� La memoria está dividida en tres partes, Zona de Datos,Stack y Heap.

� Existen dos espacios en donde se ejecutan nuestrasaplicaciones: Stack y Heap.

� Stack almacena variables locales y los métodos enejecución

�Heap guarda las variables de instancia y los objetos�Cada hilo de la aplicación tiene su propia pila (Stack)pero todos comparten el mismo montículo (Heap).

Stack

�Almacena:� Referenciasaobjetos(instacias)� Datosdetipoprimitivo(int,float,char…)� Variableslocales� Parámetrosderetornodelosmétodos

� Es estático, si lo llenamos, caeríamos en unStackOverflowError

public void metodo(){metodo();

}

Heap

� Los objetos son creados, eliminados o modificados enesta parte de la memoria.

� La Java Virtual Machine (JVM), le asigna un espaciopredeterminado de memoria y según se vayarequiriendo, la JVM le seguirá proporcionando másmemoria.�Los elementos almacenados no pueden sereliminados directamente sino con el GarbageCollector.

ComointeractúanelHeap yelStack� Lasreferenciaspuedenapuntaraelementosdelheap (esdecir,alosobjetos).

� Lasreferenciastienenuntipo,queesaltipodeobjetoquepuedenapuntarlasreferencias.

Crealareferenciaenelstack

Crea el objetoen el heap yen el mismomomentohacemos lareferenciadesde el stack

ComointeractúanelHeap yelStack

Un objeto puede estar siendo apuntado por muchas referencias, pero una referencia solo apunta a un objeto.

InstanciaciónyReferencias

� Los objetos se crean con el operador new, y se manejanmediante referencias

� Los objetos se crean en el área de memoria dinámicaconocida como el heap

� Unareferenciacontieneladireccióndeunobjeto(essimilaralospunterosdeotroslenguajes)

� Unaasignaciónentreobjetosesunaasignacióndereferencias� Circuloc1=newCirculo();� Circuloc2=c1;

Garbage Collection

� Es unprocesodelaJVMqueestárevisandoqueobjetospuedenserborradosycualesno.

� Esunprocesodebajaprioridad,porloquenosepasaentodomomentoliberandomemoria,sinoquepasadevezencuando.

Elprimerobjetosequedasinreferencia

PasodeParámetros

� EnJavaelpasodeparámetrosserealiza"porvalor“.� Significa que cuando un argumento se pasa a unafunción, la función recibe una copia del valor original.Por lo tanto, si la función modifica el parámetro, sólo lacopia cambia y el valor original permanece intacto.� Argumentosdetiposprimitivos

� Si un método modifica el valor de un parámetro, este cambio sóloocurre al interior del método; al retornar el método, se mantieneel valor original

� Argumentosdetiporeferencia(objetos)� Al retornar el método, la referencia pasada como parámetro siguereferenciando al mismo objeto; sin embargo, los campos delobjeto podrían haber sido modificados por el método

ArrayList

�Clase que permite almacenar datos en memoria deforma similar a los Arrays.

� Estructuradinámicadedatos.� http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

�ArrayList nombreArray =newArrayList();� Puedecontenercualquiertipodeelementos.

Ventajas

�No es necesario declarar su tamaño como pasa conlos Arrays porque el almacenamiento es dinámico locual permite aumentar o disminuir el consumo dememoria de acuerdo a las necesidades.

� La clase ArrayList tiene muchos métodos predefinidosque hacen más fácil su uso. Por ejemplo: ara saber siun array cuenta con un dato tendrás que recorrerloentero. Sin embargo un ArrayList te devuelve elobjeto que en la colección tiene ese valor.

�Un ArrayList colecciona objetos, un array coleccionadtos de un mismo tipo, que además es básico.

MétodosdeArrayList

ArrayList

RecorrerunArray

� Podemosrecorrerlodeformaclásicaconun buclefor:

� Sielarraycontieneobjetosdetiposdistintosodesconocemoseltipo:

Usodefor each

� Facilita el recorrido de objetos existentes en una colecciónsin necesidad de definir el número de elementos a recorrer.

� Sintaxis:

“ParacadaelementodeltipoTipoARecorrer queseencuentredentrodelacolecciónnombreDeLaColección ejecutalas

instruccionesqueseindican”

� Evita el uso de Iteradores o de un bucle for normal.

Ejercicio

�Crea una clase denominada ListaCantantesFamosos queal ser inicializada contenga un ArrayList con tres Stringsque sean el nombre de cantantes famosos. Crea unaclase test con el método main que inicialice un objetoListaCantantesFamosos y usando un forextendidomuestre los cantantes en la lista por pantalla.Se debe pedir al usuario un nombre más de cantantefamoso, y una vez introducido mostrar la listaactualizada usando un for extendido.