sábado, 16 de septiembre de 2017

PROGRAMACIÓN ORIENTADA A OBJETOS (POO)


PROGRAMACIÓN ORIENTADA A OBJETOS



  CARRERA PROFESIONAL DE ING. DE SISTEMAS Y TELEMÁTICA

CURSO              :         Laboratorio de Programación III.

                                            
DOCENTE                     :         Ing. Marco Aurelio Porro Chulli.

TEMA                            :         Avance del Proyecto final de Programación.

ESTUDIANTES                :        
·        Herrera Silva Carlos Jhonatan
·        Chuquizuta Ramos Marleni
                                                                                           
CICLO                          :            VII

GRUPO                  :      “A”




      I.        PROGRAMACIÓN ORIENTADA A OBJETOS



1.    DEFINICIÓN:
La Programación Orientada a Objetos (POO u OOP) es un paradigma de programación que define los programas en términos de “clases de objetos”, objetos que son entidades que combinan estado (propiedades o datos), comportamiento (procedimientos o métodos) e identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar. Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases (e incluso entre objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos). A su vez, dispone de mecanismos de interacción (los llamados métodos) que favorecen la comunicación entre objetos (de una misma clase o de distintas), y en consecuencia, el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separan (ni deben separarse) información (datos) y procesamiento (métodos).

      CONCEPTOS BÁSICOS

ü  CLASE: Las clases son plantillas que agrupan comportamiento (métodos) y estados (atributos) de los futuros objetos. Los objetos son instancias de una clase. Usando el símil "variable - tipo" de la programación estructurada, se entiendo que un objeto es una variable que tiene el comportamiento y estados del tipo (objeto).
EJEMPLO
 public class Persona {
 public String nombre;
 public int edad;
 public void correr(){
/* por implementar */
 }
}


y dentro del cuerpo del programa instanciamos una nueva Persona denominada Esteban:
public class Main {
public static void main(String[] args) {
Persona esteban = new Persona();
 // Ahora que esteban es persona, puede correr
           esteban.corre();  
}
}


ü  MÉTODO: los métodos corresponden al comportamiento o protocolo que se encarga de ejecutar las acciones que se requieren para que un objeto realice su trabajo. Pensemos en un objeto real, una pelota, la cual posee características propias, tener color, ser redonda o estar inflada. Ahora consideremos cada método como una forma en podemos manipularla: lanzarla, hacerla rodar, inflarla etc.

ü  HERENCIA: Utilizando la herencia es posible definir clases basándose en una clase ya existente. La nueva clase añade nuevos métodos y/o campos a los de la clase ya existente, se dice que la nueva clase extiende la clase padre. La herencia permite la reutilización de código y la abstracción.  
               
ü  SOBRECARGA: En el ámbito de la POO, la sobrecarga de métodos se refiere a la posibilidad de tener dos o más métodos con el mismo nombre, pero distinta funcionalidad. Es decir, dos o más métodos con el mismo nombre realizan acciones diferentes y el compilador usará una u otra dependiendo de los parámetros usados. Esto también se aplica a los constructores (de hecho, es la aplicación más habitual de la sobrecarga). Se pueden diferenciar varios métodos sobrecargados a través de sus parámetros, ya sea por la cantidad, el tipo o el orden de los mismos.

ü  EVENTO: Un evento es una acción que un objeto reconoce, como hacer clic con el mouse (ratón) o presionar una tecla, y para el que puede escribir código para responder. Los eventos se producen como consecuencia de una acción del usuario o de código de programa, o bien pueden ser desencadenados por el sistema. También puede desarrollar eventos personalizados propios para que los generen sus objetos y los controlen otros objetos.

ü  ATRIBUTOS: son propiedades de los objetos que determinan su estado, los atributos son los datos que contiene y encapsula una clase y se acceden a ella por medio de un método, los atributos también son llamados variables de instancia.

ü  MENSAJES: Un objeto por si solo no tiene mucho significado. Ejemplo: el objeto "bicicleta" no tiene mucho sentido si no interactúa con un objeto "persona" que pedalee. La interacción entre objetos se produce mediante mensajes. Los mensajes son llamados a métodos de un objeto en particular. Podemos decir que el objeto persona envía el mensaje "girar a la izquierda" al objeto bicicleta. Los mensajes pueden contener parámetros. Por ejemplo, teniendo un método en la clase bicicleta llamado "Girar" que recibe como parámetro la dirección (derecha o izquierda). Un mensaje está compuesto por los siguientes tres elementos:
1.    El objeto destino, hacia el cual el mensaje es enviado
2.    El nombre del método a llamar
3.    Los parámetros solicitados por el método

CARACTERÍSTICAS
ü  ABSTRACCIÓN: Denota las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar "cómo" se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos, y, cuando lo están, unas variedades de técnicas son requeridas para ampliar una abstracción. El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.

ü  ENCAPSULAMIENTO: Significa reunir todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión (diseño estructurado) de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

ü  HERENCIA: Las clases no se encuentran aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento, permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple; siendo de alta complejidad técnica por lo cual suele recurrirse a la herencia virtual para evitar la duplicación de datos.

ü  POLIMORFISMO: Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre; al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O, dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

ü  MODULARIDAD: Se denomina "modularidad" a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. Estos módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la modularidad de diversas formas.

ü  PRINCIPIO DE OCULTACIÓN: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una "interfaz" a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas; solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no puedan cambiar el estado interno de un objeto de manera inesperada, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.

POO EN VISUAL BASIC.NET
En Visual Basic .NET, los miembros de datos compartidos pueden utilizarse para permitir que múltiples instancias de una clase hagan referencia a una única variable a nivel de clase.
Sintaxis: utilizaremos la siguiente sintaxis para declarar miembro de datos compartidos.
NiveldeAcceso Shared MiembrodeDatos  As TipodeDatos



NIVELES DE ACCESO
Los miembros de datos compartidos están directamente enlazados a la clase y podemos declararlos como públicos o privados. Si declaramos los miembros de datos como públicos estarán accesible para cualquier código que pueda acceder a la clase. Si declaramos los miembros de los datos como privados proporcionaremos propiedades compartidas públicas para acceder a la propiedad privada.
El siguiente ejemplo muestra como crear una clase de cuenta ahorro (SavingAcconut) que utilice un miembro de datos compartido público para mantener los tipos de interés para una cuenta de ahorro.
Class SavingsAccount
Public shared InterestRate As Double
Public Function CalculateInterest() As Double
End Function
End Class
El valor del miembro de InterestRate de la clase SavingAccount puede establecer globalmente con independencia de número instancias de la clase que este en uso. El valor se utiliza para calcular el interés del saldo actual.

INVOCAR MIEMBROS DE DATOS COMPARTIDOS DESDE UN CLIENTE
Después de crear una clase que utilice miembros de datos compartidos públicos, podemos invocar los miembros de datos de esa clase desde una aplicación cliente. El siguiente código muestra mo invocar la clase SavingsAccount y sus miembros de datos desde una aplicación cliente:
Sub Test( )
SavingsAccount.InterestRate = 0.03
Dim myAccount As New SavingsAccount( )
Dim yourAccount As New SavingsAccount( )
MessageBox.Show(myAccount.CalculateInterest( )) MessageBox.Show(yourAccount.CalculateInterest( ))
End Sub
PROPIEDADES COMPARTIDAS: También pueden crearse propiedades compartidas en las clases. El siguiente ejemplo muestra cómo declarar una propiedad compartida denominada Rate en la clase SavingsAccount:
Class SavingsAccount
Private Shared interestRate As Double
Shared Property Rate( ) As Double get
Return interestRate
End get
Set(ByVal Value As Double)
interestRate = Value
end set
End Property
End Class
INVOCAR PROPIEDADES COMPARTIDAS DESDE UN CLIENTE
Una vez declarada la propiedad compartida Rate, puede utilizarse en una aplicación cliente en lugar de acceder directamente al miembro de datos compartido interestRate. Podemos invocar una propiedad compartida cualificándola con el nombre de clase o con el nombre de variable de una instancia específica de la clase.
Las clases son plantillas que agrupan comportamiento (métodos) y estados (atributos) de los futuros objetos. Los objetos son instancias de una clase. Usando el símil “variable – tipo” de la programación estructurada, se entiendo que un objeto es una variable que tiene el comportamiento y estados del tipo (objeto).

2.    RESUMEN: La programación Orientada a Objetos representa a partir de los años 90 lo que la programación estructurada fue para los 70, un nuevo e importante paradigma para mejorar la construcción, mantenimiento y utilización de software. Los métodos tradicionales de programación tienden a ver los programas como un conjunto de procedimientos que se llaman unos a otros. Cada procedimiento tiene asociado unos datos pasivos sobre los que opera. La programación orientada a objetos cambia esta visión por otra en la que una aplicación está compuesta por objetos con estado propio dotados de funcionalidad. Los objetos se comunican entre si y tienen cada uno una forma propia de respuesta, que viene determinada por una serie de procedimientos que son asociados a cada objeto. El objetivo de esta tecnología es tener un software más consistente, robusto y reutilizable, más fácil de verificar, mantener, refinar y extender. El paradigma orientado a objetos representa un paso más en la dirección de acercar el lenguaje de las soluciones informáticas al lenguaje en que se plantean los problemas.
3. SUMMARY: Object Oriented programming represents, from the 90s, what  structured programming was for the 70s, a new and important paradigm for improving the construction, maintenance and use of software. Traditional programming methods tend to view programs as a set of procedures that call each other. Each procedure has associated passive data on which it operates. Object-oriented programming changes this view to another in which an application is composed of objects with their own state endowed with functionality. Objects communicate with one another and each have their own form of response, which is determined by a series of procedures that are associated with each object. The goal of this technology is to have a more consistent, robust and reusable software, easier to verify, maintain, refine and extend. The object-oriented paradigm represents a further step in the direction of approaching the language of computer solutions to the language in which problems arise.

4.    RECOMENDACIONES:
·    Antes de empezar a programar en un lenguaje de programación orientado a objetos es importante conocer conceptos importantes como de herencia, atributos, métodos, polimorfismo.
     Es importante conocer la estructura del lenguaje de programación en el que se va a trabajar para saber cómo heredar, instanciar y encapsular.
Para poder utilizar la HERENCIA es importante declarar los métodos de forma pública.


5.    CONCLUCIÓN: La Programación Orientada a Objetos es un paradigma de programación que tiene muchas ventajas al momento de utilizarlo puesto que podemos utilizar la herencia, el polimorfismo, abstracción, reutilización de código. Al poder utilizar todas las características anteriores podremos programar de manera más ordenada sin tener que hacer redundancia de código. En la programación Orientada a Objetos podremos construir objetos con estado propio dotados de funcionalidad. Los objetos se comunican entre si y tienen cada uno una forma propia de respuesta, que viene determinada por una serie de procedimientos que son asociados a cada objeto. El objetivo de esta tecnología es tener un software más consistente, robusto y reutilizable, más fácil de verificar, mantener, refinar y extender. El paradigma orientado a objetos representa un paso más en la dirección de acercar el lenguaje de las soluciones informáticas al lenguaje en que se plantean los problemas.
         5.    APRECIACIÓN DEL EQUIPO:
  ü  En esta sesión pudimos afianzar los conocimientos sobre el Programación Orientado a Objetos, sus características y conceptos básicos.
  ü  Nos permitió conocer cuáles son los roles que cumplen las características como la herencia, encapsulamiento, métodos, etc. 
  ü  Conocimos programación orientado a objetos dentro de un lenguaje de programación en este caso es Visual Basic.NET.

    6.    GLOSARIO DE TÉRMINOS

  Ø  Paradigma: Conjunto de unidades que pueden sustituir a otra en un mismo contexto porque cumplen la misma función.

  Ø  Mecanismos: son elementos destinados a transmitir y/o transformar fuerzas y/o movimientos desde un elemento motriz (motor) a un elemento conducido (receptor), con la misión de permitir al ser humano realizar determinados trabajos con mayor comodidad y menor esfuerzo.

  Ø  Instancia: Una instancia (en inglés, instance) es la particularización, realización específica u ocurrencia de una determinada clase, entidad (modelo entidad-relación) o prototipo.

  Ø  Reutilización de Código: La reutilización de código se refiere al comportamiento y a las técnicas que garantizan que una parte o la totalidad de un programa informático existente se pueda emplear en la construcción de otro programa. De esta forma se aprovecha el trabajo anterior, se economiza tiempo, y se reduce la redundancia.

  Ø  Compilador: Un compilador es un programa informático que traduce un programa que ha sido escrito en un lenguaje de programación a un lenguaje común, usualmente lenguaje de máquina, aunque también puede ser traducido a un código intermedio (Bycode) o a texto. Este proceso de traducción se conoce como compilación.

7.    LINKOGRAFÍA:
S
   SLIDESHARE