visual cscharp

Page 1

Programaci贸n con C# .NET

Tema 4: Introducci贸n a la POO


Contenidos Introducción Programación Procedural vs Programación Orientada a Objetos ¿Qué es un objeto? ¿Qué es una clase? Modelado de clases con UML Encapsulación Herencia Polimorfismo Referencias entre clases Reutilización de clases Resumen


Introducción ¿Por ¿Porqué quéla laProgramación ProgramaciónOrientación OrientaciónaaObjetos Objetos(POO)? (POO)? • La forma de percibir y pensar sobre los problemas se acerca a los mecanismos cognitivos humanos y es muy parecida a la forma en que se abordan en otros dominios • Existe la esperanza de que esta técnica sea la clave para incrementar la productividad y mejorar la fiabilidad de los sistemas software ( solución a la crisis del software ) • Existe la esperanza de que la transición de los lenguajes existentes a los orientados a objetos sea fácil


Introducción Un Unpoco pocode dehistoria historia… … • La POO apareció por primera vez en 1960 • SIMULA I (1962-65), SIMULA 67 (1967) • ADA, PROLOG (1980) • Se ha hecho muy popular en los últimos 10 años • En ocasiones, la tecnología avanza lentamente • Sistemas legados que funcionan bien (o no) • Intereses comerciales • Necesidades reales

Java y C# han ayudado mucho


Introducción Evolución Evoluciónde delos loslenguajes lenguajesde deprogramación programación • Lenguajes máquina 9 Lenguaje nativo de la máquina: muy eficiente x Codificación de programas compleja x Gran cantidad de errores en la codificación x Depuración muy compleja x Productividad mínima • Lenguajes de bajo nivel (ensambladores) 9 Etiquetas inteligibles (nemónicos) por el ser humano x Estrechamente ligados a la arquitectura de la máquina x Depuración compleja x Productividad muy baja ? Necesidad de un traductor (ensamblador): menos eficiente


Introducción Evolución Evoluciónde delos loslenguajes lenguajesde deprogramación programación • Lenguajes de alto nivel (BASIC, etc) 9 Una instrucción equivale a varias instrucciones en ensamblador 9 Lenguaje más afín al programador 9 Depuración más sencilla 9 Productividad aceptable 9 PORTABILIDAD ? Necesidad de un traductor: intérprete o compilador x Saltos en el código (GOTO) dificultan la legibilidad y depuración x Las estructuras de datos tienen visibilidad global x En proyectos complejos el mantenimiento es complejo


Introducción Evolución Evoluciónde delos loslenguajes lenguajesde deprogramación programación • Lenguajes estructurados (C, PASCAL, etc) 9 Lenguajes procedurales: funciones como cajas negras 9 Estructuras de datos locales/globales 9 Prohibidos los saltos entre instrucciones (bucles, funciones) 9 Productividad aceptable 9 Diseño modular: mantenimiento más sencillo x Estructuras de datos y procedimientos que las tratan se diseñan por separado x “Gap” semántico entre el espacio del problema y el espacio de la solución


Introducción Evolución Evoluciónde delos loslenguajes lenguajesde deprogramación programación • Lenguajes Orientados a Objetos (Java, C++, etc) 9 Extensión de los lenguajes estructurados 9 Estructuras de datos y funciones son una unidad: objeto 9 Se adapta mejor a la estructura del mundo real 9 Diseño orientado a componentes 9 REUTILIZACIÓN


Programación Procedural vs POO Programación ProgramaciónProcedural Procedural • Unidad básica: el procedimiento entradas

salidas

• Programa con procedimientos función

función dato dato dato dato

función

función


Programación Procedural vs POO Programación ProgramaciónOrientada OrientadaaaObjetos Objetos ¿TAD?

• Unidad básica: el objeto función función

dato dato dato

función

• Programa con objetos función función

dato dato dato

función función función función

función dato dato dato

función función

dato dato dato


Programación Procedural vs POO Ejemplo. Ejemplo.Programación ProgramaciónProcedural Procedural #include “t_list.h” #define MAX_ITEM 100

t_list.h

typedef struct { int list[MAX_ITEM]; int size; } t_list; t_list *create(); void destroy(t_list *lst); int addItem(t_list *lst, int item); void removeItem(t_list *lst, int item); int *getLast(t_list *lst); int *getFirst(t_list *lst); int getSize(t_list *lst);

t_list.c

t_list *create() { ……………… } void destroy(t_list *lst) { ………… } int addItem(t_list *lst, int item) { ………… } …………

#include “t_list.h” void main() { t_list *list = create(); addItem(list, 0); …………… destroy(list); }

main.c


Programación Procedural vs POO Ejemplo. Ejemplo.Programación ProgramaciónOrientada OrientadaaaObjetos Objetos List.cs public class List {

Datos

Main.cs public class Main {

private int[] list; private int size; List() {……} int addItem(int item) {………} int removeItem(int item) {……} int getFirst() {……} int getLast() {……} int getSize() {………}

Funciones

}

public static void Main( …… ) { List list = new List(); list.addItem(0); …………… } }


Programación Procedural vs POO Principios Principiosdel delParadigma ParadigmaOrientado OrientadoaaObjetos Objetos • Todo son objetos • Un programa es una colección de objetos. • Los objetos interactúan realizando peticiones de servicios a otros objetos mediante mensajes. • El cómputo avanza mediante la interacción de los objetos • Todo objeto es un ejemplar de un clase. Una clase agrupa objetos “similares”.


¿Qué es un objeto? • En el mundo real, todo son objetos: un perro, una casa, un coche, etc. • Un objeto del mundo real tiene dos características: • Estado (nombre, color, tamaño, etc) • Comportamiento (ladrar, correr, dormir, etc)


¿Qué es un objeto?

En el modelo Orientado a Objetos todo objeto tiene:

Identidad: Los objetos pueden distinguirse unos de otros. Comportamiento: Los objetos pueden realizar ciertas tareas. El comportamiento se modela por medio de métodos. Estado: Los objetos almacenan información. El estado se modela por medio de atributos. método atributo

método atributo atributo método


Los objetos ocultan detalles de implementación...

Cta_banco : extraer depositar :

Array : agregar buscar :

El cliente “ve” sólo la interfaz

Coche : repostar alquilar :


¿Qué es un objeto? Comunicación Comunicaciónentre entreobjetos objetos • Una aplicación en ejecución es una comunidad de objetos que se comunican entre sí. • Los objetos interaccionan con otros objetos enviando mensajes

mensaje

• Mensaje = destinatario + acción + argumentos

cambiarColor(rojo)

• El algoritmo o conjunto de operaciones que ejecuta un objeto como respuesta a un mensaje se llama método


¿Qué es un objeto? Mensaje Mensaje versus versus Llamada LlamadaaaProcedimiento Procedimiento Los mensajes se diferencian de las llamadas a procedimiento en varios aspectos: • El mensaje posee un receptor designado; el receptor es algún objeto al cual se envía un mensaje • La interpretación del mensaje (el método usado para responder al mensaje) depende del receptor y puede variar con diferentes receptores (concepto de polimorfismo) • El modelo de paso de mensajes incluye tato comunicación síncrona como asíncrona • El receptor no tiene por qué estar en el mismo proceso o incluso la misma máquina del emisor


¿Qué es una clase?

Todos los objetos de un mismo tipo comparten la misma clase

Todo objeto es instancia de alguna clase

La clase describe las características de los objetos de la misma clase

La clase constituye la plantilla de un mismo tipo de objetos

Qué atributos tienen Qué métodos tienen

Constituye la base para poder crear un objeto Cuando se crea un objeto de una clase se dice que se instancia un objeto de dicha clase

La clase es un concepto estático (en tiempo de diseño) mientras que el objeto es un concepto dinámico (en tiempo de ejecución)


Ejemplo de instanciaci贸n: Persona Jos茅 Perez c/ Reus 35, 27

CLASE: PERSONA ------------------------Nombre, Direccion, Edad ------------------------ObtenerEdad

ObtenerEdad()

...

Persona Juan D铆az c/ Col贸n 7, 35

...

ObtenerEdad()


¿Qué es una clase? OBJETO

CLASE List.cs public class List {

Main.cs public class Main {

private int[] list; private int size;

public static void Main( …… ) { List list = new List();

List() {……} int addItem(int item) {………} int removeItem(int item) {……} int getFirst() {……} int getLast() {……} int getSize() {………} }

list.addItem(0); …………… } }

INSTANCIACIÓN


Encapsulación Ocultación Ocultación de de la la información información • Capacidad de ocultar ciertos atributos o comportamientos y mostrar otros • Los objetos de un sistema de información vistos como clientes de los servicios que les proveen ciertos objetos, sólo necesitan conocer el conjunto de mensajes que dichos objetos aceptan (la interfaz). • El cliente que envía la petición no necesita conocer cómo se atiende dicha petición (las acciones que se llevan a cabo)


Encapsulación interfaz

CLIENTE

método atributo

método atributo atributo método

• En Programación Orientada a Objetos se considera buena práctica: • Ocultar todos los atributos • Publicar métodos de acceso a los atributos (get/set) • Publicar únicamente los métodos necesarios


Encapsulación Control Control de de la la Visibilidad Visibilidad de de Acceso Acceso

¿Cómo controlar la visibilidad de atributos y métodos?

Los lenguages de programación suelen proporcionar ciertas palabras clave: public: acceso público sin restricciones private: acceso restringido únicamente desde el interior del objeto protected: acceso restringido desde el interior del objeto o cualquiera de las subclases en una jerarquía de herencia


Encapsulación Control Control de de la la Visibilidad Visibilidad de de Acceso Acceso public class Mesa { private int x = 0; private int y = 0; protected int width = 100; protected int height = 100; private int color = 100; public int Height { get{...} set{..}} public int Width() {get{...} set{..}} public int Color() {get{...} set{..}} public void move(int x, int y) { ………. } }


Encapsulación Ejemplo Ejemplo

Un banco dispone de un conjunto de cuentas bancarias. Cada cuenta bancaria tiene un titular, que indica quién es el propietario de la misma, y un saldo que indica el importe disponible en pesetas. Sobre cada cuenta bancaria se pueden realizar dos operaciones básicas: ingresar o sacar de la cuenta una cierta cantidad de dinero (abonos y cargos). • Siguiendo el paradigma OO: -- Objetos: -- Clases: - Un objeto que representa al banco - Banco - Un objeto por cada cuenta bancaria - Cuenta Bancaria que exista


Encapsulación Combinando Datos y Métodos

Un objeto encapsula los atributos (estructura) y los métodos (comportamiento). Esta encapsulación hace que el objeto tenga unos límites claramente definidos (sólo es visible su INTERFAZ, el interior del objeto no lo es). Abono( ) saldo Cargo ( ) CuentaBancaria

Abono( ) saldo Cargo( ) CuentaBancaria


Encapsulación Control de la visibilidad

Los métodos son públicos por lo general. Constituyen la interfaz del objeto y son accesibles a otros objetos que pueden invocarlos.

Los datos son privados por lo general. Sólo son accesibles desde el interior del propio objeto. Abono( )

Abono( ) saldo Cargo( ) CuentaBancaria

8

saldo Cargo( ) Objeto CuentaBancaria


Encapsulación Objeto CuentaBancaria

¿¿ Por Por qué qué la la Encapsulación? Encapsulación?

Abono ( )

Proporciona CONTROL

Cargo ( )

La utilización del objeto es solamente a través de sus métodos públicos

8

saldo 200.000 Objeto CuentaBancaria

Permite CAMBIOS

La utilización del objeto no se ve afectada si se producen cambios en el tipo de datos de la parte privada.

Abono ( ) Cargo ( ) euros 1202 centimos

16


Herencia ¿Qué ¿Qué es? es? • Poderoso mecanismo de reutilización de código (mucho más potente que los procedimientos) por el cual una clase puede heredar los atributos y métodos de otra clase. Mecanismo por el que es posible definir clases a partir de otras clases • Conceptualmente, se dice que el conocimiento de una clase más general es aplicable también a la clase más específica. Se habla por tanto también de generalización/especialización • La técnica reside en factorizar los aspectos comunes en una clase base y heredar de dicha clase


Herencia Jerarquías Jerarquías de de Herencia Herencia • Las clases se pueden organizar en una estructura de árbol, llamada jerarquía de herencia • La información (datos y comportamiento) asociados con un nivel de una jerarquía de clases es aplicable automáticamente a los niveles inferiores de la jerarquía • La clase base se denomina superclase o clase padre • La clase que hereda se denomina subclase, clase hija UML

Superclase

Subclase


Herencia Ejemplo Ejemplo La comunidad universitaria de la UPV puede organizarse en dos grandes bloques: personal de la UPV y alumnado de la UPV. El personal puede dividirse en Profesores (Personal Docente e Investigador PDI) o Personal de Administraciรณn y Servicios (PAS). El PDI puede ser Profesor Asociado, Profesor Colaborador, Titular de Escuela Universitaria (TEU), Titular de Universidad (TU), Catedrรกtico de Escuela Universitaria (CEU) o Catedrรกtico de Universidad (CU) El alumnado puede ser alumnado universitario o alumnado de doctorado.


Herencia Ejemplo Ejemplo Miembro UPV

Alumno UPV Alumno universitario

Personal UPV

Doctorando

Asociado

Colaborador

PDI

TEU

PAS

TU

CEU

CU


Herencia Ejemplo Ejemplo

public class MiembroUPV { private String nif; private String nombre; private String apellidos;

}

public String getNif() { ….. } public void setNif(String nif) { …. } ……………..

public class AlumnoUPV : MiembroUPV { private String expediente; …………….. }

public class UniversitarioUPV : AlumnoUPV {

}

private String titulación; ……………..

public class DoctorandoUPV : AlumnoUPV {

}

public class PDI : PersonalUPV {

private String programa; ……………..

public class Asociado : PDI {

}

public class PersonalUPV : MiembroUPV { private int nómina; …………….. }

public class Colaborador : PDI { …………….. private String empresa; } ……………..

}

public class PAS : PersonalUPV {

private String[] asignaturas; ……………..

public class TEU : PDI { …………….. }

public class TU : PDI { …………….. }

}

private String[] tareas; ……………..

public class CEU : PDI { …………….. }

public class CU : PDI { …………….. }


Polimorfismo ¿Qué ¿Qué es? es? • Polimorfismo: muchas formas. • Fuertemente ligado con el concepto de herencia. • Todo objeto que pertenece a una subclase pertenece también a la superclase (ej: un profesor de la UPV es también personal de la UPV y miembro de la UPV) • Una subclase puede sobreescribir el comportamiento de alguna clase padre en su jerarquía de herencia • Para un mismo mensaje cada clase se comporta de una manera diferente (la implementación del método es diferente)


Polimorfismo Ejemplo Ejemplo

Circulo circ = new Circulo(); circ.setRadio(100); circ.getArea(); circ.dibujar();

Forma # area : double = 0

Rectangulo rect = new Rectangulo(); rect.setLongitud(100); rect.setAnchura(50); rect.getArea(); dibujar();

+ getArea() : double + dibujar()

Circulo - radio : double = 0 + + + +

getArea() : double getRadio() : double setRadio(in radio : double) dibujar()

Rectangulo - longitud : double = 0 - anchura : double = 0 + + + + + +

getArea() : double getLongitud() : double setLongitud(in longitud : double) getAnchura() : double setAnchura(in anchura : double) dibujar()

Forma forma = new Circulo(); forma.getArea(); forma.dibujar(); forma = new Rectangulo(); forma.getArea(); forma.dibujar();


Reutilización de clases El énfasis de la OO en la construcción de componentes independientes permite un proceso de desarrollo incremental, en el cual unidades de software individuales (clases) se diseñan, programan y prueban antes de combinarse en un sistema grande

Al reducir la interdependencia entre los componentes software, la orientación a objetos permite el desarrollo de sistemas de software reutilizable


Reutilización de clases Ventajas de la Reutilización • Un componente que se reutiliza no tiene que ser reescrito • El coste incremental de reutilizar un componente es menor que el coste de volver a desarrollarlo • Un conjunto estándar de componentes es más fácil de mantener • Un componente reutilizado habrá sido probado y utilizado minuciosamente, y seguramente estará libre de errores o tendrá muchos menos que uno desarrollado por nosotros


Reutilización de clases Mecanismos para Reutilizar Existen dos mecanismos esenciales para la reutilización: • Composición - La relación tiene-un o parte-de

• Herencia - La relación es-un


Reutilización de clases Composición Usando la relación tiene-un, un componente es simplemente parte del estado de otro componente o de otra manera, un componente está compuesto-de. • Un coche tiene-un motor • Una casa tiene-una puerta • Una receta tiene-una lista de ingredientes

Herencia En la herencia un componente es-una variación de otro, y hereda todas las características del primero sin necesidad de volver a codificarlo. Objeto Material

Animal

Planta

Mamífero

Perro

Flor

Humano

Comerciante

Relámpago

Artista

Florista

Ceramista

Flora

Sandra

Ornitorrinco

Dentista

Antonio

Pepe

flores de la abuela


Resumen Ademรกs de un acercamiento al lenguaje natural, la POO aporta dos grandes ventajas en el รกmbito de la programaciรณn: - Facilita la reutilizaciรณn de cรณdigo - Mejora la modularidad y el control de errores, lo que se nota, sobre todo, en aplicaciones grandes.


Resumen La POO se basa en tres conceptos: • Encapsulamiento. Unir bajo una misma entidad lógica datos y código que lo manipula, aislándolos del resto. En POO esto se consigue con las clases. • Polimorfismo. La POO aporta la posibilidad de polimorfismo cuando un método produce efectos diferentes en función de la clase a la que se aplique. Es importante no confundir el polimorfismo con la sobrecarga de funciones o la sobrecarga de operadores.


Resumen • Herencia. La herencia aprovecha las clases ya definidas para definir otras más específicas, que heredan los miembros de las clases más generales. A la clase más general se la denomina clase base o superclase, y a la más específica clase hija o subclase. La jerarquía resultante de relaciones de herencia suele tener forma de árbol, si bien no siempre es así


Bibliografía

C#. Curso de Programación. Autor:

Fco. Javier Ceballos Sierra. Editorial:

RA-MA en España. Alfaomega Grupo Editor en América.

Enciclopedia de Microsoft Visual C#. Autor:

Fco. Javier Ceballos Sierra. Editorial:

RA-MA en España. Alfaomega Grupo Editor en América.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.