Antecedentes históricos y problemática Introducción al Diseño Orientado a Objetos.

Slides:



Advertisements
Presentaciones similares
NZ/EA/abril Introducción Julio NZ/EA/abril ¿ Que es la IS ? Disciplina que trata los aspectos concernientes al desarrollo de sistemas.
Advertisements

Clase 09.  Garantizar la calidad de software  La prueba nunca termina, del IS translada se translada al usuario  Las casas de software invierte del.
2012-BM5A. Introducción Todos los lenguajes de programación son distintos entre si. Sin embargo, pueden ser agrupados según la forma de pensar y estructurar.
Ingeniería del Software Diseñó de Software Universidad de los Andes Demián Gutierrez Abril 2009.
ALCIBIADES VALLEJO BERRIO 2.1 INTRODUCCION 2- Requerimientos  Una de las fases más importantes en el proceso de construcción de software es la de adquisición,
Pruebas de Funcionalidad de Software: Caja Negra y Caja Blanca Curso: Diseño de Sistemas 9no. Semestre.
Ingeniería de Software
Análisis de Proyecto de Software.
Nombre José Francisco Luna Jurado Matricula Asignatura
Herencia Multiple en Java
WordPress REST API
Ingreso , proceso y salida de datos
Clases y Objetos.
El Lenguaje de Modelación Unificado
Diseño de interfases Sistemas de Información
Ingeniería de Software
SWEBOK.
Programación Orientada a Objetos
U.T. 11: Introducción A Las Bases De Datos
LENGUAJE DE PROGRAMACIÓN Y SOFTWARE PROPIETARIO
Tema 2. Resolución de Problemas
Conceptos y definición básicos
Ingeniero en Computación José Alfredo Cobián Campos
Introducción a programación web Martin Esses
Ingeniería en Sistemas de Información
Tema 1. Introducción al Paradigma Orientado a Objetos
UNIVERSIDAD ICEP INTELIGENCIA ARTIFICIAL INGENIERÍA EN SISTEMAS COMPUTACIONALES Martes, 24 de Octubre de 2017 REPRESENTACIÓN DEL CONOCIMIENTO Y RAZONAMIENTO.
Ingeniería de Sistemas Requerimientos
CREAR DIAGRAMA DE FLUJO
UNIVERSIDAD PEDAGÓGICA NACIONAL FRANCISCO MORAZÁN
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno. INTRODUCCIÓN A UML  QUE ES UML?  PARA QUE SE UTILIZA  COMPONENTES  DIAGRAMAS.
Tema 3. Lenguaje unificado de modelado UML
Definición de un Sistema Distribuido
Lenguaje y representación técnica
Software Es intangible, existe como información, ideas, conceptos, símbolos, pero no ocupa un espacio físico, se podría decir que no tiene sustancia. Se.
Algoritmo Capitulo Cinco.
TAREA DEFINICIONES: Software: Equipamiento lógico o soporte lógico de una computadora digital; comprende el conjunto de los componentes lógicos necesarios.
Programación Orientada a Objetos
Ingeniería del Software
CONCEPTOS PRELIMINARES (Cont)
Introducción al lenguaje de programación. Introducción  Los lenguajes de programación son aplicaciones específicas que han sido pensadas y diseñadas.
FUNDAMENTOS DE PROGRAMACION EN ENTORNO WEB. Rodrigo Cabello Ing. Informático Director de proyectos Think – Ideas in Motion FUNDAMENTOS.
Universidad Nacional de Colombia - Leguajes de Programación
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.
ABSTRACCION DE DATOS   Estructura de Datos Básicos: En programación una estructurad de datos, es una forma particular de organizar datos en una computadora.
Fundamentos de la Programación I
Programacion Orientada a Objetos
FUNDAMENTOS DE PROGRAMACIÓN. INTRODUCCIÓN  Conceptos: Informática, Ordenador, Programa, Dato, Bit, Byte, Hardware, Software, Lenguaje de Programación,
Docente: Ing. Francisco Rodríguez
OBJETOS.
“Conceptos Básicos de Java”
Lenguaje de Programación II
CONTROLES Y ESTRUCTURAS BÁSICAS DE PROGRAMACIÓN  1. Algoritmos: conjunto de instrucciones programadas para resolver una tarea específica.  2. Datos:
PRESENTACION DE INGENIERIA ORIENTADA A OBJETOS. INTRODUCCION. ¿ Qué es UML ?. UML, por sus siglas en Ingles, Unified Modeling Languaje.(Lenguaje Unificado.
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno. INTRODUCCIÓN A UML  QUE ES UML?  PARA QUE SE UTILIZA  COMPONENTES  DIAGRAMAS.
Características de los Sistemas Operativos
1 PROGRAMACION ORIENTADA A OBJETOS MARIA LAURA ESPIN B. INSTITUTO TECNOLÓGICO SUPERIOR ÁNGEL POLIBIO CHÁVEZ TECNOLOGÍA SUPERIOR EN DESARROLLO DE SOFTWARE.
GC-F-004 V.01 CENTRO DE INDUSTRIA Y LA CONSTRUCCIÓN REGIONAL TOLIMA.
MODELO EN CASCADA Integrantes: Felipe Alemán Lester Blandón.
INTRODUCCIÓN A UML.  QUE ES UML?  PARA QUE SE UTILIZA  COMPONENTES  DIAGRAMAS.
PRUEBAS DE CAJA NEGRA. -Internationa Software Testing Qualification Board (ISTQB) Internationa Software Testing Qualification Board (ISTQB) Técnica de.
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS
ESTRUCTURA DE LO SISTEMAS OPERATIVOS Presentado por: Jennifer.
SISTEMA OPERATIVO Un sistema operativo es un programa o conjunto de programas de un sistema informático que gestiona los recursos de Hardware y provee.
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS. Estos sistemas no tienen una estructura definida, sino que son escritos como una colección de procedimientos donde.
Estructura de los Sistemas Operativos
Luis Fernando Muñoz Pantoja Ingeniero de Sistemas Copyright 2019 Luis Fernando Muñoz Pantoja Ingeniero de Sistemas Derechos reservados UML.
Transcripción de la presentación:

Antecedentes históricos y problemática Introducción al Diseño Orientado a Objetos

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?

● La Programación Orientada a Objectos (POO) facilita pensar nuestros programas como entes del mundo real interaccionando de manera natural. Programación Orientada a Objetos

● 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] [1] [2] [3] Lenguaje ensamblador [2] Lenguaje estructurado [3] Lenguaje orientado a objetos

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. – 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 – 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)

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, 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.

Modularización ● 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.

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

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

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 ( – Twitter REST API ( – Facebook ( –

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

Referencias ● Riel, A. J. (1996) Object Orieted 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