Enter your keyword

Responsive Advertisement

Pasos para el diseño de un programa orientado a objetos

By On julio 20, 2023


 Análisis de requisitos

    Extraer los requisitos de un producto de software es la primera etapa para crearlo. Mientras que los clientes piensan que ellos saben lo que el software tiene que hacer, se requiere de habilidad y experiencia en la ingeniería de software para reconocer requisitos incompletos, ambiguos o contradictorios. El resultado del análisis de requisitos con el cliente se plasma en el documento ERS, Especificación de Requerimientos del Sistema, cuya estructura puede venir definida por varios estándares, tales como CMM-I. Asimismo, se define un diagrama de Entidad/Relación, en el que se plasman las principales entidades que participarán en el desarrollo del software.

Diseño y arquitectura
    Se refiere a determinar como funcionará de forma general sin entrar en detalles. Consiste en incorporar consideraciones de la implementación tecnológica, como el hardware, la red, etc. Se definen los Casos de Uso para cubrir las funciones que realizará el sistema, y se transforman las entidades definidas en el análisis de requisitos en clases de diseño, obteniendo un modelo cercano a la programación orientada a objetos.

Programación
    Reducir un diseño a código puede ser la parte más obvia del trabajo de ingeniería de software, pero no es necesariamente la porción más larga. La complejidad y la duración de esta etapa está intimamente ligada al o a los lenguajes de programación utilizados.

Pruebas
    Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación. Una técnica de prueba es probar por separado cada módulo del software, y luego probarlo de forma integral,para así llegar al objetivo. Se considera una buena practica el que las pruebas sean efectuadas por alguien distinto al desarrollador que la programó, idealmente un área de pruebas; sin perjuicio de lo anterior el programador debe hacer sus propias pruebas.

Documentación
Todo lo concerniente a la documentación del propio desarrollo del software y de la gestión del proyecto, pasando por modelaciones (UML), diagramas, pruebas, manuales de usuario, manuales técnicos, etc; todo con el propósito de eventuales correcciones, usabilidad, mantenimiento futuro y ampliaciones al sistema.

Mantenimiento
Mantener y mejorar el software para enfrentar errores descubiertos y nuevos requisitos. Esto puede llevar más tiempo incluso que el desarrollo inicial del software. Alrededor de 2/3 de toda la ingeniería de software tiene que ver con dar mantenimiento. Una pequeña parte de este trabajo consiste en arreglar errores, o bugs. La mayor parte consiste en extender el sistema para hacer nuevas cosas. De manera similar, alrededor de 2/3 de toda la ingeniería civil, arquitectura y trabajo de construcción es dar mantenimiento.

Beneficios de Programación Orientada a Objetos

By On julio 20, 2023


  • Reutilización del código
  • Convierte cosas complejas en estructuras simples reproducibles.
  • Evita la duplicación de código.
  • Permite trabajar en equipo gracias al encapsulamiento ya que minimiza la posibilidad de duplicar funciones cuando varias personas trabajan sobre un mismo objeto al mismo tiempo.
  • Al estar la clase bien estructurada permite la corrección de errores en varios lugares del código.
  • Protege la información a través de la encapsulación, ya que solo se puede acceder a los datos del objeto a través de propiedades y métodos privados.
  • La abstracción nos permite construir sistemas más complejos y de una forma más sencilla y organizada.

Implementando POO en diferentes lenguajes

By On julio 20, 2023



    Implementar la Programación Orientada a Objetos (POO) en diferentes lenguajes implica utilizar las características y sintaxis específicas de cada uno. A continuación, te indicamos una breve descripción de cómo realizarlo en algunos lenguajes populares y cómo aprovechar sus ventajas para construir aplicaciones sólidas y flexibles:

  1. Java:
    • Define clases utilizando la palabra clave «class» y especifica atributos y métodos dentro de ellas.
    • Utiliza la herencia con la palabra clave «extends» para crear subclases que hereden características de una clase base.
    • Aprovecha las interfaces para definir contratos que las clases deben implementar.
    • Aprovecha el polimorfismo para tratar objetos de diferentes clases de manera uniforme, utilizando métodos con la misma firma en diferentes clases.
    • Utiliza la encapsulación para ocultar los detalles internos de los objetos y proporcionar una interfaz pública para interactuar con ellos.
  2. C++:
    • Define clases utilizando la palabra clave «class» y especifica atributos y métodos dentro de ellas.
    • Utiliza la herencia con los operadores de acceso «public», «private» y «protected» para establecer la visibilidad de los miembros heredados.
    • Aprovecha las funciones virtuales y la herencia múltiple para lograr polimorfismo.
    • Utiliza la encapsulación con los modificadores de acceso «public», «private» y «protected» para controlar el acceso a los miembros de una clase.
  3. Python:
    • Define clases utilizando la palabra clave «class» y especifica atributos y métodos dentro de ellas.
    • Aprovecha la herencia utilizando la clase base entre paréntesis al definir una clase.
    • Utiliza la herencia múltiple y el polimorfismo de manera natural, ya que Python lo permite.
    • Aprovecha las propiedades y los decoradores para implementar la encapsulación y controlar el acceso a los atributos de una clase.
  4. C#:
    • Define clases utilizando la palabra clave «class» y especifica atributos y métodos dentro de ellas.
    • Utiliza la herencia con los operadores de acceso «public» y «protected» para establecer la visibilidad de los miembros heredados.
    • Aprovecha las interfaces para definir contratos que las clases deben implementar.
    • Utiliza el polimorfismo utilizando la palabra clave «virtual» para los métodos en la clase base y «override» en las subclases.
    • Utiliza los modificadores de acceso «public», «private» y «protected» para lograr encapsulación y controlar el acceso a los miembros de una clase.

Al aprovechar las ventajas de la POO en estos lenguajes, puedes construir aplicaciones sólidas y flexibles:

  • Reutilización de código: Puedes crear y reutilizar clases y objetos en diferentes partes de tu aplicación, evitando la duplicación de código y mejorando la eficiencia.
  • Modularidad: Al dividir tu aplicación en módulos o clases independientes, puedes mejorar la organización y facilitar el mantenimiento y la actualización del código.
  • Flexibilidad y escalabilidad: La POO te permite extender y modificar fácilmente el comportamiento de tus objetos a medida que evolucionan los requisitos de tu aplicación.
  • Mantenibilidad: La estructura y la organización de la POO hacen que el código sea

Características principales del diseño orientado a objetos

By On julio 20, 2023



 Podemos señalar las siguientes:

  • Los objetos vienen a ser en sí abstracciones del mundo real o entidades del sistema que están administradas entre ellas mismas.
  • Cada objeto es independiente y estos encapsulan propiamente el estado, al igual que la representación de información.
  • La funcionalidad del sistema es expresada en términos de servicios de los objetos propiamente.
  • La comunicación de los objetos se lleva a cabo mediante el paso de parámetros y en sí, las áreas de datos compartidas son eliminadas.
  • Es posible que los objetos estén distribuidos y que puedan ejecutarse de manera secuencial o también en paralelo.

Diseño de software y el DOO

By On julio 20, 2023

    


     Podemos definir el diseño de software como una acción que está dirigida a la construcción de soluciones que vayan directamente a satisfacer los requerimientos del cliente. Pero para que eso ocurra, deben ser cumplidas varias etapas en el proceso de este diseño de software, que son:

  • El entendimiento del problema.
  • La identificación de soluciones que pueden ser una o más.
  • La descripción de las abstracciones de la solución en sí.
  • La repetición del proceso para cada una de las abstracciones que han sido identificadas, esto hasta el momento en el que el diseño se encuentre ya expresado en términos sencillos.
  • Los diseños deben ser modelados como una gráfica dirigida, la cual debe estar hecha de entidades con distintos atributos que participan en relaciones.

    Mientras tanto el diseño orientado a objetos (DOO) crea en sí una representación del problema que está en el mundo real, con la finalidad de hacerlo corresponder con lo que es el ámbito de la solución, lo que viene a ser el software.

    Se diferencia de otros métodos de diseño porque este produce uno que interconecta objetos de datos y operaciones de procesamiento para dichos objetos, modularizando en sí tanto la información como el procesamiento, en lugar de aislarlo.

Elementos básicos de la Programación Orientada a Objetos.

By On julio 19, 2023

   



 Un paradigma es una teoría que suministra la base y el modelo para resolver problemas y la POO se compone de los siguientes 4 elementos:

Clases: Las clases pueden ser definidas como un molde que contendrá todas las características y acciones con las cuales podemos construir N cantidad de objetos.

Propiedades: Las propiedades son las características de una clase, tomando como ejemplo la clase humanos, las propiedades podrían ser: nombre, el género, la altura, color de cabello, color de piel, etc.

Métodos: Los métodos son las acciones que una clase puede realizar, siguiendo el mismo ejemplo anterior, estas podrían ser: caminar, comer, dormir, soñar, respirar, nadar, etc.

Objetos: Son aquellos que tienen propiedades y comportamientos, estos pueden ser físicos o conceptuales.

Técnicamente, los objetos son instancias de una clase, vendría siendo cuando ya le colocamos un “nombre” a nuestras clases (moldes). Por ejemplo: El objeto “Arnell”, quien es una instancia de la clase humanos.


Principios/pilares de la orientación a objetos.

By On julio 19, 2023

 


Principios/pilares de la orientación a objetos

Existen muchos principios que se deben entender para poder ser buenos desarrolladores en modelos orientados a objetos, sin embargo, los fundamentales son:

La identidad

Es la propiedad de un objeto que permite que este sea diferente de los demás. En un sistema orientado a objeto, cada objeto tiene una identidad distinta. Esto permite trabajar con un objeto determinado sin que exista la posibilidad de confundirlo con otro y admite que puedan existir varios objetos de la misma clase al mismo tiempo. Se tiende a confundir identidad de un objeto con estado. El estado es el conjunto de valores que posee el objeto en su interior. Puede pasar que dos objetos tengan el mismo estado, pero los mismos siguen siendo totalmente identificables.

La abstracción

Es el mecanismo que permite enfocarse en los aspectos importantes de un objeto y lo que marca su diferencia con otros, obviando aquellos que son irrelevantes.

Encapsulamiento

Permite la ocultación de la información al mundo exterior y, así, asegurar que el contenido de un objeto se pueda ocultar, dejando ver solo lo que se necesita hacer público, esto se logra gracias a diferentes niveles de visibilidad o accesibilidad, estos niveles de visibilidad son:

·         Privado: visibilidad para la propia clase

·         Protegido: visibilidad para las clases derivadas

·         Público: visibilidad para todas las clases La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que se tendrá a los objetos como cajas negras, donde solo se conoce el comportamiento, pero no los detalles internos y esto es conveniente porque interesa conocer qué se hace, pero no será necesario saber cómo se hace, además otra ventaja es proteger al objeto de usos indebidos o inapropiados.

 

Modularidad

Se encarga de descomponer algo grande y complejo en partes más discretas y sencillas. La diferencia que tiene la modularidad con la abstracción es que, esta se encarga de gestionar su manejabilidad con respecto a los aspectos físicos o de implementación, mientras que la abstracción trata de reducir la complejidad lógica del problema.

Concurrencia

Es la propiedad que distingue un objeto activo de uno que no lo es. Esto permite a diferentes objetos actuar al mismo tiempo, ya que cada uno de ellos tiene su propia autonomía.

Persistencia

Es la propiedad que tiene un objeto de existir en el tiempo y en el espacio. El objeto existe hasta que no sea más necesitado y el espacio que ocupa es reutilizado. Este se implementa mediante los procesos de construcción y destrucción de los objetos definidos como parte del comportamiento de una clase.

Polimorfismo

Es una característica que reduce enormemente el esfuerzo requerido para extender el diseño de un sistema orientado a objeto existente. Para entender el polimorfismo, considerar una aplicación convencional que debe procesar tres tipos diferentes de gráficas estadísticas: dispersión, desviación estándar y el coeficiente de excesos. Una vez calculados los valores se procesa una visualización de los mismos.
Para lograrlo en una aplicación convencional, sería necesario desarrollar módulos de visualización para cada tipo de gráfica. Para resolver esto en un sistema OO, todas las gráficas se convierten en una subclase llamada gráfica estadística.
Usando un concepto llamado sobrecargar (se refiere a la posibilidad de tener dos o más funciones con el mismo nombre, pero funcionalidad diferente), cada subclase define una operación en particular que se ejecutará dependiendo del mensaje que reciba. En resumen, el polimorfismo se refiriere a la posibilidad de definir múltiples clases con funcionalidades diferentes, pero con métodos o propiedades denominados de forma idéntica.

Jerarquía

Permite la organización de los elementos de acuerdo a su tipo de objeto, así como reconocer las similitudes y diferencias entre los distintos objetos que se tengan. •

Herencia

Es uno de los factores claves y diferenciadores entre un sistema tradicional y/o estructurado y los orientados a objetos. Una subclase B hereda todos los atributos y operaciones asociadas con su superclase A. Esto significa que todas las estructuras de datos y algoritmos originalmente diseñados e implementados para A están disponibles de inmediato para B. La reutilización se logra directamente.
La herencia es una forma de reutilización de código. Cualquier cambio a los atributos u operaciones contenidos dentro de una superclase se hereda inmediatamente para todas las subclases. Por tanto, la jerarquía de clase se convierte en un mecanismo mediante el cual los cambios (en niveles superiores) pueden propagarse inmediatamente a través de un sistema. Es importante observar que en cada nivel de la jerarquía de clase pueden agregarse nuevos atributos y operaciones a las que se heredaron de niveles superiores en la jerarquía. De hecho, siempre que se crea una nueva clase, tendrá algunas opciones:

  • La clase puede diseñarse y construirse desde cero, es decir, no se usa herencia.
  • La jerarquía de clase puede revisarse para determinar si una clase superior en la jerarquía contiene más de los atributos y operaciones requeridos. La nueva clase hereda de la clase superior y, entonces, pueden agregarse adiciones, según se requiera.
  • La jerarquía de clase puede reestructurarse de modo que los atributos y operaciones requeridos pueden heredarse en la nueva clase.
  • Las características de una clase existente pueden ser excesivas y diferentes versiones de atributos u operaciones se implementan para la nueva clase.

 


Popular