Tema 1. Introducción al Paradigma Orientado a Objetos

Slides:



Advertisements
Presentaciones similares
Introducción a la Ingeniería del Software 1 El Diseño de Software Caracteristicas: Proceso Creativo Requiere de experiencia e ingenio Necesita del aprendizaje.
Advertisements

PROGRAMACIÓN I CENTRO DE ESTUDIOS INTEGRADOS EL MARISCAL - CEIM Ing. Luisa Fernanda Arenas Castañeda Feb 6 de 2016.
Modelado de sistemas software: Introducción. Modelado de... Sistemas... Sistemas web Sistemas de control/tiempo real Familias de sistemas Variabilidad.
Antecedentes históricos y problemática Introducción al Diseño Orientado a Objetos.
Introducción a la Orientación a Objetos Principios de la Tecnología de Objetos.
Conferencia 3: Paradigmas de la Orientación a Objetos Tema 1:Principios de la Tecnología de Objetos.
Fundamentos de Programación de Computadores Módulo de Análisis y Diseño de Algoritmos.
1 LENGUAJES DE PROGRAMACIÓN. Son aplicaciones específicas diseñadas para crear otras aplicaciones o programas. Son programas para crear programas. 2.
Subtema: Hardware y Software básico
DECISION CLOUD: SISTEMA DE GESTIÓN DE SERVICIO AL CLIENTE E INTEGRACIÓN DE APLICACIONES, BASADO EN LA ARQUITECTURA ORIENTADA A MICROSERVICIOS, PARA DECISIÓN.
Universidad autónoma del estado de México
Introducción a la Programación Multimedial
. Primera Open Class Asignatura: Programación Estructurada Tema:
PROGRAMACIÓN ORIENTADA A OBJETOS
Ingeniería de Software
Rafael Asprilla Universidad de Panamá ,
Polimorfismo subtipado
TEORÍA DE SISTEMAS Universidad Mesoamérica
Proyecto de Software. t07
Fundamentos de programación
Tema 2. Resolución de Problemas
Fundamentos de negocios y comercio electrónico.
Proyecto de Software. Clase 06
PROGRAMACION ESTRUCTURADA.
ALGORITMOS, LENGUAJES Y TECNICAS DE PROGRAMACION
introducción Ingeniería de software
En la siguiente presentación veremos algunos términos que debemos conocer para iniciar la educación virtual.
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno. INTRODUCCIÓN A UML  QUE ES UML?  PARA QUE SE UTILIZA  COMPONENTES  DIAGRAMAS.
INNOVACIONES TECNICAS A LO LARGO DE LA HISTORIA
Tema 3. Lenguaje unificado de modelado UML
Ingeniería de Software
Fundamentos del computador
METODOLOGIA DEL DESARROLLO DE SISTEMAS
Infografía. Estructura de Datos.
Salir de la presentación
UML 2,0 Christian Sáenz.
Las herramientas Case Julian madrigal.
Santana Mejía Andrea Michell Villarruel Miranda Alejandro Ernesto
EL ORDENADOR es una máquina electrónica que recibe y procesa datos para convertirlos en información útil. Las instrucciones dentro del computador se representan.
TAREA DEFINICIONES: Software: Equipamiento lógico o soporte lógico de una computadora digital; comprende el conjunto de los componentes lógicos necesarios.
Diagramas del modelo uml
Fundamentos de Programación
Especificación de requerimientos por: Sonia Cristina Gamboa Sarmiento
Proceso Unificado de Desarrollo de Software
GESTIÓN EMPRESARIAL.
LUZ MERY SILVA BUITRAGO
Sabes Que es un ALGORITMO
Java – programación orientada a objetos programación ii – iee
Diferencias programador vs Ingeniero de software
CONCEPTOS BÁSICOS DE COMPUTACIÓN E HISTORIA
Programación Orientada a Objetos. ¿Qué es un ordenador? “Un sistema digital con tecnología microelectrónica capaz de procesar información a partir de.
SOFTWARE.
CURSO PROGRAMACIÓN BÁSICA SEMANA 2
Modelo de la cascada (cont.)
Área de Matemática.
Fundamentos de la Programación I
MODULO DE SISTEMAS DE INFORMACIÓN
METODOS PARA ANALISIS DE TALUDES
Optimización de Procesos.
ADMINISTRACIÓN Y GESTIÓN EDUCACIONAL ENFOQUE SISTÉMICO
Lingüística computacional
Instituto Tecnológico de Zacatecas
Diagrama de componentes
Programación Estructurada
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno. INTRODUCCIÓN A UML  QUE ES UML?  PARA QUE SE UTILIZA  COMPONENTES  DIAGRAMAS.
AUTOR: SALGADO ESCOBAR STALIN SEBASTIAN DIRECTOR: ING. JOSE SANCHO
1 PROGRAMACION ORIENTADA A OBJETOS MARIA LAURA ESPIN B. INSTITUTO TECNOLÓGICO SUPERIOR ÁNGEL POLIBIO CHÁVEZ TECNOLOGÍA SUPERIOR EN DESARROLLO DE SOFTWARE.
Unida III: Análisis y Diseño de Sistemas Orientado a Objetos
Macros EN EXCEL.
ESTRUCTURA DE UNA PC.
Transcripción de la presentación:

Tema 1. Introducción al Paradigma Orientado a Objetos Objetivo: El alumno se familiarizará con los conceptos básicos de la teoría de Orientación a objetos.

1 Introducción al Paradigma Orientado a Objetos Antecedentes históricos y problemática. Complejidad del software Modularización Reutilización de código Paradigma Orientado a Objetos Introducción al lenguaje de programación Java.

Antecedentes históricos y problemática Programación Orientada a Objetos Paradigma de programación que facilita modelar el mundo real dentro de nuestros programas. ¿Quién ha visto una función “reproducirSonido” haciendo ruido por la universidad? ¿Y a un perro ladrar?

Antecedentes históricos y problemática La Programación Orientada a Objetos (POO) facilita pensar nuestros programas como entes del mundo real interaccionando de manera natural.

Antecedentes históricos y problemática Riel (1996) afirma que es un paso natural para alejar al programador de software de los detalles de la máquina sobre la que se programa. Lenguaje máquina [1] Lenguaje ensamblador [2] Lenguaje estructurado [3] Lenguaje orientado a objetos [1] https://github.com/XlogicX/m2elf/blob/master/hello_world.m [2] http://cs.lmu.edu/~ray/notes/x86assembly/ [3] http://c2.com/cgi/wiki?HelloWorldInManyProgrammingLanguages

Complejidad en el desarrollo de software Los programas son difíciles de escribir por naturaleza. Brooks (1987) identifica dos tipos de complejidad en el software: Complejidad esencial. Complejidad accidental. COMPLEJIDAD ESENCIAL Se debe a que los problemas que intentamos modelar son intrínsecamente complejos, con muchas variantes y estados. Interacciones entre personas Mercados Redes Si simplificamos el problema, se dejan fuera propiedades esenciales del fenómeno a modelar.

Complejidad en el desarrollo de software COMPLEJIDAD ESENCIAL El software que se comunica con otro software debe de adaptarse a los requerimientos del segundo, aumentando su complejidad. Los requerimientos no son estáticos, cambian conforme se interactúa con el usuario. Pues se descubren nuevas maneras de usarlo o campos de aplicación para los que no se había diseñado. Es difícil de visualizar. Cuando se intenta representar el comportamiento del software se requiere un gran número de diagramas (p. ej. UML), que no se pueden analizar al mismo tiempo.

Complejidad en el desarrollo de software COMPLEJIDAD ACCIDENTAL Se debe a las dificultades externas al problema. Comunicar instrucciones a una computadora es difícil. Lenguaje máquina Mantener un código limpio y consistente entre versiones requiere mucha disciplina. Cada modificación tiene una gran probabilidad de introducir bugs. En el paso del diseño a la implementación se pueden perder detalles importantes.

Complejidad en el desarrollo de software ¡No todo está perdido! La POO ayuda a eliminar la complejidad accidental al proveernos un paradigma que puede usarse consistentemente en las fases de análisis, diseño e implementación de software - Riel(1996) https://pixabay.com/en/mars-rover-exploration-space-30338/

Modularización Modularización Según Niklaus Wirth (1974): "Nuestra herramienta mental más importante para competir con la complejidad es la abstracción. Por tanto, un problema complejo no deberá considerarse inmediatamente en términos de instrucciones de un lenguaje, sino de elementos naturales del problema mismo, abstraídos de alguna manera".

Modularización Se trata de construir modelos mentales que reproduzcan situaciones reales, y encapsulen y aíslen información y comportamientos, como piezas ejecutables. Éstas deben tener una interfaz de comunicación con el exterior conocida. Así mismo deben tener una ejecución correcta y ser de la máxima reutilización en otras situaciones similares.

Modularización El concepto básico del diseño modular es muy simple. Consiste en dividir un programa en módulos que puedan ser analizados, programados y depurados por separado. La máxima que rige esta filosofía es: Divide y vencerás. Realmente, la programación modular es un intento por diseñar programas por componentes, de forma que cualquiera de ellos pueda ser sustituido sin afectar al conjunto.

Modularización Un esquema que resume el proceso de diseño de programas podría ser: Descomposición del problema en bloques o módulos de sólida cohesión interna (Diseño modular) Programación de cada módulo mediante métodos estructurados (Programación estructurada) Integración de módulos mediante procedimientos descendentes (TOP-DOWN) o ascendentes (BOTTOM-UP)

Modularización El diseño modular y la programación estructurada son corrientes que surgen en los años 70’s, en el momento en que empieza el auge de los lenguajes de alto nivel, y hacen uso de procedimientos y funciones para la consecución de sus objetivos. A partir de aquí el interés principal del diseño de software evoluciona y se desplaza desde la importancia de los algoritmos (enfoque procedimental) como medios para la obtención de resultados, hasta centrarse en la propia naturaleza de los datos u objetos como elementos principales de interés. Se constituye entonces el diseño de software en un proceso de modelado de la realidad a través de los datos como su representación concreta.

Reutilización de código Re-uso de código “La mejor manera de atacar la [complejidad] esencia de construir software, es ni si quiera construirlo” (Brooks, 1995) El re-usar código permite desarrollar software de manera más rápida: Es más fácil usar código ya construido que crearlo de cero. ¿Cuantas veces han leído directamente del buffer del teclado? ¿Y cuantas veces han usado scanf( )? Facilita su mantenimiento: Si se encuentra algún defecto en el software o una implementación mejor (más rápida, mas eficiente en memoria) solo se debe modificar en un solo punto para que todos quienes lo usan se vean beneficiados.

Reutilización de código Formas de re-uso de código Copiar y pegar ¡La peor! ni siquiera debería aparecer en esta lista. NUNCA se debe usar Funciones Código que reciben datos de entrada, los procesa y devuelve un resultado sin efectos colaterales (modificar archivos, enviar mensajes). Módulos Conjunto de piezas de software que realiza un proceso en específico. Módulo de Inteligencia Artificial Módulo de render Modulo de procesamiento de imágenes Bibliotecas Conjunto de implementaciones de software escritas para un lenguaje o plataforma específico

Reutilización de código Formas de re-uso de código API (Application Program Interface) Es la definición de funcionalidad que debe proveer una biblioteca. Es independiente de la implementación. Dice “Que” hace el software no “Como” lo hace Servicios web Es la tendencia actual para el desarrollo de software re-utilizable. Permite exponer en Internet APIs específicos aplicaciones. Google maps API (https://developers.google.com/maps/) Twitter REST API (https://dev.twitter.com/rest/public) Facebook (https://developers.facebook.com/docs/graph-api) https://www.publicapis.com/

Reutilización de código Diseñando para el re-uso Cuando desarrollamos software siempre debemos tener como meta que sea re-utilizable. POO (bien aplicada) nos ayuda a crear elementos de software altamente re-utilizables, ya que sus principios están orientados a ello: Abstracción Programación a interfaces Composición Polimorfismo Herencia

1 Introducción al Paradigma Orientado a Objetos Referencias Riel, A. J. (1996). “Object Oriented Design Heuristics”. Estados Unidos: Addison-Wesley Brooks F.P. Jr. (1987). “Concepual Essence of Software Egineering or There is No Silver Bullet”. IEEE Computer, Octubre 1987 Brooks F.P. Jr. (1995). “The mythical man-month: essays on software engineering”