Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Programación Orientada a Objetos, Resúmenes de Informática

Asignatura: Logoterapia, Profesor: Gaby Gaby, Carrera: Psicología, Universidad: UFV

Tipo: Resúmenes

2016/2017

Subido el 16/03/2017

makoke123
makoke123 🇪🇸

4.5

(2)

26 documentos

1 / 38

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
LIDIA
Laboratorio de Investigación y
desarrollo en Inteligencia Artificial
Departamento de Computación
Universidade da Coruña, España
Principios de Análisis Informático
Resumen de la Programación
Orientada a Objetos
Eduardo Mosqueira Rey
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26

Vista previa parcial del texto

¡Descarga Programación Orientada a Objetos y más Resúmenes en PDF de Informática solo en Docsity!

LIDIALaboratorio de Investigación ydesarrollo en Inteligencia ArtificialDepartamento de ComputaciónUniversidade da Coruña, España

Principios de Análisis Informático

Resumen de la Programación

Orientada a Objetos

Eduardo Mosqueira Rey

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Índice

Propiedades de la POO

Herencia

Polimorfismo

Tipificación

Ligadura dinámica

Principios de diseño

Principio abierto-cerrado

Principio de sustitución de Liskov

Tipos de herencia

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Herencia

Constructores

¿Qué constructor habrá que poner en SubClase?

Todo objeto de una subclase es un objeto de una superclase

La palabra clave para llamar a un constructor de la superclasees

super

(la palabra clave

this

se utilizaba para llamar a un

constructor de la propia clase)

class

SuperClase

{

int

valor;

public

SuperClase(

int

valor)

{

this

.valor = valor;

}

} class

SubClase

extends

SuperClase

{

// Constructor necesario ya que la superclase// no tiene constructor por defecto public

SubClase(

int

valor)

{

super

(valor); }

}

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Herencia

Constructores

Herencia y constructores

Los constructores no se heredan, son exclusivos de la clase enla que se definen

Por ello la primera instrucción de un constructor de unasubclase es llamar al constructor de la superclase, y este a suvez al de su superclase hasta llegar a la clase Object

Esta llamada generalmente está implícita y consiste en unallamada al constructor sin parámetros. Si queremos hacerlaexplícita deberemos poner “super()” como primera instrucción

Si el constructor sin parámetros no existe la llamada implícitafallará y será necesario hacer una llamada explícita:“super(param1, param2)”

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Herencia

Clases abstractas e interfaces

¿Interfaces o clasesabstractas?

API de colecciones

<>

List

AbstractCollection

<>

Collection

<>

Set

<>

SortedSet

AbstractSet

AbstractList

TreeSet

HashSet

ArrayList

AbstractSequentialList

LinkedList

<>

Map

<>

SortedMap

AbstractMap

TreeMap

HashMap

WeakHashMap

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Polimorfismo

Definición

El término viene del griego y significa “muchas formas”

En lenguajes OO se podría definir como: “la capacidad de unavariable de tener más de un tipo y de una función de seraplicada sobre parámetros de distintos tipos”.

Lenguajes monomórficos

Las variables sólo pueden tener un tipo y las funciones sóloadmitían parámetros con un único tipo (ej. Pascal estándar)

Tipos de polimorfismo

El polimorfismo involucra distintos aspectos, defuncionamiento similar, pero que se basan en conceptoscompletamente distintos

Para intentar poner un poco de orden entre todas lasdefiniciones que implicaban polimorfismo Cardelli y Wegner(1985) realizaron una clasificación de las mismas

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Polimorfismo

Tipos de polimorfismo

Polimorfismo universal o verdadero

Consiste en que pueden existir valores que puedenpertenecer a varios tipos, y se utiliza el mismocódigo para tratar los diferentes tipos

Tenemos dos variantes del polimorfismo universal, elpolimorfismo paramétrico y el de inclusión

Polimorfismo ad hoc o aparente

Se utiliza distinto código para tratar diferentes tipos

De esta forma una función polimórfica seríaimplementada a través de un conjunto de funcionesmonomórficas

Dentro del polimorfismo ad hoc podemos distinguirla sobrecarga y la coercción

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Polimorfismo

Polimorfismo de inclusión

Características

Es propio de los lenguajes orientados a objetos.

Es aquel que se consigue a través de la herencia. Por eso sellama también polimorfismo de subclases, o de herencia, osimplemente polimorfismo

Indica que un objeto de una subclase puede utilizarse enaquellos lugares en los que se requiere un objeto de sussuperclases

Recordemos que un objeto de la subclase incluye internamenteun objeto de la superclase

Animal

listaAnimales[]

=

new

Animal[10];

listaAnimales

[0]

=

new

Perro();

listaAnimales

[1]

=

new

Gato();

listaAnimales

[2]

=

new

Animal();

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Polimorfismo

Polimorfismo de inclusión

Colecciones y polimorfismo de inclusión

import

java.util.*;

public

class

ListaSinGenericidad

{

public

static

void

main

(String

[]

args)

{

List

listaGatos

=

new

ArrayList

();

listaGatos.

add

(

new

Gato

());

listaGatos.

add

(

new

Coche

());

Gato

gato

=

(Gato)listaGatos.

get

(0);

Gato

gato

=

(Gato)listaGatos.

get

(1);

}

}

El type-cast es necesario para evitar

un error en tiempo de compilación

Error ClassCastException, estamos

intentando convertir un Coche en

un Gato

No existe

seguridad de tipos

en las

colecciones que utilizan el

polimorfismo de inclusión

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Polimorfismo

Polimorfismo paramétrico

Características

Se conoce habitualmente como “genericidad”

Consiste en que una misma función es aplicadasobre una variedad de tipos distintos

Se denomina paramétrico porque las funcionesnecesitan un parámetro para saber qué tipo debe deser utilizado

En Java pueden definirse métodos y clasesparametrizadas (sólo a partir de la versión 1.5)

La principal ventaja de la genericidad consiste en laposibilidad de definir colecciones de objetos concomprobación de tipos en tiempo de compilación

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Polimorfismo

Polimorfismo paramétrico

Colecciones y polimorfismo paramétrico

Seguridad:

Realizan comprobaciones de tipo en tiempo de compilación(en una lista de gatos sólo puede haber gatos)

Se evitan los fallos en tiempo de ejecución

Claridad:

No necesitamos “typecasts” para sacar objetos de lacolección

Comprensibilidad

Las colecciones se declaran con un tipo, por lo que hacemás claro su uso

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Polimorfismo

Polimorfismo paramétrico

Creación de clases con polimorfismo paramétrico

Los tipos genéricos deben ser objetos (no tipos básicos)

class

CajaGenerica

{

private

T valor;

public

T

getValor

()

{

return

valor; }

public void setValor

(T valor)

{

this

.valor = valor; }

public static void main

(String [] args)

{

CajaGenerica cajaGato=

new

CajaGenerica

();

CajaGenerica cajaInteger=

new

CajaGenerica

();

cajaGato.

setValor

(

new

Gato

());

System.out.

println

("everything is ok");

//cajaInteger.setValor(new Gato()); // Error de compilación

}

}

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Polimorfismo

Sobrecarga

¿Es el siguiente código válido?

De otra forma: ¿El tipo de retorno se tiene en cuenta a la hora deresolver la sobrecarga?

Respuesta:

El código NO es válido

La sobrecarga paramétrica se basa en que los métodos sobrecargadosdeben tener distinta firma (siendo la firma de un método el nombre dela función y en el tipo y número de parámetros, nunca el tipo deretorno).

Por ejemplo: si llamamos a los métodos por sus efectos laterales (sinrecoger el tipo de retorno) no sabremos a qué método llamar.

int metodoX

();

{ …

}

float

metodoX();

{ …

}

int i

=

metodoX();

float

f

=

metodoX();

metodoX();metodoX();

© Eduardo Mosqueira Rey

Departamento de Computación

Universidade da Coruña

Polimorfismo

Sobreescritura

Sobreescritura

Aparece cuando una subclase define un método con el mismonombre, tipo de retorno y parámetros que una superclase

Sobreescritura de reemplazo

El método de la subclase reemplaza por completo el método dela superclase

Sobreescritura de refinamiento

El método de la subclase es una forma refinada del método dela superclase (se utiliza el código de la superclase pero seañaden algunas características propias)

Para acceder a la versión del método de la superclase se utilizael puntero super (que apunta a la superclase) seguido delnombre del método. Por ejemplo, super.metodoX()

Al contrario de la llamada super de los constructores, la llamadasuper en los métodos sobreescritos no tiene porque apareceren primer lugar