This video is the first in a 16-week course on object-oriented technology. The instructor, Vladimir Díaz, introduces the course, covering the evolution of software development paradigms (structured, object-oriented, and event-driven programming), and outlines the course structure, including a project and exams.
[Música] bien buen día para todos un gusto que estén en este nuevo curso el curso es una técnica electiva a la cual le denominamos tecnología orientada a objetos y en el cual vamos a aprender sobre esta nueva forma de desarrollo del software mi nombre es vladimir díaz voy a estar a cargo de estos vídeos durante el lapso de las 16 semanas que dura este curso en este primer vídeo vamos a hablar un poco sobre las generalidades que la materia nos ofrece vamos a hablar propiamente del desarrollo del software que se basa en modelos y el proceso propiamente de desarrollo de software cuáles son esos modelos que me permiten desarrollar software de calidad hablando un poco sobre la materia pues a estos días a como ha venido evolucionando la tecnología ha habido diversos paradigmas en la programación el más utilizado hasta hace unos diez quince años pues será la programación estructurada la programación estructurada veía un problema a través de el flujo de datos dentro del problema eso tenía sus consecuencias en alguna manera el problema debería de ser pequeño para poder desarrollarlo de una manera estructurada y luego viene a partir del año 1960 más o menos el paradigma de la programación orientada a objetos la cual ya no ve el problema a través de los datos sino que lo ve a través de los actores que toman en cuenta para ese problema y como esos actores resuelven ese problema y más actualmente pues tenemos lo que se llama la programación orientada a eventos con el devenir de la nueva tecnología pues tenemos ventanas las ventanas normalmente contienen objetos como por ejemplo botones un evento por ejemplo asociado a un botón enviar es el evento clic o el evento doble clic entonces nosotros mediante la programación orientada a objetos definimos que para un determinado evento se debe de ejecutar tal tarea que está asignada a tal objeto la forma en cómo se desarrolla el diseño de los nuevos programas pues está orientado tanto al mundo de los objetos como al mundo de la orientación por eventos entonces es así como nace esta materia tomando en consideración estos últimos dos paradigmas que son los que hasta el momento son los que más se utilizan en la industria del software qué más tenemos dentro de esta materia pues vamos a ver tecnologías que me permiten el análisis diseño orientado a objetos que son las que me van a permitir comunicarme con las personas a las cuales yo les estoy desarrollando una solución en su proceso de evaluación para esta materia ustedes van a presentar un proyecto el cual va a estar dividido en dos etapas y luego van a realizar dos exámenes parciales cada semana o posiblemente cada dos semanas una investigación bien entrando ya en materia de lo que nos corresponde dentro del curso analicemos el por qué hay que estudiar estas nuevas técnicas esta tabla es obtenida de un estudio que se llama el estudio de caos del desarrollo del software en el cual pues ustedes pueden observar a partir de 2011 a 2015 cuáles han sido las tasas de proyectos de desarrollo del software que han podido como culminar con éxito es decir que se culminaron tanto en el tiempo cual el cual fue establecido la cantidad de recursos humanos para la cual se estableció y el tiempo ronda el 29 por ciento del promedio de los proyectos que se finalizan en esas condiciones en la segunda ustedes pueden observar el promedio de proyectos que se cambian es decir pedimos más presupuesto pedimos más recursos humanos más tiempo etcétera o incluso se cambian los requerimientos para el desarrollo del software y en la última quizá lo más catastrófico es el porcentaje de proyectos de software que fallan es decir que no logran terminar y probablemente hay consecuencias como posibles demandas ante las empresas por los individuos que han realizado estos proyectos entonces es importante que nosotros sepamos qué existe una forma de poder desarrollar software de calidad y que me permita una tasa de culminación de proyectos en el tiempo en el recurso humano y en dinero para el cual ha sido establecido normalmente nosotros vamos a obtener un problema del mundo real este problema nosotros lo vamos a abstraer es decir vamos a tomar aquellos elementos que son importantes para poder desarrollar este problema a través de la computadora para lograr esto nosotros vamos a generar un modelo que me permita junto con las personas a las cuales yo les voy a hacer el sistema que puedan entenderse y entenderme yo con ellos para que la solución sea efectiva luego de generar el modelo esto pasa a un programador oa un grupo de programadores los cuales a partir de ese modelo deben de generar la solución que ha sido solicitada luego que el grupo de programadores ha codificado ha hecho las pruebas pertinentes y el sistema funciona bien en la parte de implementación la parte de implementación es cuando nosotros ponemos en explotación el sistema es decir las personas para las cuales al principio nosotros nos reunimos están de acuerdo con que el sistema les funciona para las necesidades a las cuales ellos apuntaron al inicio esto es normalmente los pasos que se llevan para el desarrollo de un proyecto de software y en general de un proyecto en particular cuando nosotros hablamos del desarrollo basado en modelos lo que estos modelos promueven es aumentar la productividad de los equipos de trabajo es decir que estos equipos sean eficientes y eficaces a la hora de hacer sus labores también me permite una rápida adaptación tecnológica nosotros sabemos que en el mundo de la informática el cambio es muy rápido por lo tanto si una versión de un lenguaje de programación o de alguna otra cosa que nosotros tengamos por ahí necesidad de utilizarla para el desarrollo del software cambia entonces me permita poder adaptarme a este cambio sin necesidad de tener que afectar toda mi mi anterior estudio otro de lo que promueve es la mejora entre los de la comunicación entre los distintos usuarios que conforman el entorno en el cual se va a desarrollar el sistema aquí hablo de programadores de los usuarios finales de los que pagan por hacer el proyecto etcétera y al final pues la comunicación que tiene que darse entre los desarrolladores o los programadores de la aplicación lo cual es de suma importancia porque el cambio en el nombre de una variable o en el tipo de una variable o sea puede afectar enormemente todo un trabajo hecho por muchos más programadores entonces es importante que nosotros nos comuniquemos dentro de los equipos para poder desarrollar muy bien este proyecto de software esta es una imagen que ustedes pueden encontrar en internet y en la cual pues se detalla mucho sobre la problemática de desarrollo de software y en la cual cada uno de los elementos o de las personas que intervienen en el desarrollo de software ve el software de una manera distinta como por ejemplo en la primera ustedes pueden observar que muy probablemente se contrata a un consultor y el consultor diseña una solución de una manera en la cual él cree que debe de ser y así podemos pasar por distintas usuarios y cada usuario va a tener una visión diferente de cómo se realmente se quiere aunque al final como ustedes pueden observar en este dibujo el usuario lo que quería era esto pero todos los demás pensaron que era diferente entonces la comunicación con el usuario es primordial a la hora de poder desarrollar software para que no pase como en la figura de enmedio aparece que el presupuesto pues varía un montón que es uno de los principales recursos y los que más debemos de cuidar junto con el tiempo a la hora de desarrollar un software ok como desarrollar software de mejor manera si nos remontamos a un par de diapositivas atrás recordemos que hay un problema real ese problema real nosotros tenemos que abstraer lo generar una idea abstracta para generar esa idea abstracta nosotros necesitamos un proceso que este proceso sea formal y a medida que ese proceso se formalice entonces nosotros vamos a estar en la capacidad de dar mejores soluciones luego de haber comprendido el problema y saber realmente lo que necesita el usuario pasamos a las fases de desarrollo en la fase de desarrollo cuando nosotros vamos a codificar lo pues de alguna manera se vuelve complejo porque la comunicación entre los programadores se vuelve muy probablemente difícil ya que probablemente hay diferentes horarios algunos programadores hacen unas funciones diferentes a las de otros programadores etcétera entonces normalmente el software también se divide en ciertas tareas y cada programador tiene su tarea asignada entonces esto vuelve complejo el desarrollo del software luego que ya pasamos esta vamos a la implementación oa la solución de la solución de la aplicación que ha sido creada es decir se le damos al usuario para que la pueda probar de manera definitiva y probablemente hacerle algunos ajustes debido a los cambios dentro de la organización recordemos también que una organización no es estática y probablemente los requerimientos que nosotros obtuvimos cinco meses atrás no son los requerimientos de información que actualmente tiene esta empresa u organización entonces muy probablemente haya que hacer una mejora dentro de ese software para poder hacer este desarrollo normalmente nosotros nos basamos en modelos uno de los modelos que más se utiliza es el modelo de en cascada por su similitud con una cascada en la cual nosotros tenemos una fase de adquisición de requerimientos o requisitos nosotros no podemos pasar a la siguiente etapa que es el análisis mientras todos esos requisitos no estén de acorde a lo que el usuario quiere luego pasamos del análisis al diseño es decir en el análisis validamos que todo eso que es lo que realmente se requiere lo que el usuario nos dijo luego pasamos al diseño a ver cómo se van a ver las pantallitas si va a ser en el web si va a ser para un dispositivo móvil si va a ser para el desktop luego que tenemos todas estas cuestiones de diseño pasamos a la parte de codificación donde entran ya de lleno los programadores y al final antes de ponerlo en marcha la prueba del software entonces por eso que se llama en cascada porque pues viene hacia abajo y no podemos regresar a la etapa anterior sin tener costos otro de los modelos que se utiliza bastante y es el que está de más moda es el desarrollo evolutivo en el cual nosotros comenzamos con una aplicación pequeña o un módulo pequeño dentro del sistema grande que vamos a desarrollar a partir de ese pequeño módulo comenzamos a generar soluciones más grandes más grandes así hasta ir cubriendo todas las necesidades de información de la organización por eso se le llama evolutivo comenzamos de este pequeño hasta cumplir con los requerimientos de información más grandes o sea que se tenga cada una de ellas de esas pequeñas entregas o sea que se están haciendo y se están incorporando al sistema grande pues lleva requerimientos y riesgos análisis de riesgos planificación etcétera todo lo que hemos visto probablemente en otras materias como administración y ahora está muy de moda esto el desarrollo interactivo el desarrollo interactivo no es más que tomar el modelo en cascada y el modelo evolutivo y hacer pequeñas entregas a períodos de corto más pequeños con presupuesto más pequeño y con personal más reducido entonces por eso se llama iterativo hacemos una entrega probablemente al mes oa los seis semanas de haber iniciado el proyecto y de igual manera vamos así hasta que finalizamos todo el desarrollo del proyecto actualmente es el modelo más utilizado en la industria del software veamos la fase de ingeniería de requerimientos o cuando nosotros adquirimos esos requerimientos podemos observar en esta gráfica que normalmente nosotros suponemos que hacer un cambio en los requerimientos del software pues la suposición dice que se puede mantener constante pero no es cierto si nosotros estamos en alguna etapa avanzada del desarrollo del software el costo de cambiar un requerimiento mientras más cerca de la implementación del software estemos el costo es mucho más elevado como lo muestra la segunda línea donde dice la metodología tradicional la metodología tradicional normalmente nos vamos a referir a la metodología de desarrollo en cascada entonces no es conveniente hacer cambios cuando estamos utilizando una metodología como esa en tareas que ya están próximas a la entrega del software por ejemplo cambiar un requerimiento cuesta mucho normalmente pues habrá que tener en cuenta a los stakeholders para poder establecer esas necesidades desde un principio los stakeholder pues son personas o sea que se ven inmersas en el desarrollo del software no normalmente no son los usuarios finales pero son personas que tienen un interés en el que este software se desarrolle luego de la ingeniería de requerimientos pasamos al diseño de la solución en el diseño de la solución pues hay diversas etapas como ustedes lo pueden ver hay que diseñar la arquitectura del software normalmente hay arquitectos del software que se dedican a esto y obtenemos una documentación en ese caso la estructura arquitectónica del sistema y así luego hacemos una especificación del software las interfaces los componentes o las clases que van a formar ese software las estructuras de datos que vamos a estar utilizando y al final pues los algoritmos que son necesarios para poder desarrollar esta solución cada una de esas actividades de diseño están acompañadas por un producto o un documento que se entrega a la siguiente generación de personas que va a tomar el proyecto para darle seguimiento en las tareas que hemos planificado luego viene la implementación del software cuando ya modificamos diseñamos hicimos la ingeniería de requerimiento entonces hay que implementar el software cuando nosotros implementamos el software nosotros debemos de tener claro que debemos de reducir la complejidad que esto conlleva es decir no hay que hacer que el usuario piense mucho para utilizar el sistema también verdad hay que validarlo hay que usar estándares para que éstos puedan llevarse de mejor manera dentro de lo que es el entorno de desarrollo si dentro del entorno de la empresa pues predomina el color azul pues nuestro sistema debería de tener color azul etcétera en la parte de verificación y validación que son dos términos que se utilizan mucho en la ingeniería del software tenemos que preguntarnos en la parte de validación hemos construido el sistema adecuado es decir si en el documento de requerimientos dice que hay que sacar un reporte de ventas vamos a ver el sistema y verificamos que el reporte de ventas este y luego pues hacemos la verificación es decir es realmente correcta la información que dice ese reporte de ventas esta es la diferencia que vamos a encontrar entre verificación y validación de nuestro sistema luego pasamos a la fase de mantenimiento cuando el sistema ya está en explotación hay varios tipos de mantenimiento que hay que darle por ejemplo el correctivo es decir hubo un apagón en una de las computadoras y se cortó la energía y un componente probablemente se dañó una clase que ya no pudo cargarse entonces hay que ir a ver cuál es esa clase y hay que volverla a descargar a mi aplicación pero efectivo porque probablemente ok la gráfica no sale muy bien definida entonces habrá que arreglar algunas cuestiones para adecuarla al tamaño de papel probablemente oa colores o adaptativo recuerdan que dije que las organizaciones no son estáticas sino que cambian con el tiempo entonces por lo tanto los requerimientos de información de hace cinco meses no son los mismos los de los actuales entonces habrá que adaptarlos también puede haber un bug en el código es decir el programador sin intención en vez de sumar 5 sumó 6 en alguna operación aritmética entonces esto me puede generar un bug etcétera entonces el mantenimiento realmente va a depender de muchos factores como por ejemplo los cambios en el entorno de la empresa en la cual estamos trabajando qué son los que normalmente van a dictar qué cambios se van a hacer dentro de lo que es nuestro sistema gracias por la atención prestada hasta la siguiente clase [Música] bien [Música]