Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-11-2010
setq setq is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 6
Poder: 0
setq Va por buen camino
Dudas OOP de un regresado a Delphi desde java.

Buenas, mi primer mensaje en este foro. Decir que vengo de java y creo tener la mayoria de conceptos de OOP claros. Hace dos años que no toco el Delphi, antes programaba muchisimo con él pero nunca pasaba de los formularios y no llegue a crear clases de cero, cosa que en java es a la orden del dia. Por tanto no se los entresijos de como implementa Delphi la OOP. Me gustaria aprenderlo lo mas rapidamente posible y por eso expondré preguntas sencillas de respuesta rápida para no cansar.

Lo primero que me ha dejado confuso es la clausula "class". Yo declaraba los objetos hace años con "object", no sabia que existia "class" en Delphi. Y si encima ademas permite usar "object" es cuando me confundo, asi que qué diferencia hay entre uno y otro?.

Referente a la visibilidad en las class y la encapsulacion:

Código:
 
type A = class
  var a:integer;
  procedure p1;
 
 private 
  var b:integer;
  procedure p2;

 public 
  var c:integer;
  constructor Create;
end;
La variable a y el procedimiento p1 son publicos, privados, o como?. No seran estaticos por casualidad, o sea, de clase?.

Si no fueran estaticos, como se declararian los procedimientos y variables de clase, o sea, estaticos?.

Si declaro en la seccion interface de la misma unit una constante fuera de la clase, una instancia de esa clase en la seccion implementation vera la constante?.

La vera una instancia de otra clase en otra unit que haga uso (uses) de la anterior?.

El constructor debe llamarse siempre Create o puede llamarse como yo quiera y por tanto haber varios constructores?.

Inherits es como el super(); de java?.

Existe la sobrecarga de procedimientos y funciones en Delphi?.

He visto algo de declaraciones con interface, es que existen las interfaces
en Delphi?.

En caso afirmativo, como se declararia una clase que implementa a una interfaz?

En internet solo he encontrado manuales basicos para iniciarse en Delphi. Conocen algun manual o tutorial que vaya al grano, para programadores avanzados, es decir, como un resumen que me ponga al dia rapidamente en Delphi y sus particularidades con la OOP.

PD: Si que lei la guia de estilo y se que son muchas preguntas, pero todas pertenecen a la misma inquietud y creo que no procede abrir un hilo para cada una.

Gracias.
Responder Con Cita
  #2  
Antiguo 12-11-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Thumbs up

Bueno son demasiadas preguntas, pero vamos a tratar de responderte las que podamos, Aclaro que no me considero un master en delphi ni en POO .
Cita:
Empezado por setq Ver Mensaje
...
Lo primero que me ha dejado confuso es la clausula "class". Yo declaraba los objetos hace años con "object", no sabia que existia "class" en Delphi. Y si encima ademas permite usar "object" es cuando me confundo, asi que qué diferencia hay entre uno y otro?.
...
De la ayuda de Delphi 7>
Cita:
As an alternative to class types, you can declare object types using the syntax

type objectTypeName = object (ancestorObjectType)
memberList
end;

where objectTypeName is any valid identifier, (ancestorObjectType) is optional, and memberList declares fields, methods, and properties. If (ancestorObjectType) is omitted, then the new type has no ancestor. Object types cannot have published members.

Since object types do not descend from TObject, they provide no built-in constructors, destructors, or other methods. You can create instances of an object type using the New procedure and destroy them with the Dispose procedure, or you can simply declare variables of an object type, just as you would with records.

Object types are supported for backward compatibility only. Their use is not recommended.
En otras palabras se puede crear clases de ambas formas, tanto usando Object como Class, pero yo aconsejo a usar mejor la segunda para una mejor compresion y por que ya estamos acostumbrados.
Cita:
Empezado por setq Ver Mensaje
Referente a la visibilidad en las class y la encapsulacion:

Código:


type A = class
var a:integer;
procedure p1;

private
var b:integer;
procedure p2;

public
var c:integer;
constructor Create;
end;

La variable a y el procedimiento p1 son publicos, privados, o como?. No seran estaticos por casualidad, o sea, de clase?.
Tanto la varible "a" y el Procedimiento p1 son Publicos.
Cita:
Empezado por setq Ver Mensaje
Si no fueran estaticos, como se declararian los procedimientos y variables de clase, o sea, estaticos?.
Un método estático de clase se define así:
Código Delphi [-]
type
  TFigure = class
  public
    class function Supports(Operation: string): Boolean;
    class procedure GetInfo(var Info: TFigureInfo);
    ...
  end;
Y su implementacion de uno de ellos por ejemplo sería:

Código Delphi [-]
class procedure TFigure.GetInfo(var Info: TFigureInfo);
begin
  ...
end;
Las varibles estáticas no existe en delphi a menos yo no las conosco.
Sinembargo creo saber que apartir de Delphi 2007 se han agregado muchas cosas al lenguaje Delphi como tal, para lo cual te recomiendo leer sin flojear estas nueves (1, 2, 3, 4, 5, 6, 7, 8 y 9 ) partes de este estupendo artículo.
Cita:
Empezado por setq Ver Mensaje
Si declaro en la seccion interface de la misma unit una constante fuera de la clase, una instancia de esa clase en la seccion implementation vera la constante?.
La vera una instancia de otra clase en otra unit que haga uso (uses) de la anterior?
Explicate un poco mejor y si es posible con ejemplo.
Cita:
Empezado por setq Ver Mensaje
El constructor debe llamarse siempre Create o puede llamarse como yo quiera y por tanto haber varios constructores?.
Puede llamarse lo que sea, siempre y cuando se tenga cuidado de hacer bien las cosas, ademas lo ideal es usar siempre el nombre Create, ya que por estandar la mayoria de los programadores lo utilizamos y ademas aprovechamos la herencia ya que toda clase en delphi tiene como ancestro a la clase TObject.
Cita:
Empezado por setq Ver Mensaje
Inherits es como el super(); de java?.
Se prodría decir que sí, aunque existe cierta diferencia diría yo.
Cita:
Empezado por setq Ver Mensaje
Existe la sobrecarga de procedimientos y funciones en Delphi?.
Por supuesto que si.
Cita:
Empezado por setq Ver Mensaje
He visto algo de declaraciones con interface, es que existen las interfaces
en Delphi?.

En caso afirmativo, como se declararia una clase que implementa a una interfaz?
Mira estos artículos sin flojear> 1, 2 y 3 .
Espero haberte podido ayudar.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 12-11-2010
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Te lo hago más fácil( no es que quiera desmerecer a rgstuamigo que se ha dedicado y tomado el tiempo a buscar y comentar al respecto): lee el libro La Cara Oculta de Delphi, que trae todo un capítulo dedicado al tema POO y también más adelante, al tema de las Interfaces.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 12-11-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Bienvenido tu regreso al mundo Delphi, setq, donde la sintaxis del lenguaje es, por decirlo, más humana.

Loo el esmero de Roberto para responderte y secundo la atinada recomendación de Marcelo.

Aporto un grano de arena:

Cita:
Empezado por setq Ver Mensaje
Si declaro en la seccion interface de la misma unit una constante fuera de la clase, una instancia de esa clase en la seccion implementation vera la constante?.

La vera una instancia de otra clase en otra unit que haga uso (uses) de la anterior?
La respuesta para ambas preguntas es sí. Todo identificador declarado en la sección Interface de una unidad, mientras no se encuentre restringido dentro de una clase, tiene ámbito global, y por tanto puede ser accedido desde cualquier parte del código dentro o fuera de dicha unidad.

Un saludo.

Al González.
Responder Con Cita
  #5  
Antiguo 12-11-2010
setq setq is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 6
Poder: 0
setq Va por buen camino
Me voy a leer sin flojear esos articulos que parece que son lo que buscaba, algo breve y rapido.

Delphius, gracias por la recomendacion del libro, ya lo conocia pero necesito ponerme al dia cuanto antes con algo mas breve, y lo de mgstuamigo creo que me va mejor.

Y gracias por las respuestas, ya tengo algo andado.

Nos leemos en mi proxima duda!.

Saludos.
Responder Con Cita
  #6  
Antiguo 12-11-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por rgstuamigo Ver Mensaje
...
Las variables estáticas no existe en delphi a menos yo no las conosco.
Sinembargo creo saber que apartir de Delphi 2007 se han agregado muchas cosas al lenguaje Delphi como tal...
Me corrijo: Pues sí se puede declarar variables estáticas o de clase, e incluso constantes estáticas, pero solo a partir de la version Delphi 2007 hacia adelante , eso lo podemos ver en la parte número 6 del artículo que mencioné en mi anterior post.
Código Delphi [-]
TAlumno = class
class var
  Nombre: String;//<--Variable estática 
public
  class procedure SetNombre( N: String );//<-Método estáticos
  class function GetNombre: String;//<-Método estáticos
end;
Lástimosamente en mi Delphi 7 aún no se contaba con las declaracion de Variables estáticas o de clase, pero para los que poseen una version de Delphi 2007,Delphi 2009, Delphi 2010 o la última que es Delphi XE, pues tranquilamente pueden hacer uso de tal caracteristica.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 13-11-2010 a las 19:34:59.
Responder Con Cita
  #7  
Antiguo 14-11-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Siendo estrictos y siguiendo el ejemplo de rgstuamigo los métodos estáticos deberían declararse tal que así:
Código Delphi [-]
TAlumno = class
class var
  Nombre: String;//<--Variable estática 
public
  class procedure SetNombre( N: String ); static;//<-Método estáticos
  class function GetNombre: String; static;//<-Método estáticos
end;

Tal y como se indica en uno de los mejores documentos de Embarcadero que yo haya leido nunca (por su claridad y concisión):
http://edn.embarcadero.com/article/34324

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Programacion de Tareas desde java analondo JAVA 0 12-03-2007 23:53:59
Consulmir Web Service delphi desde Java vhr JAVA 1 27-02-2007 00:55:51
ejecutar jsp desde codigo java joel20 JAVA 0 11-07-2006 11:56:36
Enviar Java desde Delphi mazinger Internet 8 13-05-2006 20:19:19
Ejecutar una sentencia desde java samuvk JAVA 1 27-05-2004 14:43:28


La franja horaria es GMT +2. Ahora son las 11:10:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi