lunes, 22 de noviembre de 2010

Smalltalk

Laboratorio de Lenguajes de Programación

Smalltalk es un lenguaje de programación que permite realizar diferentes tareas de computación mediante la interacción con un entorno de objetos virtuales. Smalltalk es como un mundo virtual donde viven objetos que se comunican mediante el envío de mensajes.
 
Un sistema Smalltalk está compuesto por: 
  • Máquina virtual
  • Imagen virtual que contiene todos los objetos del sistema
  • Lenguaje de programación (Smalltalk)
  • Biblioteca de Objetos reusables
  • Opcionalmente un entorno de desarrollo que funciona como un sistema en tiempo de ejecución.
 
Un programa Smalltalk consiste solamente de objetos, un concepto que se utiliza universalmente dentro de todo sistema Smalltalk. Todo, desde un número natural como el 4 hasta un servidor web es considerado un objeto. Los objetos Smalltalk tienen ciertas características:
  • Tienen una memoria propia.
  • Poseen capacidad para comunicarse con otros objetos.
  • Poseen la capacidad de heredar características de objetos ancestros.
  • Tienen capacidad de procesamiento.
 
Los objetos se comunican entre sí mediante el envío de mensajes. Un objeto puede hacer muchas operaciones. 
 
Las definiciones de estas operaciones en los objetos son llamadas métodos. Un método define la reacción de un objeto cuando recibe un mensaje que es dirigido a ese método. La resolución de un mensaje a un método es dinámica. La colección entera de métodos de un objeto se llamada protocolo de mensajes o interfaz de mensajes del objeto. 

Características
 
Smalltalk se considera como el primero de los lenguajes orientados a objetos (OOP), aunque en realidad el primero en implementar programación orientada a objetos fue Simula. En Smalltalk todo es un objeto, incluidos los números reales o el propio entorno Smalltalk.
 
 Como lenguaje tiene las siguientes características: 
  • Orientación a Objetos Pura
  • Interacción entre objetos mediante envío de mensajes
  • Herencia simple y con raíz común
  • Reflexión computacional completa
  • Recolección de basura
  • Compilación en tiempo de ejecución o Interpretado
  • Diversas Implementaciones

 

C++

Lenguajes de Programación - PUNTOS EXTRA
 
Hola compañeros, les hablaré sobre el lenguaje C++
C++ es un lenguaje de programación desarrollado a mediación de los años 1980, fue creado por Bjarne Stroustrup. Se desarrolló con el fin de extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos.

Más adelante se añadieron facilidades de programación genérica, que se agregó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se dice que el C++ es un lenguaje de programación multiparadigma.

En estos tiempos existe un estándar, denominado ISO C++, al cual se le han agregado la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, como ROOT.

Una característica particular del C++ es que tiene la posibilidad de volver a definir los operadores (sobrecarga de operadores), y poder crear nuevos tipos que se comporten como tipos fundamentales.

El nombre del lenguaje C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje se utilizó por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C.
Constructores

Son métodos especiales que se ejecutan automáticamente al crear un objeto de la clase. En la declaración de los constructores no se especifica que tipo de dato devuelverán, y poseen el mismo nombre que la clase a la que pertenecen. Al igual que otros métodos, puede existir varios constructores sobrecargados, aunque no pueden existir constructores virtuales.

Una característica a la hora de implementar un constructor, es que después de la declaración de los parámetros, se encuentra lo que se llama lista de inicializadores. Su objetivo es llamar a los constructores de los atributos que conforman el objeto a construir.

Una cosa importante es que no es necesario declarar un constructor al igual que un destructor, pues el compilador lo puede hacer, aunque no es la mejor forma de programar.

Existen diferentes constructores en C++:

Constructor predeterminado. Es el que no recibe ningún parámetro en la función. Si no se define ningún constructor, el sistema proporcionará uno predeterminado. Es necesario para la construcción de estructuras y contenedores de la STL.

Constructor de copia. Es el constructor que recibe un objeto de la misma clase, y realiza una copia de los atributos del mismo. Igual que el predeterminado, si no se define el sistema proporciona uno.

Constructor de conversión. Es el constructor que recibe solo un parámetro: un objeto o variable de otro tipo diferente que el suyo. O sea, convierte un objeto de un tipo determinado a otro objeto del tipo que estamos generando.


Esto es todo, saludos:)








JAVA

Lenguajes de programación - PUNTOS EXTRA

Bueno, Java es un lenguaje de programación orientado a objetos, fue desarrollado por Sun Microsystems a principios de 1990. El lenguaje tiene mucho parecido a la sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de nivel bajo, que pueden causar muchos errores, como la manipulación directa de punteros o memoria.

Las aplicaciones Java están típicamente compiladas en un bytecode (código intermedio más abstracto que el lenguaje máquina), aunque la compilación en código máquina también puede ser posible. En tiempo de ejecución, el bytecode es generalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también puede pasar.

Características de JAVA.
Java además de ser un lenguaje orientado a objetos tiene características muy importantes:

Es un lenguaje que es compilado, generando archivos de clases compilados, estas clases compiladas en realidad son interpretadas por la máquina virtual de java. Siendo la máquina virtual de java la que mantiene el control sobre las clases que se estén ejecutando.

Es un lenguaje seguro, la máquina virtual al ejecutar el código java realiza comprobaciones de seguridad, aparte este lenguaje no tiene características inseguras, como por ejemplo los punteros.

Gracias al API de java podemos ampliar el lenguaje para que sea capaz de, por ejemplo, comunicarse con equipos mediante red, acceder a bases de datos, crear páginas HTML dinámicas, crear aplicaciones visuales, entre otras cosas.

Para trabajar con java es necesario utilizar un software que permita desarrollar en java. Existen varias alternativas comerciales en el mercado como JBuilder, Visual Age, Visual Café, etc. y un conjunto de herramientas shareware, e incluso freeware, que permiten trabajar con java.
Applet Java

Un applet Java es un programa escrito en el lenguaje de programación Java. Los applets de Java pueden ejecutarse en un navegador web utilizando la Java Virtual Machine (JVM), o en el AppletViewer de Sun.

Entre sus características se puede mencionar un esquema de seguridad que permite que los applets que se ejecutan en el equipo no tengan acceso a partes sensibles, a excepción que nosotros mismos le demos permisos necesarios en el sistema. Uno de los objetivos de los Java applets es proporcionar una forma fácil de ejecutar aplicaciones desde el navegador web.

En Java un applet es un programa que puede incluirse en un documento HTML, o sea en una página web. Cuando un navegador carga una página web que contiene un Applet, el applet se descarga en el navegador web y empieza a ejecutarse. Esto nos permite crear programas que cualquier usuario puede ejecutar con tan solo cargar la página Web en su navegador.

Esto es todo, saludos :)





Programación multiparadigma

Laboratorio de lenguajes de programación

Un lenguaje de programación multiparadigma es el  que soporta más de un paradigma de programación. Permiten crear programas usando más de un estilo de programación.

El objetivo de dichos lenguajes es permitir a los programadores elegir el mejor paradigma para cada trabajo, sabiendo que ninguno resuelve todos los problemas de la forma más fácil y eficiente posible.

Lenguajes de programación como C++, Genie, Delphi, Visual Basic o PHP, combinan el paradigma imperativo con orientación a objetos. Incluso existen lenguajes multiparadigma que permiten la mezcla de forma natural, como el lenguaje Oz, el cual tiene subconjuntos  y otras características propias de lenguajes de programación funcional y de orientación a objetos. Otro ejemplo son los lenguajes como Scheme (paradigma funcional) o Prolog (paradigma lógico), los cuales tienen estructuras repetitivas,  del paradigma imperativo.


Paradigmas de programación
  • En la nube
  • Imperativo
  • Lógico
  • Funcional
  • Declarativo
  • Estructurado
  • Dirigido por eventos
  • Modular
  • Orientado a aspectos
  • Orientado a objetos
  • Con restricciones
  • A nivel funcional 
  • A nivel de valores
Bueno esto  es todo, saludos:) 

Patrones de diseño

Lenguajes de Programación - PUNTOS EXTRA

Hola compañeros, en esta entrada les hablaré sobre los patrones de diseño. 

Los Patrones de diseño son normalmente conocidos como "Design Patterns". Y se preguntarán ¿Qué son los patrones de diseño? Bueno los patrones de diseño son simples soluciones elegantes a problemas específicos y comunes del diseño orientado a objetos. Son soluciones que se basan en la experiencia y que se ha demostrado que funcionan correctamente.

Es evidente que a lo largo de la variedad de diseños de aplicaciones existen problemas que se repiten o que son análogos, o sea, que responden a un cierto patrón. Sería deseable tener una colección de dichos patrones con las soluciones más óptimas para cada caso. Les hablaré de los más comunes y conocidos.

Los patrones de diseño no son fáciles de comprender, pero cuando entiendes su funcionamiento, los diseños serán mucho más flexibles, modulares y reutilizables. Han ido revolucionado el diseño orientado a objetos.  

Les hablaré de los patrones de diseño a objetos más comunes publicados en el libro "Design Patterns", escrito por los que normalmente se conoce como GoF (gang of four, "+pandilla de los cuatro).

Patrones de creación



Abstract Factory. Nos proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar sus clases concretas.

Builder. Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de construcción pueda crear diferentes representaciones.

Factory Method. Define la interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación de objetos.

Prototype. Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo.

Singleton. Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella.


Patrones estructurales



Adapter. Convierte la interfaz de una clase en otra diferente que es la que esperan los clientes.

Bridge. Separa una abstracción de su implementación, de manera que las dos puedan variar de forma independiente.

Composite. Combina objetos en estructuras de árbol para representar jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.

Decorator. Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender la funcionalidad.

Facade. Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar.

Flyweight. Usa el compartimiento para permitir un gran número de objetos de grano fino de forma eficiente.

Proxy. Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste.


Patrones de comportamiento


Chain of Responsibility. Evita unic el emisor de una petición a su receptor, al dar a más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto.

Command. Envuel una petición en un objeto, permitiendo así hacer algo de tal forma que mediante la configuracion de ciertos parametros modifiques el resultado mediante las distintas peticiones, llevar un registro de las peticiones y poder deshacer la operaciones.

Interpreter. Define una representación de su gramática junto con un intérprete que usa dicha representación para interpretar las sentencias del lenguaje.

Iterator. Proporciona una forma de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna.

Mediator. Define un objeto que envuelve cómo interactúan un conjunto de objetos. Difine un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente.

Memento. Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste puede volver a dicho estado más tarde.

Observer. Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos.

State. Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno.

Strategy. Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan.

Template Method. Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura.

Visitor. Representa una operación sobre los elementos de una estructura de objetos. Permite definir una nueva operación sin cambiar las clases de los elementos sobre los que opera.




Lenguaje OZ

Laboratorio de lenguajes de programación

Hola a todos, ahora les hablaré acerca del lenguaje de programación Oz.

Oz es un lenguaje de programación con paradigmas diferentes. Fue desarrolldo en el laboratorio de Programación en la Universidad de Saarland por Gert Smolka y sus estudiantes a principios de 1990.Oz ha sido contstantemente desarrollado por un grupo internacional, el Consorcio Mozart, que estuvo compuesto originalmente por la Universidad de Saarland, el Instituto Sueco de Ciencias de la Computación, y la Universidad Católica de Louvain. En 2005, la responsabilidad de gestionar el desarrollo de Mozart fue transferida a un grupo base, el Tablero Mozart, con el propósito expreso de abrir el desarrollo de Mozart a una comunidad mayor.


Oz cuenta con una implementación de gran calidad, el Sistema de Programación Mozart, que está bajo una licencia de Código Abierto por el Consorcio Mozart. Mozart se puede tener en diferentes plataformas como Unix, FreeBSD, Linux, Microsoft Windows, y Mac OS X.

No encontre mucha información de esto, espero que les haya servido como quiera saludos:)

Aquí les dejo un tutorial del lenguaje Oz.

Tutorial de Oz

Lenguaje de Programación Go.

Laboratorio de lenguajes de programación

Hola a todos, en esta entrada les habaré sobre el lenguaje de programación de Google, lenguaje Go.

Es un lenguaje de programación compilado y concurrente que esta basado en la sitaxis de C. Fue desarrollado por Google y sus diseñadores Robert Griesemer, Rob Pike y Ken Thompson. En este momento se encuentra disponible para GNU/Linux y Mac OS X.

El desarrollador del lenguaje de programación Go!, pidio que le cambiaran el nombre al lenguaje de Goiogle para evitar que hubiera confusiones con su lenguaje.

Ahora veamos el famoso Holamundo en lenguaje Go, se darán cuenta que su sintaxis es muy parecida a la del lenguaje C++.

package main

import "fmt"
func main()
{
fmt.Printf("Hola, mundo\n")
}

Los comentarios se hacen de la misma forma que en C, /* ..... */ y con //.

Go es un lenguaje de código abierto, aún sigue en desarrollo. Go es el lenguaje con el que Google entra en el terreno de los lenguajes de programación.


Este proyecto combina el rendimiento y prestaciones de seguridad propios de un lenguaje compilado como C++ con la velocidad de un lenguaje dinámico como Python.

El proyecto Go, desarrollado inicialmente para poder escribir de forma optimizada el software que Google utiliza internamente, esta siendo desarrollado, entre otras razones, responder a las necesidades de programadores que se ponen contra la complejidad de sistemas como Java y C++.

La sintaxis del lenguaje de programación Go es muy parecida a la de C. Hasta la fecha, tiene capacidad para compilar ejecutables de las plataformas x86, x86-64 y ARM. La licencia de este lenguaje como ya dije es libre y de tipo BSD.

A pesar de que es un lenguaje experimental cuyo desarrollo se espera que evolucionando, las características de este lenguaje hacen pensar a Google que Go puede llegar a ser adoptado muy facil y rápidamente por los programadores en la creación de las primeras aplicaciones.

Esto es todo compañeros, espero que les sirva saludos:)

domingo, 21 de noviembre de 2010

Herramientas de UML

Lenguajes de Programación - PUNTOS EXTRA

Hola a todos, en esta entrada les hablaré de las herramientas de UML

ARGOUML

ArgoUML es una aplicación de diagramas de UML escrita en lenguaje Java y publicada con Licencia BSD. Como que es una aplicación en Java, está disponible en cualquier plataforma soportada por Java.

Magazine de Desarrollo de Software otorga premios anuales a herramientas de desarrollo de software populares en diferentes categorías. En 2003 ArgoUML fue una de las finalistas en la categoría "Design and Analysis Tools". ArgoUML recibió un premio como revelación.

Características
  • Tiene características de extensibilidad mejoradas
  • Diagramas de Secuencia
  • Compatibilidad AndroMDA
  • Mejor calidad 
  • Casi todas las funciones soportan la selección múltiple de los elementos del modelo
  • Se puede arrastrar y soltar desde el árbol de exploración al diagrama y dentro del árbol de exploración
Otras características:
  • Interfaz de módulos Extensible
  • Soporte de Internacionalización para lenguajes: Inglés, Alemán, Francés, Español y Ruso.
  • Restricciones OCL para Clases
  • Soporte para el lenguaje de generación de Código: Java, PHP, Python, C++ y C#
  • Generación de ficheros PNG, GIF, JPG, SVG, EPS desde diagramas
  • Pueden tener comentarios en múltiples elementos
Esta herramienta también tiene ciertas desventajas:

  • No existe botón para deshacer.
  • Los modelos a veces no pueden volverse a abrir.
  • No existen llamadas-reflexivas en los diagramas de secuencia.
  • Debes seleccionar una clase para crear un diagrama de secuencia.
  • Cuando mueves una clase las relaciones no se mueven de forma correcta.
  • Cuando seleccionas un área no se seleccionan las clases de relación.

CODEGAR ECO
CodeGear ECO (Enterprise Core Object) es una Model Driven Architecture desarrollado por la compañía CodeGear. Está diseñado para incrementar la producción de los desarrolladores dándoles las siguientes facilidades: 
  • Mapeo Relacional-Objeto para persistencia de objetos del dominio.
  • UML modelado de las clases del dominio.
  • Ejecución de Máquinas de Estado para modelar comportamiento en notación UML.
  • OCL como una manera de hacer consultas.
  • Transacciones en memoria y funciones de deshacer/rehacer.
  • Facilidad de unir con la capa de IU por el soporte unir datos de .NET.
DIA


Es una aplicación informática utilizada para la crear diagramas, desarrollada como parte del proyecto GNOME. Tiene con diferentes paquetes de formas para diferentes necesidades.

Dia está diseñado para sustituir la aplicación comercial Visio de Microsoft. Se puede utilizar para dibujar diferentes tipos de diagramas. Actualmente se incluyen diagramas entidad-relación, diagramas UML, diagramas de flujo, diagramas de redes, diagramas de circuitos eléctricos, etc. Se pueden agregar nuevas formas fácilmente, dibujándolas con un subconjunto de SVG e incluyéndolas en un archivo XML.

El formato para leer y almacenar gráficos es XML (comprimido con gzip, para ahorrar espacio). Puede producir salida en los formatos EPS, SVG y PNG.


JDEVELOPER
JDeveloper fue desarrollado por Oracle Corporation para los lenguajes Java, HTML, XML, SQL, PL/SQL, Javascript, PHP, Oracle ADF, UML y otros.

Las primeras versiones en 1998 estaban basadas en el entorno JBuilder de Borland, pero a partir la versión del 2001 está basado en Java.

Las últimas versiones estables son:
  • Para JDK 6: 11.1.1.2.0
  • Para JDK 5: 10.1.3.5



Diagramas UML

Lenguajes de Programación - PUNTOS EXTRA

Lenguaje Unificado de Modelado (UML por sus siglas en inglés) es un lenguaje de modelado de sistemas de software, es el más utilizado y conocido en la actualidad. Se respalda por el OMG (Objext Management Group). Es un lenguaje gráfico que se utiliza para visualizar, especificar, construir y documentar un sistema. UML ofrece un modelo para describir un plano del sistema, incluyendo aspectos concepcuales como procesos de negocio y funciones del sistema. También incluye diferentes aspectos como expresiones de los lenguajes de programación, esquemas de bases de datos y componentes que se reutilizan.

UML es un LENGUAJE DE MODELADO usado para especificar o describir métodos o procesos. Es utilizado para definir un sistema, para describir los componentes en el sistema.

Se puede utilizar en el desarrollo de software proveendo gra variedad de formas para dar apoyo a una metodología de desarrollo de software, sin especificar en el mismo quemetodología o proceso utilizará.

UML no se compara con la programación estructurada, ya que UML significa Lenguaje Unificado de Modelado, no es programación, solo son diagramas de la utilización de un requerimiento.En cambio programación estructurada, es un modo de programar como la programación orientada a objetos, solo que sta es un muy buen complemento para UML.

UML tiene diferentes tipos de diagramas, los cuales visualizan diferentes aspectos de las entidades representadas. Existen 13 tipos diferentes de diagramas en UML 2.0. Se dividen en forma jerárquica.

Los diagramas de estructura toman importancia en los elementos que deben existir en el sistema modelado:


  • Diagrama de clases
  • Diagrama de componentes
  • Diagrama de objetos
  • Diagrama de estructura compuesta
  • Diagrama de despliegue
  • Diagrama de paquetes
 
Los Diagramas de Comportamiento toman importancia en lo que debe pasar en el sistema modelado:
  • Diagrama de actividades
  • Diagrama de casos de uso
  • Diagrama de estados
Los Diagramas de Interacción son un subclasificación de diagramas de comportamiento, que toma importancia sobre el flujo de control y de datos entre los elementos del sistema modelado:
  • Diagrama de secuencia
  • Diagrama de comunicación, que es una versión simplificada del Diagrama de colaboración 
  • Diagrama de tiempos
  • Diagrama global de interacciones o Diagrama de vista de interacción


Esto es todo compañeros, saludos:)

Reporte 8. Programación orientada a objetos

Hola compañeros, en esta entrada les pondré mis programas para el reporte 7 de la clase de lenguajes de programación.

C++


Este programa tiene una clase que se llama Rectangulo, el mismo nombre del archivo header (cabecera). Se declaran los métodos públicos CalcArea() de tipo double, otras dos void (que no regresan ningún valor) setLargo() y setAncho() los cuales reciben parámetros double la y double an respectivamente. En el método Rectangulo::CalcArea() regresa el valor: largo * ancho. En el método Rectangulo::setLargo(double la) asigna el parámetro la a largo y en el void Rectangulo::setAncho(double an) asigna el parámetro an a ancho.



Este es el archivo .cpp en el cual se tiene la función principal (main) donde crea un objeto rect que es Rectangulo. Las siguientes líneas envía mensajes para que ejecture los métodos setLargo(), setAncho() y CalcArea(). La salida de este programa es la siguiente.





JAVA



Se crea una clase abstracta llamada Animal igual que el archivo Animal.java, se declaran las variables peso y nombre, entero y tipo char respectivamente. Animal toma los parámetros p y n, y se los asigna a la variable peso y nombre. Se declaran los métodos correspontientes para asignar los valores de peso y nombre. Ahora veamos el otro archivo java


Característica POO. Herencia

Lenguajes de Programación - PUNTOS EXTRA

Hola a todos, ahora les hablaré sobre la herencia en la programación orientada a objetos.

La herencia en programación orientada a objetos, es cuando una clase nueva se crea a partir de una clase existente. La herencia (que normalmente son las subclases) proviene del hecho de que la subclase, o sea la nueva clase creada, contiene atributos y métodos de la clase primaria. La ventaja principal de la herencia es que tiene la capacidad de definir atributos y métodos nuevos para la subclase, los cuales después se aplican a los atributos y métodos heredados.

Esto permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que ya no tenemos que empezar desde cero cuando se desea especializar una clase ya existente. Como resultado, se pueden adquirir bibliotecas de clases que te dan una base que puede especializarse como tu quieras. 



Jerarquía de clase

La relación primaria-secundaria entre clases se puede representar desde un punto de vista jerárquico, denominado vista de clases en árbol. Esta vista en árbol empieza con una clase general llamada superclase (también se le dice clase primaria, clase padre, clase principal o clase madre). Las clases derivadas (clases secundarias o subclases) se vuelven cada vez más especializadas a medida que van descendiendo del árbol.


Herencia múltiple
Algunos lenguajes orientados a objetos, como C++ permiten herencias múltiples, lo que significa que una clase puede heredar los atributos de otras dos superclases. Este método puede utilizarse para agrupar atributos y métodos desde varias clases dentro de una sola. 
Se puede tener una clase general Persona que tenga nombre y edad, sus métodos de acceso y modificación y un método para mostrar los datos en la pantalla.

Después, se puede diseñar la clase Estudiante, la cual debe tener nombre y edad, además de la carrera que estudia. En este caso, se puede utilizar la herencia para heredar el nombre y la edad y sus métodos relacionados y solo agregar los elementos que se requieren para un estudiante.

De manera similar, se puede diseñar la clase Maestro; pensando que además del nombre y edad se requiere el departamento para el que da clases.






Bueno esto es todo:) saludos a todos!

Característica POO. Poliformismo

Lenguajes de Programación- PUNTOS EXTRA

Hola a todos, ahora hablaré de otra característica de la Programación orientada a objetos, el poliformismo.

La palabra poliformismo significa que posee varias formas diferentes. En programación orientada a objetos se refiere a la capacidad de que varias clases derivadas de una clase anterior utilicen un mismo método de diferentes formas. 

Por ejemplo, podemos crear clases distintas: Padre y Madre que heredan de la superclase Familia. 

Existen tres tipos de poliformismo.

Poliformismo de sobrecarga

Este tipo de poliformismo ocurre cuando tenemos funciones con el mismo nombre, con funcionalidad similar, en cuanto a clases son independientes una de otra (no tienen que ser clases secundarias de la clase objeto). 

Este poliformismo nos permite definir operadores, de los cuales sus comportamientos varían de acuerdo a los parámetros que tienen. Con esto es posible, por ejemplo agregar el operador + y hacer que se comporte de forma distinta cuando está haciendo referencia a una operación entre dos números enteros o bien cuando se encuentra entre dos cadenas de caracteres.


Poliformismo paramétrico

El poliformismo paramétrico también es llamado poliformismo de plantillas, tiene la capacidad para definir varias funciones utilizando el mismo nombre pero con parámetros diferentes en nombre o tipo. El poliformismo selecciona automáticamente el método correcto que se aplicará en función del tipo de datos que tenía en sus parametros.

Gracias a esto, podemos definir por ejemplo varios métodos homónimos de adicion() efectuando una suma de valores.

  • El método int adicion(int,int) devolvería la suma de dos números enteros
  • El método float adicion(float, float) devolvería la suma de dos números tipo flotante, o sea decimales
  • El método char adicion(char, char) daría de resultado la suma de dos caracteres definidos por el autor.

Una signature (firma) es el nombre y tipo que se le da a los argumentos de una función.
Poliformismo de inclusión

También es llamado poliformismo de subtipado, tiene la habilidad para volver a definir un método en clases que se hereda de una clase base que se llama especialización. Por lo tanto, se puede llamar un método de un objeto sin necesidad de conocer su tipo, esto es poliformismo subtipado. Te permite no tomar en cuenta detalles de las clases especializadas de una familia de objetos, envolviendolos con una interfaz común (siendo la clase base).


Diferencias entre poliformismo y sobrecarga

  • El polimorfismo puede ser  muchas ventajas aplicado desde las interfaces, ya que permite crear nuevos tipos sin la necesidad de tocar las clases ya existentes, basta con volver a compilar todo el código que incluye los nuevos tipos añadidos. Si se hubiera hecho con la sobrecarga durante el diseño exigiría volver a la clase anteriormente creada al añadir una nueva operación, por lo que también se tendría revisar todo el código donde se instancia a la clase.
  • La sobrecarga se da siempre dentro de una sola clase, en cuanto el polimorfismo se da entre clases distintas.
  • Un método está sobrecargado si dentro de una clase existen dos o más declaraciones de este método con el mismo nombre pero con parámetros diferentes, por lo que no hay que confundirlo con polimorfismo.
  • La sobrecarga se resuelve en el tiempo de compilación utilizando los nombres de los métodos y los tipos de sus parámetros, mientras que el polimorfismo se resuelve en tiempo de ejecución del programa, o sea, mientras se ejecuta, en función de que clase pertenece un objeto.

Esto es todo compañeros, espero que les haya servido :) saludos!

Característica POO. Encapsulamiento

Lenguajes de programación - PUNTOS EXTRA

Hola compañeros, ahora les hablaré e una de las características de la programación orientada a objetos.

Encapsulamiento es ocultar el estado, o sea ocultar los datos miembros de un objeto de tal forma que solo se puedan cambiar a través de las operaciones definidas para este objeto.

Cada objeto se encuentra aislado del exterior y la aplicación se reduce a un agregado de objetos. Este aislamiento protege a los datos asociados a un objeto para que no se modifiquen por quien no tenga derecho a acceder a ellos, eliminando así efectos secundarios e interacciones.
De esta forma el usuario de la clase puede hacer obvia la implementación de los métodos y propiedaddes para solo saber como usarlos. Por otro lado se evita que el usuario pueda cambiar el estado de manera imprevista e inconrolada.

El encapsulamiento es como meter en paquees los métodos y atributos dentro de un objeto, mediante una interfaz gráfica. La clave se encuentra en la envoltura del objeto.
Las variables del objeto se encuentran en el centro del objeto, los métodos rodean y esconden el centro del objeto de los demás objetos del programa. Al envolver las variables de un objeto con la protección de sus métodos se le llama encapsulamiento. El encapsulamiento de variables y métodos en un componente de un programa ordenado tiene dos grandes beneficios para los desarrolles de estos softwares. El encapsulamiento trata de unir en la clase las características y comportamientos, o sea variables y métodos, tener todos estos en una sola entidad. En los lenguajes estructurados esto es imposible. El encapsulamiento se logra gracias a la abstracción y el ocultamiento. 

Las clases se dividen en dos partes, por la encapsulación.

  • Interface: captura la visión externa de la clase, tomando en cuenta la abstracción del comportamiento común a los ejemplos de esta clase
  • Implementación: esta maneja la representación de la abstracción, así como los procesos que conducen al comportamiento deseado.

Formas de encapsulación

  • Estándar (predeterminado)
  • Abierto: el miebro de la clase puede ser accedido desde fuera de la clase y cualquier parte del programa
  • Protegido: es accesible solo desde la clase y las clases que heredan
  • Semi Cerrado: solo se puede acceder desde la clase heredada
  • Cerrado: solo es accesible desde la clase

El usuario de una clase no necesita conocer como están estructurados los datos dentro de ese objeto, o sea un usuario no necesita conocer la implementación. Al prohibir que el usuario modifique atributos directamente y haciendo que utilice funciones definidas para poder modificarlos (interfaces), se asegura la integridad de los datos. 

La encapsulación define los distintos niveles de acceso para elementos de esta clase. Estos niveles de acceso deciden los derechos para acceder a los datos, permitiendo este acceso a través de una función de esa clase, desde una clase heredada o también desde cualquier otra clase. Existen tres niveles de acceso.
Público. Son métodos de toda clase con los que puede acceder a los datos de una clase que se define con el nivel de acceso público. Es el nivel de protección más bajo.

Protegido. No permite el acceso a los datos a las funciones de clase heredadas, o sea las funciones miembro de esa clase  todas sus subclases.

Privado. El acceso a los datos está prohibido a los métodos de esa clase en particular. Es el nivel más alto de protección.

Programación orientada a objetos

 Laboratorio de lenguajes de Programación


Hola compañeros, en esta entrada les hablaré sobre la programación orientada a objetos.

Imaginense que  tienen  que hacer un trabajo, agarran su computadora y oprimen el botón para encenderla, después habren word o donde vayan a hacer su trabajo y empiezan a teclear. 

La computadora es un objeto físico que tiene propiedades: color, peso, tamaño y también puede hacer cosas, o sea tiene comportamientos: puedes bajar y subirle volumen, enviar mensajes vía internet, hacer trabajos, etc.

Sabemos que "algo" es un objeto siempre y cuando tenga nombre, se pueda describir en base a sus características y puede hacer algo o comportarse de cierta forma.

- Las características del objeto se llaman atributos o propiedades y se representan como variables.
-  Los comportamientos del objeto se llaman métodos y se representan con funciones.
-   La identidad es una propiedad de un objeto que lo diferencia de los demás.

Por ejemplo.

Objeto: Línea telefónica celular

Propiedades o atributos: nombre del dueño, número de teléfono, tipo de contrato, saldo actual, etc.

Comportamiento o métodos: realizar llamadas, recibir llamadas, consultar el saldo, etc.


Un objeto tiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases. Los objetos disponen de mecanismos de interacción que son los métodos, que favorecen la comunicación entre ellos.  Esta comunicación favorece también el cambio de estado en los objetos. Esta característica hace que sean unidades indivisibles, o sea que no se separa el estado y el comportamiento.

Los métodos y atributos están muy relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar a los atributos que tiene. 

La programación orientada a objectos es diferente a la programación estructurada, en la que los datos y los procedmientos están separados y no tienen relación, ya que lo único qu quiere es el procesamiento de datos de entrada para obtener datos de salida. La programación estructurada hace que el programador piense todo en térmisos de procedimientos o funciones, y en las estructuras de datos que esos procedimientos tienen. Los programadores de Programación orientada a objetos primero se definen los objetos para después enviarles mensajes solicitándoles que realicen los métodos por sí mismos.


Conceptos

Clase: es la decinición de las propiedades y comportamiento de un tipo de objeto concreto. Se crea un objeto a partir de una clase.

Objeto: tiene propiedades o atributos, y comportamieto o métodos los cuales reaccionan constantemente a eventos. 

Método: asociado a un objeto o a un conjunto de objetos, su ejecución se hace tras la recepción del mensaje. Es lo que un objeto puede hacer. Un método puede causar un cambio en las propiedades del objeto, o en la generación de un evento con un nuevo mensaje para otro objeto del sistema.

Evento: es un suceso del sistema (como la interacción del usuario con la computadora, o un mensaje enviado por un objeto). El sistema maneja el evento que envia el mensaje al objeto que pertenezca. También puede ser un evento, la reacción que puede tener un objeto, o sea la acción que genera.

Mensaje: una comunicación para un objeto, que le dice que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.

Propiedad o atributo: es el que contiene un tipo de dato asociado a un objeto (o a una clase de objetos), que hace que los datos visibles fuera del objeto. Son las características del objeto y puede ser alterado por la ejecución de algún método.

Componentes de un objeto: atributos, identidad, relaciones y métodos.

Características

  • Abstracción
  • Encapsulamieno
  • Modularidad
  • Principio de ocultación
  • Poliorfismo
  • Herencia
  • Recolecciónde basura

Existen variedad de lenguajes orientados a objetos, de los cuales los principales son:
  • ABAP
  • ABL  Lenguaje de Programación OpenEdge de Progress Software
  • ActionScript
  • Ada
  • C++
  • C#
  • Clarion
  • Clipper
  • Object Pascal (Delphi)
  • Gambas
  • Harbour
  • Eiffel
  • Java
  • JavaScript
  • Objective-C
  • Oz
  • R
  • Perl
  • PHP
  • PowerBuilder
  • Python
  • Ruby
  • Smaltalk
  • Magik
  • Vala
  • Visual FoxPro
  • Visual Basic 6.0
  • XBase++

Bueno esto es todo, espero que hayan entendido, saludos a todos:

jueves, 18 de noviembre de 2010

Objeto

Hola a todos, esta entrada la dedicaré para hablar acerca del objeto en programación.

Un objeto es la unidad que en un tiempo de ejecución hace las tareas de un programa, así se define en el paradigma de programación orientada a objetos.

Los objetos interactuan entre ellos, cada uno puede recibir mensajes, procesar datos y enviar mensajes a otros objetos.

En la programación orientada a objetos, el objeto es resultado de la instancia de una clase.  Un clase es una construcción que se utiliza como un modelo para poder crear objetos de esa clase. Al tener una clase se pueden crear objetos de esta clase, así como también si tenemos un determinado tipo de dato podremos definir variables de este tipo.

Algunos de los objetos que forman parte del problema que estamos resolviendo, y podemos interactuar con ellos. Estos objetos se pueden agrupar según sus características en conjuntos, los cuales determinan las clases de objetos que utilizamos.

Las características de los objetos son:
  • Identidad
  • Comportamiento
  • Estado
La identidad permite a un objeto diferenciarse de otros. Esta propiedad da el nombre al objeto. Por ejemplo, podemos tomar como objeto blanco y pertenece a una clase llamada color, la propiedad única que tiene es que es "color" verde.
La identidad de los objetos se utiliza para comparar si son iguales o no, dos objetos.

El comportamiento se relaciona con la funcionalidad y define las operaciones que se pueden realicar o a las que puede responder ante mensajes enviados por otros objetos. Una ventaja de la programación orientada a objeto es que el código puede reutilizarse. Para que la aplicación sea más eficiente se define como se comportaran los objetos de las clases involucradas en dicha aplicación.

El estado de un objeto es el conjunto de valores de sus atributos en un tiempo determinado. Cuando una operación de un objeto modifica el estado de este se dice que tiene un efecto colateral.

Objetos en programación orientada a objetos
En programación orientada a objetos, la instancia de un programa es como un conjunto dinámico de objetos que interactuan entre sí. Los objetos generan tipos de datos muy específicos los cuales están definidos por:
  • Atributos. Son los datos que estan asociados al objeto, o sea sus características. Los atributos y valores definen el estado de un objeto.
  • Métodos. Estos acceden a los atributos e implementan el comportamiento de un objeto.
Estos atributos y métodos se definen por su clase. La instancia puede tener atributos que no fueron definidos en su clase. En cuanto a con los métodos, la instancia puede contener métodos que no estén definidos en su clase.

En casi todos los objetos, solo se puede acceder a los atributos mediante los métodos. Con esto es más facil asegurarse de que los datos siempre estarán en un estado bien definido.

Cada objeto pertenece a un tipo, y si hay dos objetos que pertenecen a la misma clase tendrán el mismo tipo de dato.

En la mayoría de los lenguajes de programación orientados a objetos, el operador punto (.) se utiliza para llamar a un método particular de un objeto.

Por ejemplo en python podríamos definir esta clase así:


class Aritmetica:
    def sumar(self, a, b):
        return a + b
 
    def restar(self, a, b):
        return a - b
 
    def multiplicar(self, a, b):
        return a * b
 
    def dividir(self, a, b):
        return a / b
 

Este ejemplo lo saqué de internet pero basicamente lo que hace es hacer las operaciones básicas y se declaró una clase llamada Aritmetica donde contiene todas cada una de las funciones de las operaciones básicas, para sumar, restar, multiplicar y dividir.

Para crear un objeto de tipo 'Aritmetica' se haría de la siguiente forma:

calculador = Aritmetica()

Ya teniendo un objeto de Aritmetica, se pueden realizar operaciones con dos números. Por ejemplo para sumar dos números sería:


resultado = calculador.sumar(78, 69)
 
 

Relaciones entre objetos
Como ya lo mencioné, los objetos interactuan entre sí. Estas interacciones tienen ciertas relaciones con los objetos del sistema.

Las relaciones entre objetos son:
Composición. También se le dice relación asociativa, es un tipo de relación que se tiene entre dos objetos que se comunican persistentemente. Así como también se utiliza para decir que dos objetos tienen una relación dependiente para llevar a cabo su función.

Uso. un objeto utiliza a otro cuando puede enviarle mensajes, para requerir de algun servicio por ejemplo.

Delegación.  En algunos casos, para lograr la flexibilidad de diseño, el objeto es implementado de modo que este encarga parte de su funcionalidad a otro objeto. Esto es común en aplicaciones que usan interfaces gráficas de usuarios, en las cuales los controles gráficos delegan la acción que se va a ejecutar ante cierto estímulo en otro objeto.

Bueno esto es todo, espero que les haya gustado mi entrada, saludos:)