miércoles, 2 de julio de 2014

Patrones de Diseño de Software

Los patrones de diseño son el esqueleto de las soluciones a problemas comunes en el desarrollo de software.Es decir, que brindan una solución ya probada y documentada a problemas de desarrollo de software que están sujetos a contextos similares. Debemos tener presente los siguientes elementos de un patrón: su nombre, el problema (cuando aplicar un patrón), la solución (descripción abstracta del problema) y las consecuencias (costos y beneficios).

Como se usan los patrones de diseño?
Usando conceptos básicos de POO: Abstracción, encapsulación, polimorfismo, herencia.
 Encapsula lo que varia, Favorece la composición sobre la herencia. Programa las interfaces, no la implementación 
Clasificación de Patrones

  • „ Patrones arquitecturales
  1. „ Expresan un paradigma fundamental para estructurar un sistema software
  2. „ Proporcionan un conjunto de subsistemas predefinidos, con reglas y guías para organizar las relaciones entre ellos
  • „ Patrones de diseño
  1. „ Compuestos de varias unidades arquitecturales más pequeñas
  2. „ Describen el esquema básico para estructurar subsistemas y componentes
  • „ Patrones elementales (idioms)
  1. „ Específicos de un lenguaje de programación
  2. Describen cómo implementar componentes particulares de un patrón



Al diseñar software no debemos "reinventar la rueda", hay mucho trabajo ya realizado, testeado y aceptado en entornos similares, de la misma manera en que nosotros mismos podemos desarrollar algoritmos, los cuales nos serán útiles en casos posteriores si sabemos como encapsular nuestra información.

Bibliografía recomendada:
http://www.fdi.ucm.es/profesor/jpavon/poo/2.14pdoo.pdf




miércoles, 25 de junio de 2014

Diagrama de Clases

Un diagrama de clases sirve para visualizar las relaciones entre las clases que involucran el sistema, las cuales pueden ser asociativas, de herencia, de uso y de contención.

Un diagrama de clase incluye los siguientes elementos:
  • Clase: atributos, métodos y visibilidad.
  • Relaciones: Herencia, Composición, Agregación, Asociación y Uso.
Clase

Se encapsula toda la información de un objeto (un objeto es una instancia de una clase)
Atributos y Métodos:
  • Atributos:
    Los atributos de una Clase pueden ser de tres tipos, de acuerdo a su visibilidad:
    • public (+,): Indica que el atributo será visible tanto dentro como fuera de la clase, es decir, es accsesible desde todos lados.
    • private (-,): Indica que el atributo sólo será accesible desde dentro de la clase (sólo sus métodos lo pueden accesar).
    • protected (#,): Indica que el atributo no será accesible desde fuera de la clase, pero si podrá ser accesado por métodos de la clase además de las subclases que se deriven (ver herencia).
  • Métodos:
    Los métodos u operaciones de una clase son la forma en como ésta interactúa con su entorno, éstos pueden tener las características:
    • public (+,): Indica que el método será visible tanto dentro como fuera de la clase, es decir, es accsesible desde todos lados.
    • private (-,): Indica que el método sólo será accesible desde dentro de la clase (sólo otros métodos de la clase lo pueden accesar).
    • protected (#,): Indica que el método no será accesible desde fuera de la clase, pero si podrá ser accesado por métodos de la clase además de métodos de las subclases que se deriven (ver herencia).
Relaciones entre Clases:
En UML, la cardinalidad de las relaciones indica el grado y nivel de dependencia, se anotan en cada extremo de la relación y éstas pueden ser:
  • uno o muchos: 1..* (1..n)
  • 0 o muchos: 0..* (0..n)
  • número fijo: m (m denota el número).

Herencia (Especialización/Generalización)
Indica que una subclase hereda los métodos y atributos especificados por una Super Clase, por ende la Subclase además de poseer sus propios métodos y atributos, poseerá las características y atributos visibles de la Super Clase (public y protected), ejemplo:
Agregación
Es un tipo de relación dinámica, en donde el tiempo de vida del objeto incluido es independiente del que lo incluye
Composición:
 Es un tipo de relación estática, en donde el tiempo de vida del objeto incluido esta condicionado por el tiempo de vida del que lo incluye. 
Asociación
La relación entre clases conocida como Asociación, permite asociar objetos que colaboran entre si. Cabe destacar que no es una relación fuerte, es decir, el tiempo de vida de un objeto no depende del otro.

Dependencia o Instanciación (uso)
Representa un tipo de relación muy particular, en la que una clase es instanciada (su instanciación es dependiente de otro objeto/clase). Se denota por una flecha punteada.


miércoles, 11 de junio de 2014

Desarollo ágil de software


El desarrollo ágil de software es un paradigma de las metodologías de desarrollo basado en procesos ágiles. Los procesos ágiles de desarrollo de software, intenta evitar la ambigüedad en el uso de las metodologías tradicionales. El objetivo del desarrollo ágil es esbozar los valores y principios que deben permitir a los equipos el desarrollo de software rápidamente y respondiendo a los cambios que puedan surgir a lo largo del proyecto.

Manifiesto ágil

  • Estamos poniendo al descubierto mejores métodos para desarrollar software, haciéndolo y ayudando a otros a que lo hagan. Con este trabajo hemos llegado a valorar:
  • A los individuos y su interacción, por encima de los procesos y las herramientas.
  • El software y su interacción, por encima de los procesos y las herramientas.
  • El software que funciona, por encima de la documentación exhaustiva.
  • La colaboración con el cliente, por encima de la negociación contractual.
  • La respuesta al cambio, por encima del seguimiento de un plan.
  • Aunque hay valor en los elementos de la derecha, valoramos más los de la izquierda.


http://www.dosideas.com/wiki/Desarrollo_Agil_De_Software


miércoles, 4 de junio de 2014

Administración de proyectos


Gestión de proyectos

La gestión de proyectos implica la planificación, supervisión y control del personal, del proceso y de los eventos que ocurren mientras evoluciona  el software desde la fase preliminar a la implementación operacional.













Planificación

La construcción de software es una actividad bastante compleja, en especial si participa mucha gente, trabajando durante un periodo de tiempo relativamente largo. Esta es la razón por la cual los proyectos de software necesitan ser gestionados y planificados.

La siguiente lista, refleja las actividades que se derivan de la planificación:


  • Fijar los objetivos y metas
  • Desarrollar estrategias
  • Desarrollar políticas
  • Anticipar futuras situaciones
  • Conducir un establecimiento de riesgos
  • Determinar posibles cursos de acción
  • Tomar decisiones de planificación
  • Fijar procedimientos y reglas
  • Desarrollar los planes del proyecto
  • Preparar presupuestos
  • Documentar los planes del proyecto.

Observación

Como ya se ha mencionado, la observación en la fase de prueba del proyecto es de vital importancia, ya que durante esta etapa se podrán ver aquellas situaciones y eventos inesperados dentro de la planificación. Como ejemplo tenemos:

Un sistema que requiere entradas de texto con letras muy pequeñas, un usuario con manos grandes y guantes industriales.

El problema que se presenta es la poca adaptabilidad que se tendrá en el sistema táctil con el uso de los guantes, ya que el pulso que se necesita para activar el sistema no será el adecuado y obviamente el tamaño, tampoco. La solución a implementar es el uso de una pluma especial, teclas más grandes y una pantalla más grandes. 

De esta manera, la observación del proyecto nos hará comprender y aprender muchas cosas de nuestro propio software, las cuales pasan desapercibidas pesé a la planificación inicial.




martes, 27 de mayo de 2014

Ingeniería de software

Ingeniería de Software.
Es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas de software. La I.S integra: métodos, herramientas y procesos para el desarrollo del software bajo un enfoque de calidad.

Ciclo de vida

Las actividades típicas del ciclo de vida son:

1.-Estudio de factibilidad.
2.-Análisis (de requerimientos).
3.-Diseño.
     3.1-Creación de prototipos.
     3.2-Implementación.
4.-Validación y prueba.
5.-Operación y mantenimiento.



Administración de proyectos

La construcción de software es una empresa compleja en especial cuando participa mucha gente en un periodo relativamente "largo". Por esto los proyectos necesitan ser gestionados.

Actividades de gestión.


  1. Planificación: Determinar un curso de acción para alcanzar los objetivos.
  2. Organización (Jerarquía): Arreglo de relaciones entre unidades de trabajo y asignación de responsabilidad y autoridad para obtener los objetivos.
  3. Staffing (Dotación de personal): Selección y entrenamiento de personas.
  4. Dirección (Reglas): Creación de atmósfera adecuada para el trabajo, código, reglamento, etc.
  5. Control: Establecimiento, medición y evaluación del desempeño de las actividades a través de los objetivos planteados.



Existe un extenso y laborioso trabajo previo al desarrollo de cualquier software. Primordialmente, se debe realizar un plan de acuerdo a los requerimientos que sean solicitados, también se deberá asignar un equipo de trabajo el cual deberá estar comprometido con el proyecto, se debe crear un plan de prevención a situaciones inesperadas, considerar el enfoque del proyecto, etc. Como resultado de los pasos previos se obtendrá un proyecto solido, vanguardista, con el fin de ser lo que el cliente necesita.


martes, 20 de mayo de 2014

Crisis del software

El término "crisis del software"expresa la dificultad del desarrollo de software libre de errores y fácil de comprender. Algunas de las causas son, la complejidad que conlleva el programar, los altos costos para empresas y negocios pequeños, la poca flexibilidad en el software (la pérdida de calidad y/o rendimiento al actualizar o completar la primer versión).


Además, al tener una mala planeación del proyecto --------> EL CLIENTE NO QUEDA SATISFECHO.
Y esto es debido a:
* Requisitos no atendidos
*Requisitos no implementados
*Requisitos mal interpretados
Lo cual nos llevará inmediatamente a grandes perdidas económicas y de futuros clientes ya que la calidad del software no es la que debería ser y se cuestionara sobre la confiabilidad de la empresa y sus productos. Aunque claro, el tener una optima planeación del futuro proyecto no garantizará en un 100% el software perfecto ya que siempre habrán escenarios que no fueron contemplados y/o fallas inesperadas, sin embargo, el tener una optima planeación logrará mejorar la calidad del producto final.