Paradigma Orientado a Objetos

72
Paradigma Orientado a Objetos

Transcript of Paradigma Orientado a Objetos

Page 1: Paradigma Orientado a Objetos

Paradigma Orientado a Objetos

Page 2: Paradigma Orientado a Objetos

Paradigma

Page 3: Paradigma Orientado a Objetos

Paradigma

Un paradigma es un determinado marco desde el cual miramos el mundo, lo comprendemos, lo interpretamos e intervenimos sobre él. Abarca desde el conjunto de conocimientos científicos que imperan en una época determinada hasta las formas de pensar y de sentir de la gente en un determinado lugar y momento histórico.

Page 4: Paradigma Orientado a Objetos

Paradigma

Adam Smith define paradigma, en su libro “Los poderes de la mente”, como “un conjunto compartido de suposiciones. Es la manera como percibimos el mundo: agua para el pez. El paradigma nos explica el mundo y nos ayuda a predecir su comportamiento”.

Page 5: Paradigma Orientado a Objetos

Paradigma

En nuestro contexto, el paradigma debe ser concebido como una forma aceptada de resolver un problema en la ciencia, que más tarde es utilizada como modelo para la investigación y la formación de una teoría. También, el paradigma debe ser concebido como un conjunto de métodos, reglas y generalizaciones utilizadas conjuntamente por aquellos entrenados para realizar el trabajo científico de investigación.

Page 6: Paradigma Orientado a Objetos

Paradigmas

Page 7: Paradigma Orientado a Objetos

Paradigmas de programación

Los paradigmas de programación nos indican las diversas formas que, a lo largo de la evolución de los lenguajes, han sido aceptadas como estilos para programar y para resolver los problemas por medio de una computadora.

Page 8: Paradigma Orientado a Objetos

Paradigmas de programación

ImperativoFuncionalLógicoOrientado a Objetos

Page 9: Paradigma Orientado a Objetos

Paradigma POO

La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos.

Page 10: Paradigma Orientado a Objetos

Lenguajes de programación OO

Simula 67: Johan Dahl y Kristen NygaardSmalltalk: Alan KayC++: Bjarne StroustrupEiffel: Bertrand MeyerJava: James GoslingC#: Anders HejlsbergRuby: Yukihiro Matsumoto

Page 11: Paradigma Orientado a Objetos

Personajes

Page 12: Paradigma Orientado a Objetos

Características de la POO

Page 13: Paradigma Orientado a Objetos

Características de la POO

Abstraction Encapsulation Information Hiding Modularity Functional Independence: Coupling and

Cohesion Polymorphism Inheritance

Single inheritance Multiple inheritance

Page 14: Paradigma Orientado a Objetos

Abstracción

Es aislar un elemento de su contexto o del resto de los elementos que lo acompañan.

Expresa las características esenciales de un objeto, las cuales distinguen al objeto de los demás.

Provee límites conceptuales.Quitar las propiedades y acciones de un

objeto para dejar solo aquellas que sean necesarias.

Page 15: Paradigma Orientado a Objetos

Encapsulación

Es reunir todos los elementos que puedan considerarse pertenecientes a una misma entidad al mismo nivel de abstracción.

Aumenta la cohesión de los componentes de un sistema.

Page 16: Paradigma Orientado a Objetos

Ocultamiento de la información

Cada objeto está aislado y establece una interfaz que especifica cómo pueden interactuar con éste, protegiendo sus propiedades de la modificación por quien no tenga derecho a acceder a ellos.

Page 17: Paradigma Orientado a Objetos

Modularidad

Permite subdividir un sistema en partes más pequeñas llamadas módulos, cada una tan independiente como sea posible.

Page 18: Paradigma Orientado a Objetos

Independencia funcional

Evalúa dos criterios cualitativos: Cohesión: Medida que indica qué tan especializado es

un módulo u objeto, lo que hace que tenga poca interacción con las otras partes del sistema. Algo cohesivo deberá idealmente hacer una sola cosa.

Acoplamiento: Medida de interconexión entre módulos dentro de una estructura de software. Esta medida depende de la complejidad de interconexión entre los módulos. Grado de interdependencia entre módulos de un programa.

Page 19: Paradigma Orientado a Objetos

Independencia funcional

Alta cohesión Bajo acoplamiento

Page 20: Paradigma Orientado a Objetos

Polimorfismo

Comportamientos diferentes asociados a objetos distintos pueden compartir el mismo nombre.

Page 21: Paradigma Orientado a Objetos

Herencia

Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenece.

Hay dos tipos de herencia: Herencia simple Herencia múltiple

Page 22: Paradigma Orientado a Objetos

DDD: Deadly Diamond of Death

Page 23: Paradigma Orientado a Objetos
Page 24: Paradigma Orientado a Objetos

Ventajas de la POO

Reusability (reutilizabilidad): Cuando hemos diseñado adecuadamente las clases, se pueden usar en distintas partes del programa y en numerosos proyectos.

Maintainability (sostenibilidad): Debido a las sencillez para abstraer el problema, los programas orientados a objetos son más sencillos de leer y comprender, pues nos permiten ocultar detalles de implementación dejando visibles sólo aquellos detalles más relevantes.

Modifiability (modificabilidad) La facilidad de añadir, suprimir o modificar nuevos objetos nos permite hacer modificaciones de una forma muy sencilla.

Reliability (fiabilidad): Al dividir el problema en partes más pequeñas podemos probarlas de manera independiente y aislar mucho más fácilmente los posibles errores que puedan surgir.

Page 25: Paradigma Orientado a Objetos

Conceptos básicos

Object Class

Concrete Abstract

Interface Attribute Operation Responsibility Message Package

Page 26: Paradigma Orientado a Objetos

Objeto

Entidad prevista de un conjunto de propiedades (datos) y de comportamiento (funcionalidad).

Instancia de una clase.

Page 27: Paradigma Orientado a Objetos

Clase

Descripción de un conjunto de objetos que comparten los mismos atributos, operaciones, relaciones y semántica.

Page 28: Paradigma Orientado a Objetos

Clase y objetos

Page 29: Paradigma Orientado a Objetos

Clase y objetos

Clase: Persona

Objetos

Page 30: Paradigma Orientado a Objetos

Clase y objetos

Clase: Galleta

Objetos

?

Page 31: Paradigma Orientado a Objetos

Clase abstracta

Es una clase que tiene incompleto su comportamiento.

No implementa todas sus operaciones: al menos una de ellas no contiene código (operación abstracta).

No se puede instanciar.Está obligada a heredar.

Page 32: Paradigma Orientado a Objetos

Interface

Es una colección de operaciones que se usa para especificar un servicio de una clase o de un componente.

Solo declara comportamiento, no lo implementa. Todas las operaciones son abstractas (sin

código). Obliga a otras clases derivadas a la

implementación de todas sus operaciones. Obliga a la herencia siempre y cuando sea con

interfaces derivadas. No se puede instanciar.

Page 33: Paradigma Orientado a Objetos

Componentes de las clases

Classes are composed from structural and behavioral constituents.

ESTRUCTURA

COMPORTAMIENTO

Page 34: Paradigma Orientado a Objetos

Componentes de las clases

Classes are composed from structural and behavioral constituents.

ESTRUCTURA

COMPORTAMIENTO

ATRIBUTOS

OPERACIONES

Page 35: Paradigma Orientado a Objetos

Atributo

Es una propiedad de una clase que describe un rango de valores que pueden tomar las instancias de la propiedad.

Atributo derivado: son aquellos que se pueden calcular a partir de otros atributos.

Page 36: Paradigma Orientado a Objetos

Operación

Es la implementación de un servicio que puede ser requerido a cualquier objeto de la clase para que muestre un comportamiento.

Es la abstracción de algo que se puede hacer a un objeto.

Page 37: Paradigma Orientado a Objetos

Reglas de Visibilidad

Page 38: Paradigma Orientado a Objetos

Matriz de Visibilidad

Page 39: Paradigma Orientado a Objetos

Alcance de atributos y operaciones

Es una característica específica si cada instancia del clasificador tiene su propio valor de la característica, o si sólo hay un valor de la característica para todas las instancias del clasificador. Hay dos tipos de alcances: Instance Static

Page 40: Paradigma Orientado a Objetos

Alcance de instancia

Cada instancia del clasificador tiene su propio valor para la característica. Éste es el valor por defecto y no requiere una notación adicional de UML.

Page 41: Paradigma Orientado a Objetos

Alcance estático

Sólo hay un valor de la característica para todas las instancias del clasificador. También se llama alcance de clase. Esto se denota con UML subrayando el nombre de la característica.

Page 42: Paradigma Orientado a Objetos

Responsabilidad

Es un contrato o una obligación de una clase. Al crear una clase, hay una promesa de que

todos los objetos de esa clase tendrán el mismo tipo de estado y el mismo comportamiento.

Los atributos y operaciones de una clase son simplemente las características por medio de las cuales se llevan a cabo las responsabilidades de dicha clase.

Gráficamente, las responsabilidades se pueden expresar como texto libre en un compartimento separado al final del icono de la clase.

Page 43: Paradigma Orientado a Objetos

Interacciones: Mensajes

En cualquier sistema, los objetos interactúan entre sí pasándose mensajes.

Una interacción es un comportamiento que incluye un conjunto de mensajes que se intercambian un conjunto de objetos.

Un mensaje es la especificación de una comunicación entre objetos que transmite información, con la expectativa de que se desencadenará una actividad.

Page 44: Paradigma Orientado a Objetos

Paquete

Es un mecanismo de propósito general para organizar elementos de modelado en grupos.

Is a container for the definitions of UML elements such as classes, use cases and components. A package can also contain other packages.

Packages are useful for separating work into different areas.

Each package defines a namespace so that names that are defined in different packages do not conflict with each other.

Page 45: Paradigma Orientado a Objetos

Paquete

The qualified name property of each element is the qualified name of the package to which it belongs, followed by the element's own name.

For example, if your package is called mypackage, a class within the package will have a qualified name like mypackage::MyClass.

Packages are containers. If you move or delete a package, the classes, packages, and other things defined inside it are also moved or deleted.

Page 46: Paradigma Orientado a Objetos

Namespace

Un espacio de nombres es un conjunto de nombres en el cual todos los nombres son únicos.

Es un contenedor abstracto en el que un grupo de uno o más identificadores únicos pueden existir.

Page 47: Paradigma Orientado a Objetos

Modelado en UML

Page 48: Paradigma Orientado a Objetos

Objeto

objeto : Clase

: Alumno

Page 49: Paradigma Orientado a Objetos

Clase

Clase

+atributo1#atributo2-atributo3~atributo4

+operacion1()-operacion2()#operacion3()~operacion4()

Clase

+atributo1#atributo2-atributo3~atributo4

+operacion1()-operacion2()#operacion3()~operacion4()

paquete1::Clase

+atributo1#atributo2-atributo3~atributo4

+operacion1()-operacion2()#operacion3()~operacion4()

Page 50: Paradigma Orientado a Objetos

Clase

Profesor

+noTrabajador+nombre+apellidoPaterno+apellidoMaterno+fechaNacimiento+nacionalidad+/edad+/rfc

Page 51: Paradigma Orientado a Objetos

Clase

ClaseA

+atributo1: String#atributo2: Integer-atributo3: Boolean~atributo4: ClaseB

+operacion1(p1)-operacion2(p1, p2)#operacion3(p1: String)~operacion4(): Integer

Alumno

+nombre: String+apellidoPaterno: String+apellidoMaterno: String+carrera: Integer = 308

+estudiar()+presentarExamen()

Alumno

+nombre: String+apellidoPaterno: String+apellidoMaterno: String+carrera: int = 308

+estudiar()+presentarExamen()

Page 52: Paradigma Orientado a Objetos

Clase

Clase

+atributo1#atributo2-atributo3~atributo4

+operacion1()-operacion2()#operacion3()~operacion4()

Clase

+atributo1#atributo2-atributo3~atributo4

+operacion1()-operacion2()#operacion3()~operacion4()

Clase

+atributo1#atributo2-atributo3~atributo4

+operacion1()-operacion2()#operacion3()~operacion4()

Page 53: Paradigma Orientado a Objetos

Clase y objeto

Alumno

+nombre+apellidoPaterno+apellidoMaterno

+estudiar()+presentarExamen()

alumno1 : Alumno

nombre = IsmaelapellidoPaterno = PereaapellidoMaterno = Camarillo

Page 54: Paradigma Orientado a Objetos

Clase abstracta

TarjetaBancaria

TarjetaCrédito TarjetaDébito

Figura

+calcularArea()+mover()

Cuadrado

+calcularArea()

Círculo

+calcularArea()

Page 55: Paradigma Orientado a Objetos

Interface

Actor<<interface>>

+actuar()

Persona

+actuar()

Perro

+actuar()

Animal

Page 56: Paradigma Orientado a Objetos

Alcance

Persona

+nombre: String+especie: String

+main(args[]: String)+Persona()

Persona

+nombre: String+ESPECIE: String

+main(args[]: String)+Persona()

Persona

+nombre: String+ESPECIE: String

+main(args[]: String)+Persona()

Page 57: Paradigma Orientado a Objetos

Responsabilidades

AgenteDeFraudes

Responsabilidades

- Determinar el riesgodel pedido de un cliente.

- Gestionar los criteriosde fraude específicospara cada cliente.

Page 58: Paradigma Orientado a Objetos

Paquete

paquete1

paqueteA

paqueteA::paquete1

Page 59: Paradigma Orientado a Objetos

Codificación del modelo UML

Page 60: Paradigma Orientado a Objetos
Page 61: Paradigma Orientado a Objetos
Page 62: Paradigma Orientado a Objetos

Ejercicio:

Modelar y programar las siguientes clases, paquetes y objetos.

Page 63: Paradigma Orientado a Objetos

¿Qué objetos le corresponden?

Page 64: Paradigma Orientado a Objetos
Page 65: Paradigma Orientado a Objetos
Page 66: Paradigma Orientado a Objetos
Page 67: Paradigma Orientado a Objetos

ClaseUno ClaseDos ClaseTres

ClasePadre

ClaseHijoUno ClaseHijoDos

ClaseHijoTres

paqueteuno paquetedos paquetetres

ClaseCuatro ClaseCinco

RockStar PopStar

música

BoyBand

Page 68: Paradigma Orientado a Objetos

paqueteuno

ClaseUno

ClaseDos

Page 69: Paradigma Orientado a Objetos

paquetetres

paquetedos

ClaseTres

ClasePadre

ClaseHijoUno

ClaseHijoDos

ClaseHijoTres

Page 70: Paradigma Orientado a Objetos

música

RockStar

PopStar

BoyBand

Page 71: Paradigma Orientado a Objetos

ClaseCuatro ClaseCinco

Page 72: Paradigma Orientado a Objetos

paqueteuno::ClaseUno paqueteuno::ClaseDos paquetedos::ClaseTres

paquetedos::ClasePadre

paquetetres::ClaseHijoUno

paquetetres::ClaseHijoDos

ClaseHijoTres

paqueteuno paquetedos paquetetres

ClaseCuatro ClaseCinco

música::RockStar música::PopStar

música

música::BoyBand