SlideShare una empresa de Scribd logo
1 de 9
Descargar para leer sin conexión
PROGRAMACION II – SISTEMAS – Pág Nro. 1

Un programa debe ser:
● Eficaz
Lo hace en un tiempo admisible.
● Adaptable o Flexible
¿Qué pasa si cambian las especificaciones?
● Reutilizable
Que ante problemas parecidos, no tenga que volver a escribir todo el código y pueda aprovechar la mayor parte de él.

Reutilizar ayuda a sacar más con menos esfuerzo: Copio o reutilizo código, estructuras o ideas.
    Menos Equivocaciones: Reutilizo algo que ya funciona. Se ha corregido sus errores. Escribo menos código nuevo.
    Menos Pruebas: Pruebo sólo lo nuevo y su integración.
    Más Creativo: No rehago siempre lo mismo. Codifico nuevas funcionalidades.
    Mejoran las Probabilidades de Éxito


Programación desordenada
En este estilo de programación, predomina el instinto del programador por encima del uso de cualquier método lo que
provoca que la corrección y entendimiento de este tipo de programas sea casi ininteligible.

Ejemplo de uso de esta programación (listado en Basic clásico):
                       10 X=RANDOM()*100+1;
                       20 PRINT “escribe el número que crees que guardo”
                       30 INPUT N
                       40 IF N>X THEN PRINT “mi numero es menor” GOTO 20
                       50 IF N<X THEN PRINT “mi numero es mayor” GOTO 20
                       60 PRINT “¡Acertaste!”
El código anterior crea un pequeño juego que permite intentar adivinar un número del 1 al 100.


Programación estructurada
En esta programación se utiliza una técnica que genera programas que sólo permiten utilizar tres estructuras de control:
       Secuencias (instrucciones que se generan secuencialmente)
       Alternativas (sentencias if)
       Iterativas (bucles condicionales)
El listado anterior en un lenguaje estructurado sería (listado en Pascal):
                        PROGRAM ADIVINANUM;
                        USES CRT;
                        VAR x,n:INTEGER;
                        BEGIN
                              X=RANDOM()*100+1;
                             REPEAT
                               WRITE(“Escribe el número que crees que guardo”);
                              READ(n);
                              IF (n>x) THEN WRITE(“Mi número es menor”);
                              IF (n>x) THEN WRITE(“Mi número es mayor”);
                             UNTIL n=x;
                             WRITE(“Acertaste”);
La ventaja de esta programación está en que es más legible.
PROGRAMACION II – SISTEMAS – Pág Nro. 2



Programación modular
Completa la programación anterior permitiendo la definición de módulos independientes cada uno de los cuales se
encargará de una tarea del programa. De este forma el programador se concentra en la codificación de cada módulo
haciendo más sencilla esta tarea. Al final se deben integrar los módulos para dar lugar a la aplicación final.
El código de los módulos puede ser invocado en cualquier parte del código. Realmente cada módulo se comporta como un
subprograma que a partir de unas determinadas entradas obtienen unas salidas concretas. Su funcionamiento no depende
del resto del programa por lo que es más fácil encontrar los errores y realizar el mantenimiento.


Programación orientada a objetos (POO)
Es la más novedosa. Las aplicaciones se representan en esta programación como una serie de objetos independientes que se
comunican entre sí.
Cada objeto posee datos y métodos propios, por lo que los programadores se concentran en programar
independientemente cada objeto y luego generar el código que inicia la comunicación entre ellos.
Es la programación que ha revolucionado las técnicas últimas de programación ya que han resultado un importante éxito
gracias a la facilidad que poseen de encontrar fallos, de reutilizar el código y de documentar fácilmente el código.


                              PROGRAMACION ORIENTADA A OBJETOS (POO)
La programación orientada a objetos es un paradigma que utiliza objetos como elementos fundamentales en la construcción
de la solución. Surge en los años 70. Un objeto es una abstracción de algún hecho o ente del mundo real que tiene atributos
que representan sus características o propiedades y métodos que representan su comportamiento o acciones que realizan.
Todas las propiedades y métodos comunes a los objetos se encapsulan o se agrupan en clases. Una clase es una plantilla o un
prototipo para crear objetos, por eso se dice que los objetos son instancias de clases.
En la POO una aplicación se entiende como una serie de objetos que se relacionan entre sí. Cada objeto responde a una
programación previamente realizada; esta programación se realiza de forma independiente, eso nos asegura que el objeto es
reutilizable (se puede usar en aplicaciones distintas).
En la programación orientada a objetos el diseño consiste en analizar qué objetos necesita una aplicación y cómo se
relacionan entre sí. Después se pasa a realizar el código de cada objeto. El código de cada objeto se prepara sin tener en
cuenta al resto de elementos del programa; eso permite que un objeto sea utilizado fácilmente en aplicaciones diferentes,
gracias a la independencia del código.


                                             1. PROPIEDADES DE LA POO

      Encapsulamiento. Una clase se compone tanto de variables (propiedades) como de funciones y procedimientos
       (métodos). En la POO más estricta (y aconsejable) toda variable pertenece a una clase (es decir, no hay variables,
       sino propiedades).
      Ocultación. Hay una zona oculta al definir la clases (zona privada) que sólo es utilizada por esa clases y por alguna
       clase relacionada. Hay una zona pública (llamada también interfaz de la clase) que puede ser utilizada desde
       cualquier parte del código (desde cualquier otra clase).
      Polimorfismo. Cada método de una clase puede tener varias definiciones distintas. En el caso del LUDO:
       partida.empezar(4) empieza una partida para cuatro jugadores, partida.empezar(ROJO, AZUL) empieza una partida
       de dos jugadores para los colores rojo y azul; estas son dos formas distintas de emplear el método empezar, que es
       polimórfico.
      Herencia. Una clase puede heredar propiedades y métodos de otra.
PROGRAMACION II – SISTEMAS – Pág Nro. 3

                                                    1. CLASES Y OBJETOS
Objetos
Un objeto es un elemento que agrupa datos y funciones (métodos). Es decir es una estructura que posee información
estática (números, textos,…) e información dinámica (procedimientos o métodos). Por ejemplo en el caso de un objeto que
represente un perro, dicho objeto posee datos (llamados atributos) como la edad, el nombre, el tamaño,… y métodos como
ladrar, correr,…
Todo objeto en un sistema posee: una identidad, un estado y un comportamiento.
      El estado marca las condiciones de existencia del objeto dentro del programa. Lógicamente este estado puede
         cambiar. Un automóvil puede estar parado, en marcha, estropeado, funcionando, sin gasolina, etc.
      El comportamiento determina como responde el objeto ante peticiones de otros objetos. Por ejemplo un objeto
         conductor puede lanzar el mensaje arrancar a un automóvil. El comportamiento determina qué es lo que hará el
         objeto.
      La identidad indica que cada objeto es único; aunque encontremos dos objetos con los mismos contenidos. No
         existen dos objetos iguales.
En un programa los objetos se comunican entre sí lanzándose mensajes. Un mensaje es un método que permite que el
objeto ejecute alguna acción. Por ejemplo, si tenemos el objeto de clase persona Pedro y este quiere arrancar su automóvil,
que es otro objeto de otra clase, podría hacerlo lanzando el mensaje AutomóvilDePedro.arranca().


Clases
Las clases son las plantillas para hacer objetos. Una clase sirve para definir una serie de objetos con propiedades (atributos),
comportamientos (operaciones o métodos). Hay que pensar en una clase como un molde. A través de las clases se obtienen
los objetos en sí. Es decir antes de poder utilizar un objeto se debe definir la clase a la que pertenece, esa definición incluye:
     Sus atributos. Es decir, los datos miembros de esa clase. Los datos pueden ser públicos (accesibles desde otra clase)
        o privados (sólo accesibles por código de su propia clase). También se les llama campos.
     Sus métodos. Las funciones miembro de la clase. Son las acciones (u operaciones) que puede realizar la clase.
     Constructor. Para crear una clase normalmente hace falta realizar operaciones previas (Código de inicialización).
     Destructor. Código a ejecutar cuando cada objeto de esa clase desaparezca de memoria. Es lo que se conoce como
        Código de finalización de la clase.
Para crear una clase
La creación de clases en C++ consta de dos partes:
        a. Definición de la interfaz de la clase. Que consiste en indicar las propiedades y métodos de la clase, sin
            especificar el código de los métodos, simplemente indicando la cabecera de los mismos.
        b. Implementación de los métodos. En esta parte se define el código de los métodos. Lo ideal es que esta fase se
            programe de forma independiente (incluso en un archivo distinto).

a. Definición de la interfaz de la clase
Se utiliza la palabra reservada class y a continuación el nombre de la clase que empieza por letra mayúscula. La definición
de la clase se pone entre las llaves de apertura y cierre y un punto y coma. Es decir con }; el punto y coma aquí es obligatorio.
                        class NombreDeClase {
                                public:
                                         miembros dato y prototipos de funciones miembro públicos
                                private:
                                         miembros dato y prototipos de funciones miembro privados
                        };
En C++ por defecto se entiende que los métodos (funciones miembro) y propiedades (miembros dato) son privados por
defecto, es decir que si no se indica nada se entenderá como prívate.
PROGRAMACION II – SISTEMAS – Pág Nro. 4


                     class Rueda{
                           private:
                                 double radio;
                           public:
                                 void girar(double angulo);
                                 void parar();
                                 double obtenerRadio();
                     };

 b. Implementación de los métodos
En la declaración de la interfaz sólo se indican los miembros de la clase. La parte de implementación de los métodos se
realiza una vez cerrada la interfaz.
Los métodos se programan igual que las funciones; de hecho son funciones, sólo que pertenecientes a una clase concreta.

Las funciones miembro definidas fuera de la declaración de la clase:
       Se utiliza el operador de “resolución de ámbito” (::)
       Identifica de forma única a una función de una clase determinada.
       Diferentes clases pueden tener funciones idénticas.

Formato:
Tipo_Devuelto Nombre_de_la_Clase::nombre_de_la_funcion(...arg...)
{
…
}

Es independiente del tipo de acceso (público , privado,...)
El nombre de las funciones miembro o métodos comienza por letra minúscula y deben sugerir acciones (mover, calcular,
etc.).
                     void Rueda::girar(double angulo){
                             radio+=angulo;
                     }
                     void Rueda::parar(){
                             radio=0;
                     }
                     double Rueda::obtenerRadio(){
                             return radio;
                     }

Se puede poner la implementación dentro de la declaración o definición de la clase siempre y cuando la implementación del
método sea corta (inline).
                      class Rueda{
                             private:
                                    double radio;
                             public:
                                    void girar(double angulo){ radio+=angulo;} //método INLINE
                                      void parar(){radio=0;} //método INLINE;
                                      double obtenerRadio(){return radio;} //método INLINE;;
                     };
PROGRAMACION II – SISTEMAS – Pág Nro. 5

La declaración y la implementación de una clase suelen ir en archivos separados. La cabecera no suele cambiar y la
implementación, por ello es mucho mejor separar ambas partes.
La declaración de la clase se suele realizar en un archivo de cabecera. Los archivos de cabecera tienen extensión .h
Por el contrario la implementación de una clase se coloca en un archivo de extensión .cpp. Este archivo carga la cabecera
mediante el uso de una directiva include. Ejemplo:
                       //Archivo Rueda.h
                       class Rueda {
                                 private:
                                          double radio;
                                 public:
                                          void girar(double angulo);
                                          void parar();
                                          double obtenerRadio();
                       };

                     //Archivo Rueda.cpp
                     #include “Rueda.h”
                     void Rueda::girar(double angulo){
                       radio+=angulo;
                     }
                     void Rueda::parar(){
                       radio=0;
                     }
                     double Rueda::obtenerRadio(){
                       return radio;
                     }

En los programas en los que se deseen utilizar Rueda, tenemos que compilar el código, añadiendo en la compilación el
código de Rueda.cpp además en ese código también se colocará el #include “Rueda.h”.


Crear objetos
A la hora de utilizar objetos en un programa, tenemos que incluir en primer lugar el archivo de cabecera con la declaración
de la clase y asegurarnos que se compila el código de la clase del objeto que queremos utilizar con nuestro código
compilado.
Crear objetos es simplemente indicar el nombre de la clase del objeto seguido del nombre del objeto (es decir se crean
objetos igual que se declaran variables). Ejemplo:  Rueda rueda1;

Una vez creado un objeto podemos acceder a los datos y métodos públicos del mismo. Para ello se pone el nombre del
objeto seguido de un punto y del nombre de la propiedad o método. Ejemplo:
                     rueda1.parar();
                     rueda1.girar(45.2);
                     cout<< rueda1.obtenerRadio(); //Éscribirá 45.2


Punteros y arrays a objetos
Igual que se crean apuntadores a números enteros o a Strings, podemos crear apuntadores y arrays a objetos:
                      Rueda rueda[10],       //array de 10 ruedas
PROGRAMACION II – SISTEMAS – Pág Nro. 6

                     *pRueda;              //Apuntador a una rueda
                     rueda[3].parar();     //paramos la cuarta rueda del array
                     pRueda=&rueda[2];     //el apuntador señala a la tercera rueda
                     pRueda->parar();      // es lo mismo a (*pRueda).parar();
                     cout<<pRueda->obtenerRadio(); // Es lo mismo a cout<<(*pRueda).obtenerRadio();


En el caso de los apuntadores a objetos, si queremos utilizar una propiedad o un método desde un apuntador, tenemos que
utilizar el operador -> en lugar del punto. Ese operador evita utilizar expresiones del tipo:
                      cout<<(*pRueda).obtenerRadio();


Para crear un objeto de una clase se usa la palabra reservada new. En el lenguaje C++, los objetos que se crean con new se
han de eliminar con delete. new reserva espacio en memoria para el objeto y delete libera dicha memoria.

Por ejemplo,

                     class Rectangulo{
                           int x;
                           int y;
                           int ancho;
                           int alto;

                     }

                     Rectangulo rect1=new Rectangulo(10, 20, 40, 80);

new reserva espacio en memoria para los miembros dato y devuelve una referencia que se guarda en la variable rect1 del
tipo Rectangulo que denominamos ahora objeto. Dicha sentencia, crea un objeto denominado rect1 de la
clase Rectangulo llamando al segundo constructor en el listado. El rectángulo estará situado en el punto de
coordenadas x=10, y=20; tendrá una anchura de ancho=40 y una altura de alto=80.

         Rectangulo rect2=new Rectangulo(40, 80);

Crea un objeto denominado rect2 de la clase Rectangulo llamando al tercer constructor, dicho rectángulo estará situado en
el punto de coordenadas x=0, y=0; y tendrá una anchura de ancho=40 y una altura de alto=80.

         Rectangulo rect3=new Rectangulo();

Crea un objeto denominado rect3 de la clase Rectangulo llamando al primer constructor, dicho rectángulo estará situado en
el punto de coordenadas x=0, y=0; y tendrá una anchura de ancho=0 y una altura de alto=0.


Los constructores
Un objeto de una clase se crea llamando a una función especial denominada constructor de la clase. El constructor se llama
de forma automática cuando se crea un objeto, para situarlo en memoria e inicializar los miembros datos declarados en la
clase. El constructor tiene el mismo nombre que la clase. Lo específico del constructor es que no tiene tipo de retorno.

class Rectangulo{
        int x;
        int y;
        int ancho;
        int alto;
PROGRAMACION II – SISTEMAS – Pág Nro. 7

    Rectangulo(int x1, int y1, int w, int h){
         x=x1;
         y=y1;
         ancho=w;
         alto=h;
    }
}

El constructor recibe cuatro números que guardan los parámetros x1, y1, w y h, y con ellos inicializa los miembros
dato x, y, ancho y alto.

Una clase puede tener más de un constructor. Por ejemplo, el siguiente constructor crea un rectángulo cuyo origen está en
el punto (0, 0).

class Rectangulo{
        int x;
        int y;
        int ancho;
        int alto;
   Rectangulo(int w, int h){
        x=0;
        y=0;
        ancho=w;
        alto=h;
   }
}

Este constructor crea un rectángulo de dimensiones nulas situado en el punto (0, 0),

class Rectangulo{
        int x;
        int y;
        int ancho;
        int alto;
   Rectangulo(){
        x=0;
        y=0;
        ancho=0;
        alto=0;
   }
}

Con estas porciones de código definimos la clase, y la guardamos en un archivo que tenga el mismo nombre que la
clase Rectangulo y con extensión .h

                public class Rectangulo {
                    int x;
                    int y;
                    int ancho;
                    int alto;
                    public Rectangulo() {
                        x=0;
                        y=0;
                        ancho=0;
                        alto=0;
                    }
                    public Rectangulo(int x1, int y1, int w, int h) {
                        x=x1;
                        y=y1;
                        ancho=w;
PROGRAMACION II – SISTEMAS – Pág Nro. 8

                           alto=h;
                       }
                       public Rectangulo(int w, int h) {
                           x=0;
                           y=0;
                           ancho=w;
                           alto=h;
                       }
                       int calcularArea(){
                           return (ancho*alto);
                      }
                      void desplazar(int dx, int dy){
                           x+=dx;
                           y+=dy;
                      }
                      boolean estaDentro(int x1, int y1){
                           if((x1>x)&&(x1<x+ancho)&&(y1>y)&&(y1<y+ancho)){
                                   return true;
                           }
                           return false;
                      }
                  }


 Destructores
Igual que es útil tener una función que se llame antes de utilizar un objeto para inicializaciones y preparación de uso,
también es útil que cuando deje de utilizarse haya una función para liberar recursos usados o dejar las cosas como estaban.

Tienen el mismo nombre la clase precedido por tilde (~)

Sin argumentos.

No puede sobrecargarse

Labores de limpieza y fin de uso.



Sobrecarga De Funciones
Es una de las grandes mejoras del lenguaje C++ (en C no es posible realizar ésta técnica). Consiste en definir dos veces la
misma función, pero utilizando diferentes parámetros. Ésta técnica permite que la función se adapte a todo tipo de llamadas.
Una razón para ello es este ejemplo:
                      using namespace std;
                      double cuadrado(int);
                      int main(){
                        double x=5.5;
                      int y=7;
                        cout<<cuadrado(y)<<endl; //Escribe 49
                        cout<<cuadrado(x)<<endl; //Escribe 25
                        system("pause");
                        return 0;
                      }
                      double cuadrado(int n){
                        return n*n;
PROGRAMACION II – SISTEMAS – Pág Nro. 9

                      }
La llamada con el valor 5,5 falla por que se convierte a int, ya que la función así lo pide. Lógicamente un arreglo rápido es
definir el parámetro de la función como double.
ya que ese tipo permite usar los enteros. Sin embargo otra posibilidad es definir dos veces el cuadrado:
                      using namespace std;
                      double cuadrado(int);
                      double cuadrado(double); //Segunda versión
                      int main(){
                         double x=5.5;
                      int y=7;
                         cout<<cuadrado(y)<<endl; //Escribe 49. Llama a la 1ª versión
                         cout<<cuadrado(x)<<endl; //Escribe 30.25 Segunda versión
                         system("pause");
                         return 0;
                      }
                      double cuadrado(int n){
                         return n*n;
                      }
                      double cuadrado(double n){
                         return n*n;
                      }
Aunque ahora pueda parecer absurda esta doble definición, en realidad es extremadamente útil, ya que prepara las
funciones antes todas las pasibilidades de uso.

Más contenido relacionado

La actualidad más candente

Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetoschutas666
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosPatricio Abad
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaAngel Vázquez Patiño
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a ObjetosJuan Carlos Riva
 
Fundamentos de Programación Orientada a Objetos
Fundamentos de Programación Orientada a ObjetosFundamentos de Programación Orientada a Objetos
Fundamentos de Programación Orientada a ObjetosMarines Ahuanlla
 
6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a Objetos6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a ObjetosJose Emilio Labra Gayo
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetoslindacajaperuiz
 
Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Whaleejaa Wha
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Sergio Sanchez
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOAnabel Jaramillo
 

La actualidad más candente (20)

Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Qué es la poo
Qué es la pooQué es la poo
Qué es la poo
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A Objetos
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Unidad 2 clases y objetos
Unidad 2 clases y objetosUnidad 2 clases y objetos
Unidad 2 clases y objetos
 
Fundamentos de Programación Orientada a Objetos
Fundamentos de Programación Orientada a ObjetosFundamentos de Programación Orientada a Objetos
Fundamentos de Programación Orientada a Objetos
 
6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a Objetos6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a Objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.
 
Programación 1: modularización
Programación 1: modularizaciónProgramación 1: modularización
Programación 1: modularización
 
Encapsulamiento
EncapsulamientoEncapsulamiento
Encapsulamiento
 
Conceptos poo
Conceptos pooConceptos poo
Conceptos poo
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
 
Programación Orientada Objetos Java Unidad 1
Programación Orientada Objetos Java Unidad 1Programación Orientada Objetos Java Unidad 1
Programación Orientada Objetos Java Unidad 1
 
Componentes en-poo
Componentes en-pooComponentes en-poo
Componentes en-poo
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
POO
POOPOO
POO
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETO
 

Similar a Programación orientada a objetos

Introduccion a la POO
Introduccion a la POOIntroduccion a la POO
Introduccion a la POOLibertad25
 
Conceptos y definiciones de poo (quino ortiz & miguel martinez)
Conceptos y definiciones de poo (quino ortiz & miguel martinez)Conceptos y definiciones de poo (quino ortiz & miguel martinez)
Conceptos y definiciones de poo (quino ortiz & miguel martinez)MIGUEL_INGENIERO
 
Diseño de Sistemas
Diseño de SistemasDiseño de Sistemas
Diseño de Sistemasjorgecaruci
 
Programacion Orientada Objetos.pdf
Programacion Orientada Objetos.pdfProgramacion Orientada Objetos.pdf
Programacion Orientada Objetos.pdfSantiagoValenzuela24
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetosbrandonhh10
 
Programacion orientada a objetos de Felipe Tocora
Programacion orientada a objetos de Felipe TocoraProgramacion orientada a objetos de Felipe Tocora
Programacion orientada a objetos de Felipe TocoraFelipe Ardila
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructuradavnslgars
 
Paradigma de Programación Orientado a Objetos
Paradigma de Programación Orientado a ObjetosParadigma de Programación Orientado a Objetos
Paradigma de Programación Orientado a ObjetosAlberto Blumberg
 
Programación orientada a objetos (Dominguez Gonzalez, Jose Antonio & Perez He...
Programación orientada a objetos (Dominguez Gonzalez, Jose Antonio & Perez He...Programación orientada a objetos (Dominguez Gonzalez, Jose Antonio & Perez He...
Programación orientada a objetos (Dominguez Gonzalez, Jose Antonio & Perez He...program visual
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosDoris Aguagallo
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completadoKai Exo
 

Similar a Programación orientada a objetos (20)

PRESENTACION
PRESENTACIONPRESENTACION
PRESENTACION
 
Introduccion a la POO
Introduccion a la POOIntroduccion a la POO
Introduccion a la POO
 
Programacion visual
Programacion visualProgramacion visual
Programacion visual
 
Conceptos y definiciones de poo (quino ortiz & miguel martinez)
Conceptos y definiciones de poo (quino ortiz & miguel martinez)Conceptos y definiciones de poo (quino ortiz & miguel martinez)
Conceptos y definiciones de poo (quino ortiz & miguel martinez)
 
Ed java
Ed javaEd java
Ed java
 
Ed java
Ed javaEd java
Ed java
 
Tc2 301403 21
Tc2 301403 21Tc2 301403 21
Tc2 301403 21
 
Diseño de Sistemas
Diseño de SistemasDiseño de Sistemas
Diseño de Sistemas
 
Programacion Orientada Objetos.pdf
Programacion Orientada Objetos.pdfProgramacion Orientada Objetos.pdf
Programacion Orientada Objetos.pdf
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
 
unidad 1 INTRODUCCION A LAS ESTUCTURAS DE DATOS
unidad 1 INTRODUCCION A LAS ESTUCTURAS DE DATOSunidad 1 INTRODUCCION A LAS ESTUCTURAS DE DATOS
unidad 1 INTRODUCCION A LAS ESTUCTURAS DE DATOS
 
Programacion orientada a objetos de Felipe Tocora
Programacion orientada a objetos de Felipe TocoraProgramacion orientada a objetos de Felipe Tocora
Programacion orientada a objetos de Felipe Tocora
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
 
Paradigma de Programación Orientado a Objetos
Paradigma de Programación Orientado a ObjetosParadigma de Programación Orientado a Objetos
Paradigma de Programación Orientado a Objetos
 
Programacion orientada a_objetos
Programacion orientada a_objetosProgramacion orientada a_objetos
Programacion orientada a_objetos
 
Programación orientada a objetos (Dominguez Gonzalez, Jose Antonio & Perez He...
Programación orientada a objetos (Dominguez Gonzalez, Jose Antonio & Perez He...Programación orientada a objetos (Dominguez Gonzalez, Jose Antonio & Perez He...
Programación orientada a objetos (Dominguez Gonzalez, Jose Antonio & Perez He...
 
Introduccion al lenguaje java
Introduccion al lenguaje javaIntroduccion al lenguaje java
Introduccion al lenguaje java
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetos
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completado
 
Unidad1 y 2
Unidad1 y 2Unidad1 y 2
Unidad1 y 2
 

Programación orientada a objetos

  • 1. PROGRAMACION II – SISTEMAS – Pág Nro. 1 Un programa debe ser: ● Eficaz Lo hace en un tiempo admisible. ● Adaptable o Flexible ¿Qué pasa si cambian las especificaciones? ● Reutilizable Que ante problemas parecidos, no tenga que volver a escribir todo el código y pueda aprovechar la mayor parte de él. Reutilizar ayuda a sacar más con menos esfuerzo: Copio o reutilizo código, estructuras o ideas.  Menos Equivocaciones: Reutilizo algo que ya funciona. Se ha corregido sus errores. Escribo menos código nuevo.  Menos Pruebas: Pruebo sólo lo nuevo y su integración.  Más Creativo: No rehago siempre lo mismo. Codifico nuevas funcionalidades.  Mejoran las Probabilidades de Éxito Programación desordenada En este estilo de programación, predomina el instinto del programador por encima del uso de cualquier método lo que provoca que la corrección y entendimiento de este tipo de programas sea casi ininteligible. Ejemplo de uso de esta programación (listado en Basic clásico): 10 X=RANDOM()*100+1; 20 PRINT “escribe el número que crees que guardo” 30 INPUT N 40 IF N>X THEN PRINT “mi numero es menor” GOTO 20 50 IF N<X THEN PRINT “mi numero es mayor” GOTO 20 60 PRINT “¡Acertaste!” El código anterior crea un pequeño juego que permite intentar adivinar un número del 1 al 100. Programación estructurada En esta programación se utiliza una técnica que genera programas que sólo permiten utilizar tres estructuras de control:  Secuencias (instrucciones que se generan secuencialmente)  Alternativas (sentencias if)  Iterativas (bucles condicionales) El listado anterior en un lenguaje estructurado sería (listado en Pascal): PROGRAM ADIVINANUM; USES CRT; VAR x,n:INTEGER; BEGIN X=RANDOM()*100+1; REPEAT WRITE(“Escribe el número que crees que guardo”); READ(n); IF (n>x) THEN WRITE(“Mi número es menor”); IF (n>x) THEN WRITE(“Mi número es mayor”); UNTIL n=x; WRITE(“Acertaste”); La ventaja de esta programación está en que es más legible.
  • 2. PROGRAMACION II – SISTEMAS – Pág Nro. 2 Programación modular Completa la programación anterior permitiendo la definición de módulos independientes cada uno de los cuales se encargará de una tarea del programa. De este forma el programador se concentra en la codificación de cada módulo haciendo más sencilla esta tarea. Al final se deben integrar los módulos para dar lugar a la aplicación final. El código de los módulos puede ser invocado en cualquier parte del código. Realmente cada módulo se comporta como un subprograma que a partir de unas determinadas entradas obtienen unas salidas concretas. Su funcionamiento no depende del resto del programa por lo que es más fácil encontrar los errores y realizar el mantenimiento. Programación orientada a objetos (POO) Es la más novedosa. Las aplicaciones se representan en esta programación como una serie de objetos independientes que se comunican entre sí. Cada objeto posee datos y métodos propios, por lo que los programadores se concentran en programar independientemente cada objeto y luego generar el código que inicia la comunicación entre ellos. Es la programación que ha revolucionado las técnicas últimas de programación ya que han resultado un importante éxito gracias a la facilidad que poseen de encontrar fallos, de reutilizar el código y de documentar fácilmente el código. PROGRAMACION ORIENTADA A OBJETOS (POO) La programación orientada a objetos es un paradigma que utiliza objetos como elementos fundamentales en la construcción de la solución. Surge en los años 70. Un objeto es una abstracción de algún hecho o ente del mundo real que tiene atributos que representan sus características o propiedades y métodos que representan su comportamiento o acciones que realizan. Todas las propiedades y métodos comunes a los objetos se encapsulan o se agrupan en clases. Una clase es una plantilla o un prototipo para crear objetos, por eso se dice que los objetos son instancias de clases. En la POO una aplicación se entiende como una serie de objetos que se relacionan entre sí. Cada objeto responde a una programación previamente realizada; esta programación se realiza de forma independiente, eso nos asegura que el objeto es reutilizable (se puede usar en aplicaciones distintas). En la programación orientada a objetos el diseño consiste en analizar qué objetos necesita una aplicación y cómo se relacionan entre sí. Después se pasa a realizar el código de cada objeto. El código de cada objeto se prepara sin tener en cuenta al resto de elementos del programa; eso permite que un objeto sea utilizado fácilmente en aplicaciones diferentes, gracias a la independencia del código. 1. PROPIEDADES DE LA POO  Encapsulamiento. Una clase se compone tanto de variables (propiedades) como de funciones y procedimientos (métodos). En la POO más estricta (y aconsejable) toda variable pertenece a una clase (es decir, no hay variables, sino propiedades).  Ocultación. Hay una zona oculta al definir la clases (zona privada) que sólo es utilizada por esa clases y por alguna clase relacionada. Hay una zona pública (llamada también interfaz de la clase) que puede ser utilizada desde cualquier parte del código (desde cualquier otra clase).  Polimorfismo. Cada método de una clase puede tener varias definiciones distintas. En el caso del LUDO: partida.empezar(4) empieza una partida para cuatro jugadores, partida.empezar(ROJO, AZUL) empieza una partida de dos jugadores para los colores rojo y azul; estas son dos formas distintas de emplear el método empezar, que es polimórfico.  Herencia. Una clase puede heredar propiedades y métodos de otra.
  • 3. PROGRAMACION II – SISTEMAS – Pág Nro. 3 1. CLASES Y OBJETOS Objetos Un objeto es un elemento que agrupa datos y funciones (métodos). Es decir es una estructura que posee información estática (números, textos,…) e información dinámica (procedimientos o métodos). Por ejemplo en el caso de un objeto que represente un perro, dicho objeto posee datos (llamados atributos) como la edad, el nombre, el tamaño,… y métodos como ladrar, correr,… Todo objeto en un sistema posee: una identidad, un estado y un comportamiento.  El estado marca las condiciones de existencia del objeto dentro del programa. Lógicamente este estado puede cambiar. Un automóvil puede estar parado, en marcha, estropeado, funcionando, sin gasolina, etc.  El comportamiento determina como responde el objeto ante peticiones de otros objetos. Por ejemplo un objeto conductor puede lanzar el mensaje arrancar a un automóvil. El comportamiento determina qué es lo que hará el objeto.  La identidad indica que cada objeto es único; aunque encontremos dos objetos con los mismos contenidos. No existen dos objetos iguales. En un programa los objetos se comunican entre sí lanzándose mensajes. Un mensaje es un método que permite que el objeto ejecute alguna acción. Por ejemplo, si tenemos el objeto de clase persona Pedro y este quiere arrancar su automóvil, que es otro objeto de otra clase, podría hacerlo lanzando el mensaje AutomóvilDePedro.arranca(). Clases Las clases son las plantillas para hacer objetos. Una clase sirve para definir una serie de objetos con propiedades (atributos), comportamientos (operaciones o métodos). Hay que pensar en una clase como un molde. A través de las clases se obtienen los objetos en sí. Es decir antes de poder utilizar un objeto se debe definir la clase a la que pertenece, esa definición incluye:  Sus atributos. Es decir, los datos miembros de esa clase. Los datos pueden ser públicos (accesibles desde otra clase) o privados (sólo accesibles por código de su propia clase). También se les llama campos.  Sus métodos. Las funciones miembro de la clase. Son las acciones (u operaciones) que puede realizar la clase.  Constructor. Para crear una clase normalmente hace falta realizar operaciones previas (Código de inicialización).  Destructor. Código a ejecutar cuando cada objeto de esa clase desaparezca de memoria. Es lo que se conoce como Código de finalización de la clase. Para crear una clase La creación de clases en C++ consta de dos partes: a. Definición de la interfaz de la clase. Que consiste en indicar las propiedades y métodos de la clase, sin especificar el código de los métodos, simplemente indicando la cabecera de los mismos. b. Implementación de los métodos. En esta parte se define el código de los métodos. Lo ideal es que esta fase se programe de forma independiente (incluso en un archivo distinto). a. Definición de la interfaz de la clase Se utiliza la palabra reservada class y a continuación el nombre de la clase que empieza por letra mayúscula. La definición de la clase se pone entre las llaves de apertura y cierre y un punto y coma. Es decir con }; el punto y coma aquí es obligatorio. class NombreDeClase { public: miembros dato y prototipos de funciones miembro públicos private: miembros dato y prototipos de funciones miembro privados }; En C++ por defecto se entiende que los métodos (funciones miembro) y propiedades (miembros dato) son privados por defecto, es decir que si no se indica nada se entenderá como prívate.
  • 4. PROGRAMACION II – SISTEMAS – Pág Nro. 4 class Rueda{ private: double radio; public: void girar(double angulo); void parar(); double obtenerRadio(); }; b. Implementación de los métodos En la declaración de la interfaz sólo se indican los miembros de la clase. La parte de implementación de los métodos se realiza una vez cerrada la interfaz. Los métodos se programan igual que las funciones; de hecho son funciones, sólo que pertenecientes a una clase concreta. Las funciones miembro definidas fuera de la declaración de la clase: Se utiliza el operador de “resolución de ámbito” (::) Identifica de forma única a una función de una clase determinada. Diferentes clases pueden tener funciones idénticas. Formato: Tipo_Devuelto Nombre_de_la_Clase::nombre_de_la_funcion(...arg...) { … } Es independiente del tipo de acceso (público , privado,...) El nombre de las funciones miembro o métodos comienza por letra minúscula y deben sugerir acciones (mover, calcular, etc.). void Rueda::girar(double angulo){ radio+=angulo; } void Rueda::parar(){ radio=0; } double Rueda::obtenerRadio(){ return radio; } Se puede poner la implementación dentro de la declaración o definición de la clase siempre y cuando la implementación del método sea corta (inline). class Rueda{ private: double radio; public: void girar(double angulo){ radio+=angulo;} //método INLINE void parar(){radio=0;} //método INLINE; double obtenerRadio(){return radio;} //método INLINE;; };
  • 5. PROGRAMACION II – SISTEMAS – Pág Nro. 5 La declaración y la implementación de una clase suelen ir en archivos separados. La cabecera no suele cambiar y la implementación, por ello es mucho mejor separar ambas partes. La declaración de la clase se suele realizar en un archivo de cabecera. Los archivos de cabecera tienen extensión .h Por el contrario la implementación de una clase se coloca en un archivo de extensión .cpp. Este archivo carga la cabecera mediante el uso de una directiva include. Ejemplo: //Archivo Rueda.h class Rueda { private: double radio; public: void girar(double angulo); void parar(); double obtenerRadio(); }; //Archivo Rueda.cpp #include “Rueda.h” void Rueda::girar(double angulo){ radio+=angulo; } void Rueda::parar(){ radio=0; } double Rueda::obtenerRadio(){ return radio; } En los programas en los que se deseen utilizar Rueda, tenemos que compilar el código, añadiendo en la compilación el código de Rueda.cpp además en ese código también se colocará el #include “Rueda.h”. Crear objetos A la hora de utilizar objetos en un programa, tenemos que incluir en primer lugar el archivo de cabecera con la declaración de la clase y asegurarnos que se compila el código de la clase del objeto que queremos utilizar con nuestro código compilado. Crear objetos es simplemente indicar el nombre de la clase del objeto seguido del nombre del objeto (es decir se crean objetos igual que se declaran variables). Ejemplo: Rueda rueda1; Una vez creado un objeto podemos acceder a los datos y métodos públicos del mismo. Para ello se pone el nombre del objeto seguido de un punto y del nombre de la propiedad o método. Ejemplo: rueda1.parar(); rueda1.girar(45.2); cout<< rueda1.obtenerRadio(); //Éscribirá 45.2 Punteros y arrays a objetos Igual que se crean apuntadores a números enteros o a Strings, podemos crear apuntadores y arrays a objetos: Rueda rueda[10], //array de 10 ruedas
  • 6. PROGRAMACION II – SISTEMAS – Pág Nro. 6 *pRueda; //Apuntador a una rueda rueda[3].parar(); //paramos la cuarta rueda del array pRueda=&rueda[2]; //el apuntador señala a la tercera rueda pRueda->parar(); // es lo mismo a (*pRueda).parar(); cout<<pRueda->obtenerRadio(); // Es lo mismo a cout<<(*pRueda).obtenerRadio(); En el caso de los apuntadores a objetos, si queremos utilizar una propiedad o un método desde un apuntador, tenemos que utilizar el operador -> en lugar del punto. Ese operador evita utilizar expresiones del tipo: cout<<(*pRueda).obtenerRadio(); Para crear un objeto de una clase se usa la palabra reservada new. En el lenguaje C++, los objetos que se crean con new se han de eliminar con delete. new reserva espacio en memoria para el objeto y delete libera dicha memoria. Por ejemplo, class Rectangulo{ int x; int y; int ancho; int alto; } Rectangulo rect1=new Rectangulo(10, 20, 40, 80); new reserva espacio en memoria para los miembros dato y devuelve una referencia que se guarda en la variable rect1 del tipo Rectangulo que denominamos ahora objeto. Dicha sentencia, crea un objeto denominado rect1 de la clase Rectangulo llamando al segundo constructor en el listado. El rectángulo estará situado en el punto de coordenadas x=10, y=20; tendrá una anchura de ancho=40 y una altura de alto=80. Rectangulo rect2=new Rectangulo(40, 80); Crea un objeto denominado rect2 de la clase Rectangulo llamando al tercer constructor, dicho rectángulo estará situado en el punto de coordenadas x=0, y=0; y tendrá una anchura de ancho=40 y una altura de alto=80. Rectangulo rect3=new Rectangulo(); Crea un objeto denominado rect3 de la clase Rectangulo llamando al primer constructor, dicho rectángulo estará situado en el punto de coordenadas x=0, y=0; y tendrá una anchura de ancho=0 y una altura de alto=0. Los constructores Un objeto de una clase se crea llamando a una función especial denominada constructor de la clase. El constructor se llama de forma automática cuando se crea un objeto, para situarlo en memoria e inicializar los miembros datos declarados en la clase. El constructor tiene el mismo nombre que la clase. Lo específico del constructor es que no tiene tipo de retorno. class Rectangulo{ int x; int y; int ancho; int alto;
  • 7. PROGRAMACION II – SISTEMAS – Pág Nro. 7 Rectangulo(int x1, int y1, int w, int h){ x=x1; y=y1; ancho=w; alto=h; } } El constructor recibe cuatro números que guardan los parámetros x1, y1, w y h, y con ellos inicializa los miembros dato x, y, ancho y alto. Una clase puede tener más de un constructor. Por ejemplo, el siguiente constructor crea un rectángulo cuyo origen está en el punto (0, 0). class Rectangulo{ int x; int y; int ancho; int alto; Rectangulo(int w, int h){ x=0; y=0; ancho=w; alto=h; } } Este constructor crea un rectángulo de dimensiones nulas situado en el punto (0, 0), class Rectangulo{ int x; int y; int ancho; int alto; Rectangulo(){ x=0; y=0; ancho=0; alto=0; } } Con estas porciones de código definimos la clase, y la guardamos en un archivo que tenga el mismo nombre que la clase Rectangulo y con extensión .h public class Rectangulo { int x; int y; int ancho; int alto; public Rectangulo() { x=0; y=0; ancho=0; alto=0; } public Rectangulo(int x1, int y1, int w, int h) { x=x1; y=y1; ancho=w;
  • 8. PROGRAMACION II – SISTEMAS – Pág Nro. 8 alto=h; } public Rectangulo(int w, int h) { x=0; y=0; ancho=w; alto=h; } int calcularArea(){ return (ancho*alto); } void desplazar(int dx, int dy){ x+=dx; y+=dy; } boolean estaDentro(int x1, int y1){ if((x1>x)&&(x1<x+ancho)&&(y1>y)&&(y1<y+ancho)){ return true; } return false; } } Destructores Igual que es útil tener una función que se llame antes de utilizar un objeto para inicializaciones y preparación de uso, también es útil que cuando deje de utilizarse haya una función para liberar recursos usados o dejar las cosas como estaban. Tienen el mismo nombre la clase precedido por tilde (~) Sin argumentos. No puede sobrecargarse Labores de limpieza y fin de uso. Sobrecarga De Funciones Es una de las grandes mejoras del lenguaje C++ (en C no es posible realizar ésta técnica). Consiste en definir dos veces la misma función, pero utilizando diferentes parámetros. Ésta técnica permite que la función se adapte a todo tipo de llamadas. Una razón para ello es este ejemplo: using namespace std; double cuadrado(int); int main(){ double x=5.5; int y=7; cout<<cuadrado(y)<<endl; //Escribe 49 cout<<cuadrado(x)<<endl; //Escribe 25 system("pause"); return 0; } double cuadrado(int n){ return n*n;
  • 9. PROGRAMACION II – SISTEMAS – Pág Nro. 9 } La llamada con el valor 5,5 falla por que se convierte a int, ya que la función así lo pide. Lógicamente un arreglo rápido es definir el parámetro de la función como double. ya que ese tipo permite usar los enteros. Sin embargo otra posibilidad es definir dos veces el cuadrado: using namespace std; double cuadrado(int); double cuadrado(double); //Segunda versión int main(){ double x=5.5; int y=7; cout<<cuadrado(y)<<endl; //Escribe 49. Llama a la 1ª versión cout<<cuadrado(x)<<endl; //Escribe 30.25 Segunda versión system("pause"); return 0; } double cuadrado(int n){ return n*n; } double cuadrado(double n){ return n*n; } Aunque ahora pueda parecer absurda esta doble definición, en realidad es extremadamente útil, ya que prepara las funciones antes todas las pasibilidades de uso.