Novedades Desafíos Papers y H-Zine Proyectos Foro
foros de discusión

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> Programacion Orientada a Objetos, explicacion, referencia
marioly
post Aug 18 2007, 01:11 PM
Post #1


Regia
Group Icon


Group: Root Admin
Posts: 2,007
Joined: 14-April 06
From: Mty, Nuevo Leon
Member No.: 38



Este post mas que nada como referencia, para no reparar en explicar conceptos similares cada que me adentre en un lenguaje, y como una guia basica o definición de conceptos.

Programación orientada a objetos

La programación orientada a objetos es una metodología de diseño de software que utiliza clases y objetos (como su nombre lo dice) y que promete una mejora en la implementación, depuración y tiempo de desarrollo en proyectos de software.

Para que un lenguaje se considere orientado a objetos debe contar con:
Manejo de clases
Manejo de objetos
Herencia


Las clases

Una clase es un contenedor o envoltura de datos (atributos) y comportamientos (métodos), una estructura para crear objetos a partir de ellas, en la mayoría de los lenguajes una clase se define utilizando la palabra reservada class


Los objetos

Los objetos son instancias de una clase, son tipos de datos abstractos que cuentan con atributos y comportamientos propios, es la base de la programación orientada a objetos, y se puede pensar en ellos homologándolo a la vida cotidiana (o de eso se trata..), como una bicicleta, es un objeto que tiene atributos (el color, el tamaño), y comportamientos (se mueve, vuela(broma)), en la mayoría de los lenguajes para instanciar un objeto (crearlo, reservar memoria para el) se utiliza la palabra reservada new

Encapsulamiento y ocultación de la información

La programación orientada a objetos facilita el encapsulamiento, un objeto puede cumplir con ciertas funciones sin que se conozca su estructura interna, un programador puede crear objeto que resuelva determinado problema y alguien mas puede usarlo solo ocupándose de su implementación, un objeto bien estructurado puede ser portado a otra parte del diseño del software o a otro proyecto sin preocuparse de adaptarlo para ese determinado proyecto (reutilización), me gustaba la analogía de un reproductor de CD's, un usuario puede escuchar un disco solo conociendo la forma de uso del aparato sin tener que prestar la mínima atención a su funcionamiento interno. Sin embargo los objetos pueden comunicarse entre si mismos o con el usuario por interfaces definidas por el programador.

Métodos

Un método es un procedimiento propio de un objeto, un método cumple una función y retorna (o no) un resultado, por ejemplo:
CODE
        int sumaDos(int param, int, param2)
        {
            return (param+param2);
        }


Es como una función, un concepto muy propio de los lenguajes de procedimientos , pero un método es propio de un objeto

Atributos

Los atributos son variables propias del objeto, son datos encapsulados dentro de el e indican un comportamiento del mismo, en varios lenguajes pueden ser accesadas anteponiendo la palabra reservada this

Referencias

Son atributos especiales que hacen referencia a otros objetos.

Constructores

Los constructores son métodos especiales llamados automáticamente al crear un nuevo objeto, en la mayoría de los lenguajes el constructor lleva el mismo nombre que la clase.
CODE
class MiClase
{
    MiClase() //constructor
    {
    }
}


Aunque en otros lenguajes como php se usan palabras reservadas como __construct, el constructor en muchos casos se utiliza para aplicar valores iniciales a variables miembro o ejecutar procesos administrativos, en muchos entornos de ejecución (como C++), al no crearse un constructor, el compilador crea uno vació por defecto.


Herencia

Las clases tienen una estructura jerárquica, una clase puede ser "hija" de otra clase y a la vez esa clase puede ser "padre" de otra, al derivar una clase de otra esta toma sus atributos y comportamientos (dependiendo del nivel de acceso, que explicaré luego). Al desarrollar podemos crear algunas clases un poco generales y derivarla en algunas otras un poco mas especializadas, como "Perro" con propiedades como que tiene orejas , ojos etc.. Y derivar en razas como "Rottweiler", "Chihuahua" , todos derivan de la clase perro y heredan sus atributos y comportamientos (se mueven, ladran), pero tienen sus respectivas distinciones (uno mide mas y se podria comer al otro..) .

En algunos lenguajes una clase puede heredar de otras varias, sin embargo en lenguajes como Java, una clase puede heredar de otra única clase, esto por que el tener herencia múltiple puede generar una jerarquía de clases realmente compleja y dificultar el desarrollo.

En la mayoría de los lenguajes se usa la palabra reservada extends para indicar que una clase hereda de otra

CODE
class Rottweiler extends Perro
{
}


Polimorfismo

Con el polimorfismo podemos programar en forma general y no especifica, el polimorfismo se basa en la idea de tener el mismo denominador para diferentes métodos, esto permite responder de una manera diferente a un mismo llamado, por ejemplo tener un mismo método que se llame "suma":

CODE
int sumaValores(int param, int param2)
{
    print "la suma de 2 parametros es " + (param+param);
}

int sumaValores(int param, int param2, int param3)
{
    print "la suma de 3 parametros es " + (param+param2+param3);
}


Es un método llamado igual pero su procedimiento no es el mismo (va, si es el mismo aqui, pero con diferente numero de parámetros u.u), ahora al llamar al método "suma", será ejecutado el método que cumpla con los parámetros (y tipos de parametros) del llamado:

CODE
Suma(1, 2); //Se llama el primero
Suma(1, 2, 3); //se llama el segundo



Clases Abstractas

Una clase abstracta es una clase de la cual no se pueden instanciar objetos, de estas clases solo se puden heredar otras, en desarrollo se utilizan simplemente para derivar a otras clases mas especializadas. En los lenguajes que implementan este tipo de clases se utiliza la palabra reservada abstract para indicarlas

Una clase abstracta debe tener uno o mas métodos abstractos, y estos métodos deben ser implementados en las clases derivadas.

Clases finales

Las clases finales son clases que no se pueden heredar, es la ultima parte de la estructura de clases, en los lenguajes que las implementan se utiliza la palabra reservada final

En los lenguajes como java pueden existir métodos finales, un método que se declara final no puede ser sobrescrito en clases derivadas.

Interfaces

Una interfaz es una clase únicamente para implementación en otras, en una interfaz se indican los prototipos de los métodos que debería tener un objeto pero el cuerpo del mismo debe ser escrito en las clases que la implementan, en los lenguajes que lo implementan se utiliza la palabra reservada interface para indicar una interfaz e implements para su implementación. Como:

CODE
interfaz Trasporte
{
    void avanza();
    void detente();
}

class Automovil implements Transporte
{
    void avanza()
    {
        //procesos de avanzar
    }

    void detente
    {
        //procesos de detenerse
    }

}


Después seguiré u.u, aun falta explicar los niveles de acceso, los atributos y métodos static, etc,, si alguien desea escribir sobre eso adelante happy.gif , e igualmente, si alguien desea corregir, tiene dudas, comentarios, comentarios fuera de lugar (que ya se le hizo costumbre a alguien..), adelante tongue.gif


gracias por leer u.u


--------------------
Go to the top of the page
 
+Quote Post
BeRMAnYa
post Aug 18 2007, 01:58 PM
Post #2


Manya Corazon
Group Icon


Group: Webmaster
Posts: 839
Joined: 10-December 06
From: Uruguay
Member No.: 1,546



Ahora despues hago algo parcido con vb.NET smile.gif
Solo q toi mirando un partido de fobal i no me da el tiempo smile.gif


--------------------


bolso vos sos un cagon, nunca tuvistes aguante.
Go to the top of the page
 
+Quote Post
benek
post Aug 18 2007, 03:18 PM
Post #3


Kid A!
*****


Group: Hackerss Member
Posts: 1,314
Joined: 22-March 06
From: .mx
Member No.: 6



QUOTE(marioly @ Aug 18 2007, 02:11 PM) *
Polimorfismo

Con el polimorfismo podemos programar en forma general y no especifica, el polimorfismo se basa en la idea de tener el mismo denominador para diferentes métodos, esto permite responder de una manera diferente a un mismo llamado, por ejemplo tener un mismo método que se llame "suma":

CODE
int sumaValores(int param, int param2)
{
    print "la suma de 2 parametros es " + (param+param);
}

int sumaValores(int param, int param2, int param3)
{
    print "la suma de 3 parametros es " + (param+param2+param3);
}


Es un método llamado igual pero su procedimiento no es el mismo (va, si es el mismo aqui, pero con diferente numero de parámetros u.u), ahora al llamar al método "suma", será ejecutado el método que cumpla con los parámetros (y tipos de parametros) del llamado:

CODE
Suma(1, 2); //Se llama el primero
Suma(1, 2, 3); //se llama el segundo


Ese no es el concepto de 'Polimorfismo', es 'Sobrecarga' tongue.gif

El polimorfismo se puede realizar en varias maneras, una de ellas es la sobrecarga de métodos (que es la que tú explicaste), pero en si el polimorfismo engloba:
  • Tratar una clase de varias 'formas' diferentes (como en el ejemplo que viene abajo)
  • Sobrecarga de Métodos
  • Sobrecarga de Constructores
  • Sobrecarga de Operadores
  • Up y Down-Casting
La principal implementación es el hacer que un objeto pueda tomar diferentes formas.

Un ejemplo de esto último:

Clase Instrumento
CODE
package lol;

public abstract class Instrumento {
    public void tocar() {
        System.out.println("Instrumento.tocar()");
    }
    public String tipo() {
            return "Instrumento";
    }
    public void afinar() {}
}


Clase Guitarra, extiende Instrumento
CODE
package lol;

public class Guitarra extends Instrumento {
    public void tocar() {
        System.out.println("Guitarra.tocar()");
    }
    public String tipo() { return "Guitarra"; }
    
    public void afinar() {}
    
}


Clase Piano, extiende Instrumento
CODE
package lol;

public class Piano extends Instrumento {
    public void tocar() {
        System.out.println("Piano.tocar()");
    }
    public String tipo() { return "Piano"; }
    
    public void afinar() {}

}


Clase Musica, aqui se lleva a cabo el Polimorfismo tratando la clase Instrumento de dos formas diferentes.
CODE
package lol;

public class Musica {
    // No importa el tipo de Instrumento,
    // seguirá funcionando debido a Polimorfismo:
    static void afinar(Instrumento i) {
        i.tocar();
    }

    static void afinarTodo(Instrumento[] e) {
        for(int i = 0; i < e.length; i++){
            afinar(e[i]);
        }
    }

    public static void main(String[] args) {
        Instrumento[] instrumento = new Instrumento[2];
        int i = 0;
        
        // Aqui se lleva a cabo el polimorfismo
        instrumento[i++] = new Guitarra();
        instrumento[i++] = new Piano();
        
        afinarTodo(instrumento);
    }
}


Como podemos ver arriba, el instrumento puede tomar la forma de una Guitarra o de un Piano.

el ejemplo más completo está aqui: http://javabasico.osmosislatina.com/curso/...polimorfico.htm
y acá hay otro más sencillo: http://javabasico.osmosislatina.com/curso/polimorfismo.htm

salute


--------------------
Go to the top of the page
 
+Quote Post
marioly
post Aug 18 2007, 03:23 PM
Post #4


Regia
Group Icon


Group: Root Admin
Posts: 2,007
Joined: 14-April 06
From: Mty, Nuevo Leon
Member No.: 38



QUOTE(benek @ Aug 18 2007, 04:18 PM) *
Ese no es el concepto de 'Polimorfismo', es 'Sobrecarga' tongue.gif

Monografias dice:
Polimorfismo: En un sentido literal, Polimorfismo significa la cualidad de tener más de una forma

Eso entiende tmb la sobrecarga y no es que este mal, sino ke falto explicacion smile.gif , y un poco es, por que yo soy la unica que escribo, tu casi solo vienes a criticar y a hacer copy/paste ^^


--------------------
Go to the top of the page
 
+Quote Post
TEC-DIEGO
post Aug 18 2007, 03:53 PM
Post #5


REY de Hss.com
Group Icon


Group: Root Admin
Posts: 2,926
Joined: 21-April 06
From: CRUSA
Member No.: 196



con lo del copy and paste, agree

saludos


--------------------

I do not have an attitude problem; I just have a personality you cannot handle

Freedom is sometimes just simply another perspective away
Go to the top of the page
 
+Quote Post
benek
post Aug 18 2007, 03:57 PM
Post #6


Kid A!
*****


Group: Hackerss Member
Posts: 1,314
Joined: 22-March 06
From: .mx
Member No.: 6



QUOTE
y un poco es, por que yo soy la unica que escribo, tu casi solo vienes a criticar y a hacer copy/paste ^^


no critiqué, solo aclaré xD últimamente todo me lo tomas a mal smile.gif

sobre el ejemplo, lo adapté (porque estaba larguísimo), lo modifiqué un poco y me aseguré de que corriera bien, eso no es un vil copy/paste angry.gif xD además de que se cumplió el objetivo smile.gif

anyway, ya quedó la aclaración ya no discutamos biggrin.gif

edit*

QUOTE
con lo del copy and paste, agree

saludos


pásate a ver mi último artículo wink.gif


--------------------
Go to the top of the page
 
+Quote Post
TEC-DIEGO
post Aug 18 2007, 04:26 PM
Post #7


REY de Hss.com
Group Icon


Group: Root Admin
Posts: 2,926
Joined: 21-April 06
From: CRUSA
Member No.: 196



No te voy a responder detalladamente aca, pero dime cual articulo has hecho sin copiar fragmentos de inet?, ponme el nombre aca y me lo leo, pls

No digo que sea malo, un trabajo asi, es una muy buena investigacion y muy util (inet es grande), mas si se respeta/acepta que no eres due~o de ese conocimiento al 100% y que tuviste que hacer muchas citas, cosa que tambien es respetable si se mencionan los fuentes (como lo haces), pero dime cual es ese articulo del que no has usado ni un solo copy and paste pls.

saludos


--------------------

I do not have an attitude problem; I just have a personality you cannot handle

Freedom is sometimes just simply another perspective away
Go to the top of the page
 
+Quote Post
pelu
post Aug 18 2007, 05:30 PM
Post #8


Talibán del software libre.
Group Icon


Group: Colaborador
Posts: 633
Joined: 21-April 06
From: La concha de la lora
Member No.: 164



marioly enhorabuena por el tuto,

Yo creo que el objetivo es poder explicar/enseñar "algo" (ya sea conceptos, tecnologias, etc) de una fuente mas "amigable" de los tutos que hay en internet y a su vez poder hacer preguntas al autor del tuto.

No discutan wink.gif


--------------------
Go to the top of the page
 
+Quote Post
icaruss
post Sep 25 2007, 06:13 PM
Post #9


Miembro
***


Group: Hackerss Member
Posts: 82
Joined: 21-April 06
From: Chihuahua , Mexico
Member No.: 66



lo del copy paste no aplica , nadie aprende por obra de dios , todo conocimiento probiene de algun origen , asi es que todo lo que sabemos es un copy paste , todo nos fue enseñado y solo deducimos unas pocas cosas como lo hace Benek asi es que dejen de criticar eso por que de algo sirve.


--------------------
El conocimiento es un descubrimiento progresivo de nuestra propia ignorancia
Go to the top of the page
 
+Quote Post
gercat
post Sep 26 2007, 03:32 AM
Post #10


Gatito
Group Icon


Group: Moderador Global
Posts: 1,478
Joined: 21-April 06
From: Catalunya
Member No.: 41



que buen articulo, me va muy bien, justo esto me lo estan explicando en clase, antes de ponernos a programar en java biggrin.gif


--------------------
No olvides dar un vistazo a la revista de Hackerss :)
H-Zine #1
H-Zine #2
H-Zine #3
H-Zine #4 (Diciembre 2008!!)
Go to the top of the page
 
+Quote Post
Mao
post Sep 26 2007, 08:34 AM
Post #11


Analu's Property
Group Icon


Group: Root Admin
Posts: 2,499
Joined: 29-March 06
From: Bucaramanga, Colombia.
Member No.: 24



QUOTE(benek @ Aug 18 2007, 04:57 PM) *
no critiqué, solo aclaré xD últimamente todo me lo tomas a mal smile.gif


pnk bienvenido a mi mundo..XD

con respecto al texto de marioly, me quedan algunas dudasque ando solucionando con el libro de java que me gane(con mi hermano) en la maraton de programacion del año pasado..XD

/delete


--------------------
Chatear con Mao por MSN, Aqui. (NO RESPONDO PREGUNTAS PERSONALES!!!, ah y soy hombre..XD)



http://www.yashira.org/index.php?showuser=2488
Go to the top of the page
 
+Quote Post
j0lvr
post Sep 26 2008, 02:42 PM
Post #12


Miembro
***


Group: Hackerss Member
Posts: 53
Joined: 25-September 08
From: Colombia
Member No.: 5,572



Entendi mucho sobre clases marioly ers una dura... gracias.

Go to the top of the page
 
+Quote Post
Blako