jueves, 18 de noviembre de 2010

*Interfaz

Materia: Laboratorio de Lenguajes de Programación
Hora: Jueves v1

Hola a todos, en está entrada les hablaré un poco sobre las Interfaces en la Programción  Orientada a Objetos.

Se dice que una Interfaz de Programación es un conjunto de funciones y procedimientos que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción.

También una interfaz es el conjunto de llamadas a ciertas bibliotecas que ofrecen acceso a ciertos servicios desde los procesos y representa un método para conseguir abstracción en la programación, entre los níveles o capas inferiores y los superiores del software.

Uno de los principales objetivos de una Interfaz es proporcionar un conjunto de funciones de uso general, por ejemplo para dibujar ventanas o iconos en la pantalla.

Los programadores se benefician con las ventajas que ofrece una Interfaz, haciendo uso de su funcionalidad, y así se evita programar todo desde el principio.

Las Interfaces son abstractas, Por ejemplo al momento de escribir "Hola Mundo" vemos que hay diferentes níveles de abstracción:

1.Haciendo todo el trabajo desde el principio:

        1.Se traza, sobre papel milimetrado, la forma de las letras (y espacio) "H,o, l, a,M,u, n, d, o".
        2.Se crea una matriz de cuadrados negros y blancos que se asemeje a la sucesión de letras.
        3.Mediante instrucciones en ensamblador, escribe la información de la matriz en la memoria intermedia  ("buffer") de pantalla.
        4.Mediante la instrucción adecuada, se hace que la tarjeta gráfica realice el volcado de esa información sobre la pantalla.

2.Por medio de un sistema operativo para hacer parte del trabajo:
       1.Carga una fuente tipográfica proporcionada por el sistema operativo.
       2.Haz que el sistema operativo borre la pantalla.
       3.Haz que el sistema operativo dibuje el texto "Hola Mundo" usando la fuente cargada.

3.Usando una aplicación (que a su vez usa el sistema operativo) para realizar la mayor parte del trabajo:
       1.Escribe un documento HTML con las palabras "Hola Mundo" para que un navegador Web como Google Chrome, Mozilla, Firefox, Opera o Internet Explorer pueda representarlo en el monitor.

 

Aquí en este ejemplo podemos ver que la primera opción es la que requiere más pasos, cada uno de los cuales son más complicados que los pasos de las opciones siguientes, y por ello no resulta nada práctico usar el primer planteamiento para representar una gran cantidad de información, mientras que el segundo enfoque simplifica la tarea eliminando un paso y haciendo el resto más sencillos y la tercera forma simplemente requiere escribir "Hola Mundo". Sin embargo, las Interfaces de alto nivel generalmente pierden flexibilidad; por ejemplo, resulta mucho más difícil en un navegador web hacer girar texto alrededor de un punto con un contorno parpadeante que programarlo a bajo nivel. Al elegir usar una Interfaz se debe llegar a un cierto equilibrio entre su potencia, simplicidad y pérdida de flexibilidad.


 
Algunos ejemplos de Interfaces de programación son:

  • Microsoft WMI
  • Microsoft Win32 API
  • Microsoft Framework .NET
  • OpenGL
  • OpenCL
  • Java EE
  • API for SCSI device interfacing
  • The Carbon APIs for the Macintosh OS
  • Common Object Request Broker Architecture (CORBA)
  • Symfony para PHP
  • Drupal API

 

 

 Bueno esto es todo sobre mi entrada de Interfaz, espero les sea útil.
 
Saludos :)

*Objeto en Programación Orientada a Objetos

Materia: Laboratorio de Lenguajes de Programación
Hora: Jueves v1




Hola a todos, en está entrada les hablaré un poco sobre los Objetos en la Programación Orientada a Objetos.




Se dice que un objeto es la unidad que en la ejecución realiza las tareas de un programa, también se dice que es la instancia de una clase.


Cada objeto puede recibir mensajes, procesar datos y mandar mensajes a otros objetos de manera similar a un servicio, un objeto es el resultado de la instanciación de una clase. Sabemos que una clase ofrece la funcionalidad en ella definida, pero queda implementada sólo al crear una instancia de la clase, en forma de un objeto.


Un objeto representa alguna identidad en la vida real, al momento de estudiarlos adquirimos el conocimiento necesario para mediante la abstracción y la generalización los agrupamos según sus características en conjuntos.


Los objetos tienen diferentes características que nos permiten conocerlos mediante la observación, identificación y el estudio de su comportamiento y algunas de estas características son:




- Identidad: que es la propiedad que permite a un objeto diferenciarse de otros. Sirve para comparar si dos objetos son iguales o no.


- Comportamiento: el comportamiento de un objeto esta relacionado con su funcionalidad y determina las operaciones que este puede realizar o las que puede responder ante mensajes enviados por otros objetos, la funcionalidad de un objeto está determinada por su responsabilidad, una de las ventajas de la Programación Orientada a Objetos es la reusabilidad del código y un objeto es más fácil reutilizarse en tanto su responsabilidad sea mejor definida y más concreta.


- Estado: el estado de un objeto es el conjunto de valores de sus atributos en un instante de tiempo dado, éste puede ser modificado por el comportamiento de un objeto.




Los objetos en la Programación Orientada a Objetos entienden la noción descrita en secciones anteriores para modelar un tipo específico que está definido por:


1. Atributos que son los que representan las propiedades o características del objeto, los atributos y los valores determinan el estado de un objeto.


2. Métodos que son los que acceden a los atributos de una manera predefinida e implementan el comportamiento del objeto.


Los atributos y métodos de un objetos están definidos por su clase, una instancia puede poseer atributos que no fueron definidos en su clase. Algo parecido pasa con los métodos, una instancia puede contener métodos que no estén definidos en su clase de la misma manera, una clase puede declarar ciertos métodos como "métodos de clase", y estos podrán estar o no presentes en la instancia.

En un lenguaje en el que cada objeto es creado a partir de una clase, un objeto es llamado una instancia de esa clase, aquí cada objeto pertenece a un tipo y dos objetos que pertenezcan a la misma clase tendrán el mismo tipo de dato. Crear una instancia de una clase es entonces referido como instanciar la clase.


Un ejemplo de como crear un objeto de tipo "Aritmetica" sería de la siguiente forma:

Aritmetica calculador = Aritmetica();

#Otra manera usando punteros
Aritmetica* calculador1 = new Aritmetica();


Y por ejemplo para calcular la suma entre dos números usando un objeto "calculador", podemos decir 78 y 69 necesitamos un código como el siguiente:

int resultado = 0;

resultado = calculador.sumar(78, 69);
#Otra manera usando punteros
resultado = calculador1->sumar(78, 69);



* La cardinalidad que pueden tener las relaciones de un objeto son:

- uno a uno, ejemplo: un auto tiene un motor

- uno a muchos, ejemplo: un auto tiene muchas ruedas
- muchos a muchos, ejemplo: un auto se puede servir en muchas gasolineras y una gasolinera puede servir a   muchos autos.

* Y la direccionalidad puede ser:

- unidireccional, ejemplo: un auto tiene cuatro ruedas.
- bidireccional


* Las relaciones entre objetos más generales son:

-Composición: es un tipo de relación que se establece entre dos objetos que tienen conmunicación persistente, se utiliza para expresar que los objetos que estan involucrados está compuesto por el otro.

-Uso: es cuando un objeto usa a otro para enviarle mensajes, por ejemplo para requerir de este algún servicio.

-Delegación:es cuando un objeto es implementado de forma tal que este delegue parte de su funcionalidad en otro objeto.


* Algunos términos para tipos especializados de objetos son:



-Singleton: es cuando un objeto del que solo puede existir una única instancia de su clase durante el tiempo de vida del programa.


-Functor : es cuando un objeto que puede ser utilizado como una función.


-Objeto inmutable: es cuando un objeto creado con un estado fijo, no puede variar en el tiempo de vida del mismo.


-Objeto de primera clase: es cuando un objeto  puede ser utilizado sin restricciones.


-Contenedor: es cuando un objeto contiene a otros objetos.


-Fábrica de objetos: es cuando un objeto tiene como propósito crear otros objetos.


-Metaobjeto: es cuando un objeto crea otros objetos.
-Prototipo: es cuando un metaobjeto especializado, a partir del el se pueden crear otros objetos copiándolo.


-Objeto todopoderoso: es cuando un objeto sabe mucho o hace mucho.


-Antiobjeto: es una metáfora computacional útil para conceptualizar y solucionar problemas complejos, usualmente con aproximaciones paralelas.


 
                                      





Bueno esto es todo sobre mi entrada, espero les sea útil.


Saludos :)




miércoles, 17 de noviembre de 2010

*Polimorfismo en Programación Orientada a Objetos

Materia: Laboratorio de Lenguajes de Programación
Hora: Jueves v1


Hola a todos, en está entrada les hablaré un poco más a fondo sobre el Poliformismo en Programación Orientada a Objetos.

Se dice que Poliformismo es la capacidad para que varias clases derivadas de una antecesora utilicen un mismo método de forma diferente. Por ejemplo: Si creamos dos clases distintas: Pez y Ave que heredan de la superclase Animal, la clase Animal tiene el método abstracto mover que se implementa de forma distinta en cada una de las subclases, que los peces y las aves se mueven de forma distinta.

El concepto de Polimorfismo se puede aplicar a funciones y a tipos de datos, de ésto se derivan los términos funciones polimórficas y tipos polimórficos.

Las funciones polimórficas son las que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta.

Los tipos polimórficos son los tipos de datos que contienen al menos un elemento cuyo tipo no está especificado.


*Se puede clasificar el polimorfismo en dos grandes clases:



- Polimorfismo dinámico : que también es llamado polimorfismo paramétrico, es el que en el código no incluye ningún tipo de especificación sobre el tipo de datos en el que se trabaja, entonces puede ser utilizado a todo tipo de datos compatible.


- Polimorfismo estático: que también es llamado polimorfismo ad hoc es en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.


El polimorfismo dinámico unido a la herencia es lo que llamamos programación genérica.

*Otra clasificación agrupa los polimorfismo en dos tipos:

 - Ad-Hoc: que incluye una sobrecarga de operadores y coerción.
 - Universal: que es controlado por la herencia, paramétrico o genericidad.


 
*Algunas diferencias entre Polimorfismo y Sobrecarga son:
 
- El polimorfismo que permite crear nuevos tipos sin necesidad de tocar las clases ya existentes, encambio en una sobrecarga durante el diseño exigiría retocar la clase anteriormente creada al añadir la nueva operación, por lo que tendrias que revisar todo el código donde se instancia a la clase.



- La sobrecarga se da siempre dentro de una sola clase, mientras que el polimorfismo se da entre clases distintas.


- Un método está sobrecargado si dentro de una clase existen dos o más declaraciones de dicho método con el mismo nombre pero con parámetros distintos.


- La sobrecarga se resuelve en tiempo de compilación utilizando los nombres de los métodos y los tipos de sus parámetros y el polimorfismo se resuelve en tiempo de ejecución del programa, en función de que clase pertenece un objeto.





                                


          

Bueno esto es todo sobre mi entrada, espero les sea útil. Saludos :)

*Encapsulamiento en Programación Orientada a Objetos

Materia: Laboratorio de Lenguajes de Programación
Hora: Jueves v1

Hola a todos, aquí les dejó una entrada sobre Encapsulamiento en Programación Orientada a Objetos.

Se dice que Encapsulamiento es ocultar los estados, es decir, los datos miembro de un objeto de manera que sólo se puede cambiar mediante las operaciones definidas para ese objeto.

Cada objeto está aislado del exterior, es un módulo natural, y la aplicación entera se reduce a un agregado o rompecabezas de objetos, éste aislamiento protege a los datos asociados a un objeto contra su modificación por quien no tenga derecho a accerder a ellos, eliminando efectos secundarios e interacciones.

Sabemos que en los diagramas, las variables del objeto se localizan en el centro o núcleo del objeto de otros objetos en el programa, también se le llama Encapsulamiento al empaquetamiento de las variables de un objeto con la protección de sus métodos.

Es utilizado para esconder detalles de la puesta en práctica no importantes en otros objetos.

El Encapsulamiento consiste en unir las características y comportamientos, esto es, variables y métodos, es tener todo en una sola entidad y se logra por medio de la abstracción y el ocultamiento.


La Encapsulación hace que las clases se dividan en 2 partes:

1.Interface: es donde captura la visión externa de una clase, y abarca desde la abstracción del comportamiento común hasta los ejemplos de esa clase.

2.Implementación: es donde comprende la representación de la abstracción, así como los mecanismos que conducen al comportamiento deseado.


*Formas de Encapsular

- Existen diferentes formas de Encapsular y son:

1.Estándar: es el predeterminado
2.Abierto : es  el que hace que el miembro de la clase pueda ser accedido desde el exterior de la Clase y cualquier parte del programa.
3.Protegido: es el que solo es accesible desde la Clase y las clases que heredan.
4.Semi cerrado: es el que solo es accesible desde la clase heredada.
5. Cerrado: es el que solo es accesible desde la Clase.





         







Esto es todo de mi entrada, espero les sea útil. Saludos :) 

*Herencia en Programación Orientada a Objetos

Materia: Laboratorio de Lenguajes de Programación
Hora: Jueves v1

Hola a todos, en está entrada les hablaré un poco más a fondo sobre la Herencia en la Programación Orientada a Objetos.

Se dice que la Herencia es el mecanisco fundamental para implementar la reutilización y extensibilidad del software, a través de ella los diseñadores pueden construir nuevas clases partiendo de una jerarquía de clases ya existente, evitando el rediseño, la remodificación y la verificación de la parte implementada.

La Herencia es la relación que existe entre una clase general y otra clase más especifica, por ejemplo :

Si declaramos una clase párrafo derivada de una clase texto, todos los métodos y variables asociadas con la clase texto serán heredados por la subclase párrafo.

Una de sus funciones más importantes es la de proveer Poliformismo y late binding.

Un ejemplo hecho en Java que encontre en internet muestra como estaría estructurada una herencia :

public class Mamifero{

      private int patas;
      private String nombre;
      public void imprimirPatas(){
              JOptionPane.showMessageDialog(null," Tiene " + patas +   "patas\n","Mamifero",JOptionPane.INFORMATION_MESSAGE);
        }
        public Mamifero(String nombre, int patas){
                this.nombre = nombre;
                this.patas = patas;
        }
}
public class Perro extends Mamifero {
    public Perro(String nombre){
          super(nombre, 4);
      }
}
public class Gato extends Mamifero {
      public Gato(String nombre){
            super(nombre, 4);
      }
}
public class CrearPerro {
      public static void main(String [] args) {
      Perro perrito = new Perro("Canelita");
      perrito.imprimirPatas(); /*Está en la clase mamífero*/
      }
}


En este ejemplo se declaran las clases mamíferos, gato y perro, haciendo que gato y perro sean unos mamíferos (derivados de esta clase), y se ve como a través de ellos se nombra al animal pero así también se accede a patas dándole el valor por defecto para esa especie.

La herencia permite que existan clases que nunca serán instanciadas directamente, en el ejemplo anterior tenemos una clase "perro" que heredaría los atributos y métodos de la clase "mamifero", como "gato" o cualquier otra subclase, pero ya en la ejecución no habrá ningún objeto "mamífero" que no pertenezca a alguna de las subclases. Cuando tienes una clase así se le conoce como Clase Abstracta, la ausencia de instancias específicas es su única particularidad.
Otra cosa que se puede realizar con la herencia esque el programador pueda decir que variables de instancia y que métodos de los objetos de una clase sean visibles, y esto se realiza con las especificaciones :

- Private: es cuando ningún miembro privado de la superclase es visible en la subclase.
- Protected: es cuando los miembros protegidos de la superclase son visibles en la subclase, pero no visibles para el exterior.
- Public: es cuando los miembros públicos de la superclase siguien siendo públicos en la subclase.

También podemos redefinir en la clase derivada algún método que ya esta definido en la clase base, para esto tenemos que declarar una función miembro con el mismo nombre.

* Ventajas al utilizar Herencia en un programa :

- Te ayuda a ahorrarte código y tiempo, ya que si tienes una clase lista es solo de implementarla y listo el código de esta se resume a solo un llamado.

- Los objetos pueden ser construidos a partir de otros similares.

- La clase derivada puede heredar código y datos de la clase base, añadiendo código o modificando lo heredado.

 - Las clases que heredan propiedades de otra clase pueden servir como clase base de las otras.


Existen 2 tipos de Herencia:

Herencia simple: es cuando un objeto puede extender las características de otro objeto y de ningún otro, es decir, que solo puede heredar o tomar atributos de un solo padre o de una sola clase.

Herencia múltiple: es cuando un objeto puede extender las características de uno o más objetos, es decir, puede tener varios padres.




       






 Esto es todo sobre mi entrada, espero les sea útil. Saludos :)

*Clase en Programación Orientada a Objetos

Materia: Laboratorio de Lenguajes de Programación
Hora: Jueves v1

Hola a todos, en esta entrada les hablaré un poco más a fondo sobre las clases en Programación Orientada a Objetos en mi entrada sobre Programación Orientada a Objetos mencione un poco acerca de esto pero aquí se los profundizaré un poco más.

Se dice que una clase es una construcción que se utiliza como un modelo que describe el estado y comportamiento que todos los objetos de la clase tienen, un objeto que tiene una clase específica se dice que es una instancia de la clase y la clase que contiene esa instancia se puede considerar como del tipo de ese objeto.

Una clase representa un sustantivo, que es el modelo de un concepto dentro de un programa de computadora. Lo que hace es encapsular el estado a través de los atributos y el comportamiento lo encapsula a través de los métodos.

Una clase tiene intarfaz y estructura, la interfaz describe como se relacionan la clase y sus instancias con métodos, mientras que la estructura describe como los datos se dividen en atributos dentro de una instancia.

Las clases pueden definirse como estructuras (struct), uniones (union) o clases (class).

Un ejemplo de sintáxis de clase es :

class Nombre {

             // Variables miembro (habitualmente privadas)
    miembro_1; //lista de miembros
    miembro_2;
    miembro_3;


   // Funciones o métodos (habitualmente públicas)
    funcion_miembro_1( ); // funciones miembro conocidas

    funcion_miembro_2 ( ); // funciones como métodos

    // Propiedades (habitualmente públicas)
    propiedad_1;
    propiedad_2;
    propiedad_3;
    propiedad_4;

}

-Las variables miembro: son privadas al objeto y su acceso se realiza mediante propiedades  o métodos que realizan comprobaciones adicionales.

-Métodos en las clases: son los que implementan la funcionalidad al objeto, éstos casi siempre son verbos.

- Propiedades: son un tipo especial de métodos que permiten consultar o modificar el valor de la variable mediante los métodos: GetVariable y SetVariable, y un ejemplo de su sintaxis es: 

  tipo Propiedad {

         get {
         }
         set {
         }
  }



EJEMPLOS DE CLASES



                                                          



                                   






















Bueno esto es todo de mi entrada de clases, espero les sea útil. Saludos :) 

*Programación Orientada a Objetos

Materia: Laboratorio de Lenguajes de Programación
Hora: Jueves v1


Éste tipo de programación es un paradigma de programación que utiliza objetos para diseñar programas informáticos, está basado en varias técnicas como:
  •  Herencia
  •  Abstracción
  •  Poliformismo 
  •  Encapsulamiento.
Los objetos combinan:

- Estado: que está compuesto por datos, es uno o varios estados que se asignan unos valores concretos.
- Comportamiento: está compuesto por los métodos con los que puede operar el objeto, es decir, que operaciones se pueden realizar con él.
- Identidad: es una propiedad de un  objeto que lo diferencia del resto.

Los objetos tienen mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos, está comunicación que se da entre ellos favorece el cambio de estado en los objetos, y esta característica que se presenta lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.

Los métodos y los atributos están relacionados por la propiedad de conjunto, está propiedad se refiere a que una clase requiere de métodos para poder utilizar los atributos que tiene.


La programación orientada a objetos tienen origen con el lenguaje Simula 67, que fue creado para hacer simulaciones por Ole-Johan Dahl y Kristen Nygaard en Oslo.

* Algunos lenguajes que se utilizan en la Programación Orientada a Objetos son :

  • C++
  • Objective C
  • Java
  • Smalltalk
  • Eiffel
  • Lexico (en castellano)
  • Ruby
  • Python
  • OCAML
  • Object Pascal
  • CLIPS
  • Visual .net
  • Actionscript
  • COBOL
  • Perl
  • C#
  • Visual Basic.NET
  • PHP
  • Simula
  • Delphi
  • PowerBuilder

* Conceptos de Programación Orientada a Objetos:

- Clase. son las definiciones de las propiedades y comportamiento de un tipo de objeto concreto.

- Herencia. es la facilidad mediante la cual la clase hereda cada uno de los atributos y operaciones de la clase anterior, por lo tanto se utilizan los mismos métodos y variables declaradas en la anterior.

- Objeto. es una entidad provista de un conjunto de propiedades o atributos y de comportamiento o funcionalidad los mismos que después reaccionan a eventos.

- Método. es un algoritmo asociado a un objeto cuya ejecución se desencadena tras la recepción de un "mensaje".

- Evento. es un suceso en el sistema, que el sistema maneja el evento enviando el mensaje adecuado al objeto pertinente.

- Mensaje. es una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con cieros parámetros asociados al evento que lo generó.

- Propiedad o atributo. es un contenedor de un tipo de datos asociados a un objeto, que hace que los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas.

- Estado interno. es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto.

- Componentes de un objeto. son los atributos, identidad, relaciones y métodos.

- Identificación de un objeto. un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.



* Características de la Programación Orientada a Objetos:

- Abstracción: denota las características escenciales de un objeto, donde se capturan sus comportamientos, cada objeto sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar, cambiar su estado y comunicarse con otros objetos en el sistema sin revelar como se implementan estas características.

- Encapsulamiento: significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción.

- Modularidad: es la propiedad que permite subdividir una aplicación en partes más pequeñas llamadas módulos las cuales deben ser tan independientes como sea posible de la aplicación en sí y de las restantes partes.

-Principio de ocultación: se refiere a que cada objeto está aislado del exterior, quiere decir que es un módulo natural y cada tipo de objeto expone una interfaz a otros objetos que especifica como pueden interactuar con los objetos de la clase.

- Polimorfismo: comportamientos diferentes y asociados a objetos distintos, pueden compartir el mismo nombre, es decir las referencias y las colecciones pueden tener objetos de diferentes tipos.

- Herencia: se refiere a que las clases no están aisladas, sino que se relacionan entre sí formando una jerarquía de clasificación. Los objetos heredan las propiedades  y el comportamiento a todas las clases a las que pertenecen. 

- Recolección de basura: es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por lo tanto desvincula la memoria asociada, por lo que los objetos quedan sin ninguna referencia a ellos.


            



 Bueno esto es todo sobre mi entrada de Programación Orientada a Objetos, espero les sea útil :) 


Saludos :)