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:
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 , e igualmente, si alguien desea corregir, tiene dudas, comentarios, comentarios fuera de lugar (que ya se le hizo costumbre a alguien..), adelante
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'
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.
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'
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 , y un poco es, por que yo soy la unica que escribo, tu casi solo vienes a criticar y a hacer copy/paste ^^
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
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 xD además de que se cumplió el objetivo
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.
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.
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
no critiqué, solo aclaré xD últimamente todo me lo tomas a mal
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