![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/Alvaro_Chirou_Curso-Gratis-de-Programacion-5-Programacion-Orientada-a-Objetos.jpg?resize=1024%2C576&ssl=1)
Bienvenidos a este nuevo capítulo de este Curso Gratis de Programación #5 Programación Orientada a Objetos. Es un método disciplinado de escribir programas. La programación Orientada a Objetos nace de los problemas creados por la programación estructurada.
¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?
![](https://i0.wp.com/achirou.com/wp-content/uploads/2023/11/image.png?resize=549%2C67&ssl=1)
Programación orientada a objetos
La situación de la notable caída de los costos de equipamiento y una equivalente subida de los costos de desarrollos de software desataron lo que se llamó la crisis del software. El acuciante problema del softwares que no se terminaba o que los equipos de trabajo tenían bajo rendimiento. Hasta ese momento, la actitud de muchas de las personas involucradas en la industria de la computación había sido tratar a las computadoras casi como si fueran una industria artesanal.
La Programación Orientada a Objetos (POO), es lo que surge como respuesta a esta crisis del software, para aumentar la productividad y eficiencia al escribir programas y sistemas a través de, entre otras estrategias, el reúso de software. “El término Paradigma de Programación se refiere al conjunto de ideas que constituye la base de un modo particular de programación” La POO es una forma de diseñar y escribir programas basados en el concepto de que un programa puede ser creado como una colección de objetos que trabajan juntos.
La programación Orientada a Objetos nace de los problemas creados por la programación estructurada y nos ayuda a resolver cierto problemas como:
Código muy largo:
A medida que un sistema va creciendo y se hace más robusta el código generado se vuelve muy extenso haciéndose difícil de leer, depurar, mantener.
Si algo fallaba, todo se rompe: Ya que con la programación estructurada el código se ejecuta secuencialmente al momento de que una de esas líneas fallara todo lo demás deja de funcionar y era Difícil de mantener. Cada uno de estos objetos es un conjunto de datos y métodos que operan en este conjunto de datos.
Los detalles de cómo se guardan los datos y cómo funcionan los métodos son ocultados del usuario. Se crea un objeto a partir de una clase Y, a partir de ella, se pueden crear muchos de estos objetos. Una clase puede heredar (o tomar prestado) características de otra clase. Las clases realizan tareas específicas también pueden ser reutilizadas en otros programas, acelerando así el desarrollo de programas. Hoy el 99% de los SO, Juegos y app móviles lo usan. C no lo soporta pero C++, java, PHP, Python sí.
La POO se basa en dos conceptos básicos:
Hay objetos y Solamente se comunican a través de mensajes. Un objeto es una entidad que agrupa datos y funcionalidad. En este esquema los datos son otros objetos, que son referenciados a través de un nombre, una etiqueta. Por ejemplo, un objeto Persona tiene como datos el nombre y la edad, estas son etiquetas que apuntan a los objetos correspondientes. Entendemos funcionalidad por lo que hace un objeto cuando recibe un mensaje, determinando su comportamiento. Siguiendo con el ejemplo de la persona, si se le envía el mensaje “correr”, esta empieza a correr.”
Conceptos de Orientación a Objetos: El POO (Paradigma Orientado a Objetos) representa un modelo de desarrollo de resolución de problemas que se acerca al modelo utilizado por las personas sobre cómo piensan y ven el mundo real.
“El Paradigma Orientado a Objetos hace modelos de los objetos del mundo real mediante sus contrapartes en software”
Origen del Paradigma Orientado a Objetos: El paradigma orientado a objetos surge como un modelo para resolver distintos problemas.
Paradigma:
“Es un modelo o patrón en cualquier disciplina científica u otro contexto epistemológico”
Este paradigma algunas veces se mezcla con alguno de los otros 2 modelos, sin embargo mantiene características propias, que lo diferencian claramente. Los programas de este tipo, se concentran en los objetos que van a manipular, y no en la lógica requerida para manipularlos. Que es un objeto? Todo es un objeto. Se puede crear o destruir. Ejemplos de objetos pueden ser: estudiantes, coches, casas etc, cada uno de los cuales tendrá ciertas funciones (métodos) y ciertos valores que los identifican, teniendo además, la facultad de comunicarse entre ellos a través del paso de mensajes.
La Programación Orientada a Objetos viene de una filosofía o forma de pensar que es la Orientación a Objetos y esto surge a partir de los problemas que necesitamos plasmar en código. Es analizar un problema en forma de objetos para después llevarlo a código, eso es la Orientación a Objetos. Un paradigma es una teoría que suministra la base y modelo para resolver problemas. eL paradigma de Programación Orientada a Objetos se compone de 4 elementos:
- Clases: Propiedad y comportamiento de un objeto
- Propiedades: Atributos. propiedad del objeto
- Métodos: Lo que el objeto puede hacer (algoritmo)
- Objetos: instancia de una clase
4 Pilares:
- Abstracción: Determinación de las características de los objetos, que sirven para identificarlos y hacerlos diferentes a los demás.
- Encapsulamiento: Es el proceso que agrupa y almacena los elementos que definen la estructura y el comportamiento de una abstracción, en un mismo lugar.
- Herencia: Propiedad donde se pueden crear clases a partir de clases ya existentes.
- Polimorfismo: Es la capacidad que tienen los objetos de diferentes clases para responder a un mismo mensaje de manera específica para cada uno.
Además de estos elementos fundamentales, también existen otros 3 elementos secundarios , que aunque son deseados, no son indispensables para clasificar un lenguaje dentro de este estilo.
- Tipificación: Mecanismo que intenta restringir el intercambio entre abstracciones que poseen diversas características.
- Persistencia: Es la propiedad de un objeto a continuar existiendo a través del tiempo y/o del espacio.
- Concurrencia: Es la propiedad que distingue a los objetos activos, de los que no lo están.
- Modularidad: Es la propiedad de agrupar las abstracciones que guardan cierta relación lógica, y a la vez minimizar la interdependencia entre las diversas agrupaciones.
- Jerarquía: Consiste en establecer un orden o una clasificación de las abstracciones.*
Paradigma orientada a objetos
Puede ser: imperativo, funcional o lógico. La solución de un problema se plantea en términos de objetos y relaciones entre ellos. tiene las siguientes características principales: Encapsulamiento, herencia y polimorfismo
El lenguaje LOO maneja la información basado en:
- Clase : Cada objeto tiene una identidad (nombre o identificador), un estado (datos o propiedades) y un comportamiento (acciones o métodos). Se definen las clases que son las plantillas para crear objetos
- Objeto: Entidad determinada por una clase y un estado, capaz de interactuar con otros objetos
- Herencia: Propiedad donde se pueden crear clases a partir de clases ya existentes
Se caracteriza por Organizar un programa mediante un lenguaje estructurado
Aspectos
- Encapsulado: une el código y los datos que este manipula
- Polimorfismo: permite a una interfaz acceder a una clase general de acciones
- Herencia: permite que un objeto adquiera las propiedades de otro objeto
Organiza
- Según código: lo que sucede
- Según sus datos_ lo que es afectado.
Métodos
Ejecuta un programa: se valida el codigo para revisar fallas y posibles mejoras
Compila un programa: se desarrolla el código que va a ejecutar el programa. Se utilizan:
Constantes: espacios de memoria que conservan siempre el mismo valor de tipo
- Float
- Carácter
- Entero
Condicionales: evalúa la sentencia y ejecuta la orden de acuerdo a la interacción
- If
- Else
Ciclos: se repite el proceso hasta que se cumpla la iteración
- Switch
- For
- while
Variables: espacios de memoria que alteran su valor de tipo
- Cadena
- Entero
- decimal
Crea un programa: se toma la información y se desarrolla el análisis del problema
Ventajas de la POO
Un paradigma como la POO es una ayuda en la búsqueda de la solución de un problema. Esto es debido a que ofrece formas predefinidas de organización de la tarea y modos de escritura que permiten acelerar el trabajo en pos de construir la solución de software.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-278.png?resize=1024%2C616&ssl=1)
Modularidad: podríamos considerar un módulo como un bloque de código, pudiendo ser este bloque un método, una clase, un componente, un servicio externo, etc. cuya misión es la ejecución de una funcionalidad específica. El nivel de modularidad de un sistema va a estar determinado por el número de módulos que lo componen y la interacción que existe entre los módulos. La modularidad en el desarrollo de una aplicación ofrece los siguientes beneficios:
Se puede resolver un problema como una división en subproblemas más pequeños y de menor complejidad, siendo cada una de estas divisiones un módulo.
Si es necesario aplicar un cambio, solamente se aplica a un módulo o a un grupo reducido de módulos, disminuyendo de esta forma el impacto en el resto del sistema.
Facilita el entendimiento del sistema, ya que para entender un módulo no es necesario examinar los detalles de la implementación del resto de los módulos. Es suficiente con conocer el propósito de cada módulo.
Se pueden realizar pruebas sobre un módulo o un grupo de módulos independientemente del resto del sistema.
Facilidad de mantenimiento:
El desarrollo modular del Paradigma Orientado a Objetos facilita el mantenimiento del sistema.
Extensibilidad:
La gran mayoría de los sistemas sufren alteraciones a lo largo de su vida. Estas alteraciones se deben entre otras cosas al entorno cambiante en el que se desenvuelve el sistema. Nuevos requerimientos con nuevas funcionalidades pueden surgir, razón por la cual es deseable que nuestro sistema sea lo suficientemente flexible para dar soporte a las nuevas funcionalidades sin alterar el resto del sistema. permite el diseño de sistemas extensibles. La característica de Herencia da soporte al crecimiento de un programa sin modificar las clases existentes. Si se desea agregar una nueva funcionalidad representada en una subclase, simplemente se la agrega en el modelo de clases y se indica la relación de extensión con su clase padre, permaneciendo el resto de las clases sin modificarse. Si logramos un buen diseño podremos:
- Agregar nuevas clases y subclases.
- Agregar nuevos atributos y métodos en las clases existentes.
Reutilización:
Cuando desarrollamos un sistema, resulta interesante que los módulos que vamos desarrollando estén disponibles para su utilización tantas veces como sea necesario cuando se los necesite. permite reutilizar código mediante el encapsulamiento de una funcionalidad en un módulo, ya sea mediante un método, una clase, un paquete, un componente, etc. De esta forma, se puede llamar a dicho módulo cuantas veces sea necesario cada vez que se lo necesite. Mediante la reutilización de módulos se logra:
- Reducir los tiempos de desarrollo.
- Lograr mayor consistencia.
- Facilitar las tareas de mantenimiento.
- Reducir la cantidad de código de un programa.
- Eliminar la redundancia de código.
- Desarrollar modelos más naturales.
modela objetos del mundo real. Los modelos de resolución de un problema cuentan con un conjunto de objetos que interactúan entre sí de la misma forma que entidades del mundo real se comunican entre sí. De la misma forma que en el mundo real las entidades tienen relaciones jerárquicas, en el POO los objetos también están organizados jerárquicamente por medio de relaciones de herencia.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-277.png?resize=959%2C660&ssl=1)
Definimos las ventajas de la POO, en estas características:
Reusabilidad. Cuando hemos aplicado POO, diseñando adecuadamente las clases, éstas se pueden usar en distintas partes del programa y en numerosos proyectos.
Mantenibilidad. Debido a la sencillez en la abstracción del 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.
Modificabilidad. La facilidad de añadir, suprimir o modificar nuevos objetos nos permite hacer modificaciones de una forma muy sencilla.
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.
Encontramos también el siguiente párrafode uno de los autores mas autorizados en la materia, Grady Booch:
- La descomposición orientada a objetos tiene un número de ventajas altamente significativas sobre la descomposición orientada a procesos.
- Obtiene aplicaciones más pequeñas debido a la reutilización de los mecanismos comunes, proporcionando así una importante economía de expresión.
- La descomposición orientada a objetos reduce en gran medida el riesgo de construir sistemas de software complejos, ya que están diseñados para evolucionar gradualmente desde los sistemas más pequeños en los que ya se tiene confianza.
- La descomposición orientada a objetos se dirige directamente a la complejidad inherente de software, ayudando a tomar decisiones inteligentes con respecto a la separación de las capas en un contexto mayor.
los sistemas orientados a objetos son más resistentes al cambio y por lo tanto más capaces de evolucionar con el tiempo, debido a que su diseño se basa en formas intermedias estables.
La POO domina el mercado desde hace unos años y no parece disminuir, sino al contrario, si analizamos los nuevos lenguajes y aplicaciones que han surgido recientemente. En particular, Java, aunque no es el único lenguaje OO, se puede afirmar que es el máximo referente de los lenguajes en cuanto a la cantidad de plataformas abarcadas por su forma de funcionar. Es un requisito indispensable para el programador de hoy conocer esta tecnología. Este paradigma tiene como objetivo reflejar ideas, conceptos, comportamientos que deben ser replicados por el software construido, para cumplir los requerimientos. Además, lo hace acortando los tiempos de programación, debido a que una de sus ideas centrales es resolver una vez las tareas que deben realizarse, araño tener que escribir una y otra vez el código necesario.
Evolución
Años 60 Simula Resolución de problemas de simulación © Ole-Johan Dahl & Krysten Nygaard (Noruega) Primer lenguaje orientado a objetos Simula: Introdujo conceptos cómo clases, objetos, herencia y enlaces dinámicos.
- 70 Smalltalk Entorno de programación entendible por “novatos” © Alan Kay (Xerox PARC, Palo Alto, California)
- 80 C++ Extensión de C © Bjarne Stroustroup (AT&T Bell Labs)
- 90 Java “Write once, run everywhere” © Sun Microsystems
Algunos de los lenguajes de programación Orientados a Objetos son:
Java:
- – Orientado a Objetos naturalmente
- – Es muy útilizado en Android
- – Y es usado del lado del servidor o Server Side
PHP
- – Lenguaje interpretado
- – Pensado para la Web
Python
- – Diseñado para ser fácil de usar
- – Múltiples usos: Web, Server Side, Análisis de Datos, Machine Learning, etc
Javascript–
- -Lenguaje interpretado
- – Orientado a Objetos pero basado en prototipos
- – Pensado para la Web
C#
Ruby
Kotlin
Entendiendo el POO
El análisis y diseño orientado a objetos no tiene por qué vincularse necesariamente a sistemas de software. En los sistemas de software, la orientación a objetos no se restringe a lenguajes de programación concretos, aun cuando se presenten como lenguajes OO. La OO es una metodología general de desarrollo de software, independiente del lenguaje utilizado, si bien hay lenguajes que cuentan con mejores mecanismos que otros para poder aplicarla eficazmente. Utilizar la OO es más que programar en uno o varios lenguajes de programación: implica manejarla como metodología de desarrollo. Si una aplicación no incluye abstracción, encapsulación, jerarquías, mensajes y polimorfismo no está orientada a objetos, aunque esté escrita en Java, C++ u otro lenguaje OO.
A lo largo de veinte años he visto, en programas de compañeros y clientes, clases con miles de líneas y decenas de métodos estáticos, clases compuestas sólo por métodos, clases con cohesión tan fuerte que volvían el código irreutilizable, usos de la herencia que derivaban en código confuso e inestable… Me consta que no son hechos aislados: cualquier programador o analista con cierta experiencia puede referir hechos similares, si no calcados. El motivo de estos y tantos otros errores suele ser simple. el programador ha pasado de un lenguaje estructurado a uno orientado a objetos sin tener claros y haber madurado los conceptos de la OO. Aparentemente, estos conceptos son muy sencillos…, pero ya se sabe: el diablo está en los pequeños detalles.
En los lenguajes OO puede proseguirse
En los lenguajes OO puede proseguirse, conscientemente o no, con un enfoque estructurado de programación, pero resulta inadecuado. Aunque lea estas páginas con atención, necesitará práctica, paciencia y esfuerzo para escribir buenos programas OO. ¿Debería, pues, prescindir de los conceptos e ideas de la OO, y buscar un libro sobre la sintaxis de Java o empezar a escribir código teniendo delante algún manual de ayuda? No. Conocer la sintaxis de Java no convierte a nadie en un ingeniero de software. los lenguajes y las plataformas van y vienen, pero los conceptos suelen mutar poco.
Es mucho más útil conocer para qué sirve la herencia, sus tipos (múltiple, de generalización, de implementación, de especialización…) y cuándo usarla que saber que Java implementa la herencia (¿de qué tipo?) mediante la palabra clave extends. En el campo de la orientación a objetos, las tecnologías han intentado suplantar a las ideas; lo que ha producido confusión entre los desarrolladores y, al final, ha dificultado que se use una orientación a objetos normalizada y estándar. Antes de proseguir, debería saber qué es para mí la programación orientada a objetos (POO). la POO es una herramienta para reducir la complejidad de los sistemas de software.
Simplificación
Usando la orientación a objetos, un sistema que ocupa miles o millones de líneas de código puede organizarse como una colección de pequeñas unidades (objetos), cada una con cierta independencia y ciertas responsabilidades. Un programa OO consiste en un conjunto de objetos que intercambian mensajes; cada objeto decide por sí mismo si debe o no aceptar los mensajes que recibe, así como la interpretación de cada mensaje. En un programa OO medianamente complicado, los objetos no son totalmente independientes: unos heredan propiedades y métodos de otros; algunos necesitan consultar a otros para desempeñar sus tareas; otros llevan dentro de sí más objetos… La principal ventaja que percibo en la POO estriba en que un programa de objetos se extiende y mantiene de manera más sencilla que uno sin ellos.
Si el programador necesita objetos que las empresas de software no “fabrican” o comercializan, puede construir sus propios objetos tomando un objeto ya existente y personalizándolo conforme a sus necesidades. De la misma manera, si un programa OO no funciona como se desea, encontrar el fallo resulta más sencillo que en uno estructurado o funcional: el error está muy localizado; es decir, se encuentra en la pequeña porción de código de un objeto, y no repartido entre decenas o cientos de líneas.
La POO se apoya firmemente en el análisis y diseño OO. Considero que escribir un programa OO sin hacer antes el análisis y diseño OO se parece a construir un mueble sin haber analizado para qué servirá y cuáles serán las dimensiones de sus componentes. Al final se tendrá un mueble, pues la persistencia humana carece de límites y, a menudo, de sensatez; pero las puertas no cerrarán bien, costará abrir los cajones, el mueble se tambaleará con cualquier golpe.
Orígenes de los conceptos de la OO
Pese a que el término “orientación a objetos” ejerce una innegable fascinación para muchos ingenieros de software recién salidos de la universidad, gran parte de sus conceptos distan mucho de ser nuevos. Algunos, incluso, forman parte de la tradición cultural de Occidente: Platón y Aristóteles usaron en sus escritos términos como “objetos”, “clases”, “subclases”, “clasificaciones”, etc. (Posiblemente, Aristóteles llevó demasiado lejos el concepto de clase: clasificó dentro del mismo grupo a la cotorra y la lechuga, pues ambas son verdes.)
Ya a principios del siglo XX, Alfred North Whitehead y Bertrand Russell formalizaron y ampliaron los anteriores conceptos, tratando de proporcionar –infructuosamente– una base lógica autoconsistente para la matemática. Las definiciones lógicas y filosóficas de esos conceptos han influido mucho en la terminología OO. Por ejemplo, en los Principia Mathematica se define “clase” como una colección de objetos a los que se aplica un concepto, y esa misma definición inspiró el término “clase” en la OO e influyó en el desarrollo de los lenguajes de programación SIMULA I y Simula 67 .
Los primeros lenguajes OO
Ambos lenguajes, desarrollados en el Centro Noruego de Computación (Oslo) por Christian Nygaard y Ole-Johan Dahl, son considerados los primeros lenguajes OO; su influencia conceptual subyace en todos los actuales lenguajes OO. Lo anterior no tiene un interés únicamente anecdótico o histórico: los conceptos matemáticos, lógicos y filosóficos permiten expresar con exactitud y sin ambigüedades lo que hoy se considera “orientación a objetos”.
Además, la OO (y, por tanto, el software OO) evolucionará con el tiempo hacia caminos aún inciertos, y son los conceptos lógico matemáticos y filosóficos los que seguirán usándose para elaborar lo que denominó “orientación a objetos no estándar” e incluso para elaborar nuevos métodos de análisis y diseño, de lejano parentesco con la OO. Si existe algo parecido a la inmortalidad, los conceptos matemáticos lo tienen: las ideas de Pitágoras pervivirán más que las obras de Cervantes, y seguirán vigentes cuando usted y yo seamos cenizas alrededor de un sol moribundo.
la OO ha acelerado y abaratado la construcción de grandes sistemas de software
Por una parte, como la OO ha acelerado y abaratado la construcción de grandes sistemas de software, imprescindibles para las tecnologías de la información, ha contribuido –y contribuye– a formar esa sociedad. Por otra, el hincapié de la OO en la reutilización del código y su asociación con entornos visuales de programación y metodologías iterativas han favorecido que los lenguajes orientados a objetos hayan salido fuera del círculo de los iniciados; y han permitido también que se generen muchas herramientas libres y de código abierto (algunas de calidad desigual, que no todo el monte es orégano).
sigo leyendo opiniones de expertos. Cuanto más sé sobre la OO, más dudas tengo y más escurridizos me parecen sus conceptos y técnicas. Cuanto más intento atrapar las ideas de la OO y fijarlas en el papel, más intangibles se vuelven. Y Cuanto más hablo con expertos en modelado OO, más sutileza y artesanía veo en su trabajo. Con todo, considero que esta segunda versión resulta más exacta y completa que la primera.
La orientación a objetos como metodología de desarrollo de sistemas.
Aunque todavía suele asociarse la orientación a objetos a determinados lenguajes de programación (Java, C++, Smalltalk, etc.), es mayoritaria la opinión de que la OO es una metodología de desarrollo de sistemas (informáticos o no). La orientación a objetos puede aplicarse a la ingeniería de procesos, a la gestión empresarial, etc.
La orientación a objetos considera los sistemas como colecciones de objetos capaces de interactuar, que trabajan conjuntamente para realizar tareas. Como toda metodología, incluye actividades de análisis y diseño. En el caso de los sistemas de software, comprende también actividades de programación.
Dentro del marco general de la OO, hay muchas metodologías OO. En rigor, deberían llamarse “submetodologías”; pero ningún metodólogo que se precie usaría el prefijo “sub” para su criatura, ni siquiera cuando ésta se parece al monstruo de Frankenstein, con despojos tomados de aquí y allá. Cada metodología OO detalla con precisión las técnicas que deben usarse en cada actividad y emplea una o más notaciones, generalmente gráficas, para describir los modelos que se van generando.
Diagramas de Modelado
OMT: Object Modeling Techniques. Es una metodología para el análisis orientado a objetos.
UML: Unified Modeling Language o Lenguaje de Modelado Unificado. Tomó las bases y técnicas de OMT unificándolas. Tenemos más opciones de diagramas como lo son Clases, Casos de Uso, Objetos, Actividades, Iteración, Estados, Implementación.
UML: como usar algo muerto en algo poderoso
¿Qué es UML? ¿Por qué el revuelo sobre UML?
UML es una tecnología para hacer diagramas. A todos nos enseñaron en la escuela que hacer mapas mentales, diagramas de flujo, mapas sinópticos, mapas conceptuales, esas figuras que nos ayudan a estructurar la información en nuestra cabeza. UML es eso con esteroides, diseñado para describir problemas tecnológicos. Siendo técnicos, UML es un conjunto de estándares sobre como hacer estos diagramas, para que cada quien no haga su diagrama a su manera.
UML define más de 15 tipos de diagramas diferentes. Los más populares son los diagramas de clases y diagramas de bases de datos. Mucha gente a lo largo de la historia de la construcción del software los ha utilizado. Es considerado la “documentación técnica de un proyecto”. ¿Cuál es el problema? Casi nadie hace diagramas UML hoy en día, y sobre todo en muchas empresas hay un déficit de documentación respecto a la arquitectura del software. ¿Realmente es necesario entonces? ¿Si nadie lo usa, no será que no hace falta?
Lenguaje de ingeniero. El problema.
Respuesta corta. Si necesitas UML. Imaginemos: Eres un ingeniero, un desarrollador, en una importante empresa de software. Te encargan desarrollar un sistema para un banco, el cual contiene múltiples desarrollos y complejidad. No solo eso, también tienes que exponer a los principales stakeholders (directores, etc) el proyecto, para que ellos lo aprueben y den el visto bueno. Estamos hablando de un proceso de arquitectura de software. El resultado de este proceso serían muchos dibujitos como este:
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-276.png?resize=1024%2C722&ssl=1)
Quiero aclarar el punto. Este hipotético desarrollador tiene un fuerte problema. Tiene que decirle a personas que “no saben que es un componente, un servicio, un constructor, una key en una DB” como interactuan todas esas partes para que el sistema funcione. El desarrollador sabe construirlo. El director no. El director necesita saber cuanto tiempo te va a tomar y cuanto va a costarte hacerlo. Es decir: Tenemos dos lenguajes,
- Lenguaje de Negocio
- Lenguaje de Ingeniería
El reto es decirle a personas que no hablan tu lenguaje, la importancia de tu trabajo, tus razones para hacerlo asi, y que te entiendan. UML sirve para plasmar el lenguaje de ingeniero en mapas que dicen donde poner cada pieza del rompecabezas y porque. Literalmente son mapas de ciudades, pero en este caso de software. El problema de UML es que es feo, tosco, y habla lenguaje de ingeniería. Es por eso que ha sido delegado al abandono, solo para servir en universidades como herramienta didáctica, y si acaso usado por veteranos del internet.
Solución, un mejor mundo para todos
Ya sabemos que es UML. Sabemos para que sirve y porque nadie lo usa. Ya sabemos los retos que UML debería resolver pero no lo hace. Les diré la verdad, la culpa es nuestra, no de UML. Nosotros los desarrolladores como arquitectos del mundo moderno tenemos la responsabilidad de decirle al mundo como lo estamos construyendo, y no estamos aprendiendo a hablar el lenguaje que habla el mundo. El lenguaje del negocio. No estamos haciendo mapas de las ciudades legibles, entendibles, y no estamos explicándoles a nuestros jefes casi como si fuesen bebés como funciona el mapa. El reto a resolver es como comunicar mejor el mensaje. UML no lo está logrando, pero tenemos el problema en la mano, hay que encararlo.
Como ya viste UML significa Unified Modeling Language el cual es un lenguaje estándar de modelado de sistemas orientados a objetos. Una forma de representar las relaciones que tendrá un elemento con otro es a través de las flechas en UML, y aquí tenemos varios tipos, estos son los más comunes: Esto significa que tendremos una manera gráfica de representar una situación, justo como hemos venido viendo. A continuación te voy a presentar los elementos que puedes utilizar para hacer estas representaciones. Las clases se representan así:
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-275.png?resize=1024%2C699&ssl=1)
En la parte superior se colocan los atributos o propiedades, y debajo las operaciones de la clase. Notarás que el primer caracter con el que empiezan es un símbolo. Este denotará la visibilidad del atributo o método, esto es un término que tiene que ver con Encapsulamiento y veremos más adelante a detalle. Estos son los niveles de visibilidad que puedes tener:
private+ public# protected~ default
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-274.png?resize=1024%2C473&ssl=1)
Asociación:
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-264.png?resize=272%2C62&ssl=1)
Como su nombre lo dice, notarás que cada vez que esté referenciada este tipo de flecha significará que ese elemento contiene al otro en su definición. La flecha apuntará hacia la dependencia.
Herencia
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-270.png?resize=519%2C145&ssl=1)
Siempre que veamos este tipo de flecha se estará expresando la herencia. La dirección de la flecha irá desde el hijo hasta el padre.
Agregación
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-265.png?resize=367%2C81&ssl=1)
Este se parece a la asociación en que un elemento dependerá del otro, pero en este caso será: Un elemento dependerá de muchos otros. Aquí tomamos como referencia la multiplicidad del elemento. Lo que comúnmente conocerías en Bases de Datos como Relaciones uno a muchos.
Composición
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-266.png?resize=376%2C79&ssl=1)
Este es similar al anterior solo que su relación es totalmente compenetrada de tal modo que conceptualmente una de estas clases no podría vivir si no existiera la otra. Con esto terminamos nuestro primer módulo. Vamos al siguiente para entender cómo podemos hacer un análisis y utilizar estos elementos para construir nuestro diagrama de clases de Uber.
Objetos
La POO tiene como fundamento la idea de agrupar en objetos a los métodos y los datos, y que estos datos deben ser accedidos y modificados por estos métodos propios, así, los otros objetos no podrían tener acceso directo a los datos de otros objetos. Esta interacción será llevada a cabo por mensajes entre objetos. Se podría decir que un lenguaje que permite definir los tipos de datos, las acciones sobre estos y que se puedan reusar, estaría cumpliendo la idea central de la POO. La diferencia entre estos lenguajes se puede marcar por los métodos de instanciación o creación de objetos que usan, por ejemplo, las clases, entre otros, los prototipos.
Esta forma de trabajar le permite a Java poder instanciar objetos desde las clases, crear nuevas clases en base a las clases preexistentes o clases-base y hasta crear bibliotecas con clases para ser reusadas y que eviten tener que escribir la solución a un problema ya resuelto.Una clase es una plantilla para construir múltiples instancias de objetos similares que pueden crearse. Gracias a la herencia, todos los objetos tendrán los mismos componentes que indica la clase (métodos y atributos), lo que servirá para construir aplicaciones que usen a los objetos, trabajando en conjunto, para resolver problemas complejos con calidad de software. En la POO se aplica el paradigma estructurado dentro de los métodos de las clases, mejorando el paradigma orientado a objetos.
Objeto
A través del uso de objetos podemos modelar entidades del mundo real
Un objeto es una unidad lógica compuesta por un conjunto de atributos (o propiedades) y métodos (o funciones) que se relacionan entre sí.
Un objeto está conformado por:
– Atributos que definen su estado. Los atributos son las características o propiedades que hacen a la definición del objeto. Decimos que un objeto manipula datos o información por medio de sus atributos.
– Métodos que definen su comportamiento. Un objeto tiene un comportamiento definido por un conjunto de acciones que puede realizar a las que llamaremos métodos.
Mensaje: Otra característica del Paradigma Orientado a Objetos es que los objetos pueden interactuar entre ellos a través de mensajes. De la presente estructura de comunicación entre objetos debemos comprender:
– El objeto emisor que envía una petición necesita conocer los métodos del objeto receptor.
– El objeto emisor no necesita conocer los detalles por los cuales el objeto receptor ejecuta la operación solicitada. Eso es responsabilidad del objeto receptor.
– La interpretación del mensaje está determinada por el objeto receptor. De esta forma distintos objetos receptores pueden interpretar un mismo mensaje de distinta forma.
La petición de un objeto emisor hacia otro objeto receptor contiene el tipo de información a devolver pero el receptor tiene la libertad de implementar el método que resuelva la petición como crea conveniente.
– Esta estructura de comunicación permite trabajar con mayor independencia entre los objetos.
– Los objetos tienen un conjunto de responsabilidades que cumplir ante las distintas solicitudes que pueden recibir de otros objetos.
– El protocolo de un objeto representa todas las posibilidades de comunicación que pueden realizarse con el objeto (métodos).
– La ejecución de un método puede cambiar el estado del objeto. Es decir, los valores de los atributos que definen el objeto pueden cambiar al ejecutar alguno de sus métodos.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-267.png?resize=502%2C250&ssl=1)
No te detengas, sigue avanzando
Aquí tienes un propósito para este 2024 que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera!
Python Practicando. Desde 0 hasta Desarrollador en Python
Aprende Python, donde iniciamos desde 0, sin conocimientos previos hasta desarrollar aplicaciones con mucha practica!
Calificación: 4,6 de 5 (20.833 calificaciones) 249.493 estudiantes Creado por Alvaro Chirou • 1.800.000+ Enrollments Worldwide, Walter Coto || +450,000 Estudiantes Español.
Lo que aprenderás
- Ejercitar la lógica de programación
- Comprender cómo la vida cotidiana puede ser fácilitada o simulada con código
- Aprender programación desde cero
- Usar Visual Studio Code como Editor de Código
- Conocer y aprender el lenguaje de programación Python
- Ser un programador desde cero, sin conocimiento en otro lenguaje o con algo previo
- Mejorar las habilidades de programación, mejorar procesos y fácilitar la comprensión de código
- Preparar un entorno dónde programar en Python
- Operaciones aritméticas y jerarquía de Python
- Manejo de cadenas en Python
- Digitar datos por teclado con Python
- Mostrar Datos por Pantalla al usuario en Python
- Operadores Relacionales de Python
- Operadores Lógicos de Python
- Condicionales en Python
- Estructuras de Datos: Listas, Tuplas y Diccionarios
- Iteraciones y bucles repetitivos de Python
- Segmentar Código y hacerlo más eficaz con las Funciones en Python
- Gestionar posibles errores que puedan dar tus programas
- Programación Orientada a Objetos
- HTML y CSS
- Selenium Web Driver con Python
- Ejercitar todo lo Aprendido con Ejercicios
Este curso incluye:
- 25,5 horas de vídeo bajo demanda
- 21 artículos
- 148 recursos descargables
- Acceso en dispositivos móviles y TV
- Certificado de finalización
Python es Hoy uno de los lenguajes más utilizados por Excelencia.
Esto se debe por su simpleza al momento de Desarrollar aplicaciones.
Por su capacidad de procesamiento a altas velocidades con grandes volúmenes de información.
Es un increíble lenguaje con el cual si no sabes programar, podrás aprender.
Y si ya sabes desarrollar, te aconsejo aprenderlo ya que en el mercado cada vez se solicitan más desarrolladores en Python.
Aspirar al trabajo que desean, o mejorar sus ingresos con un aumento de salario.
Python se utiliza para muchisimas cosas como:
- Machine Learning
- Data Science
- Inteligencia Artificial.
- Y mucho más!
En este curso te acompañare en el proceso por el cual aprenderás las bases del lenguaje, para luego determinar qué camino quieres seguir.
Te invito que me acompañes a conocer este Gran Lenguaje!
Aprende con nuestros más de 100 cursos que tenemos disponibles para vos
¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?
![](https://i0.wp.com/achirou.com/wp-content/uploads/2023/11/image.png?resize=549%2C67&ssl=1)
Sobre los autores
Álvaro Chirou
Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes serguirme en mis redes:
Laprovittera Carlos
Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:
¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/como-iniciarse-en-ciberseguridad-y-hacking-en-2024/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.