Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2010
ioco ioco is offline
Miembro
 
Registrado: ene 2010
Posts: 42
Poder: 0
ioco Va por buen camino
lio con una asignación

Buenos días ^^

Hace unos días hice la típica unit de principiante con un record y una serie de funciones y procedures ya que la POO aún me da algo de respeto y de momento solo me aclaré de forma elemental con el uso de objetos ya creados.

La cuestión es que me he decidido a convertir esa unit en una unit para almacenar un objeto (hace semanas lo intenté y acabé desistiendo y opté por aplazarlo para seguir leyendo y practicando las bases.)

Así que aquí les traigo el objeto en si

Código Delphi [-]
Type
      TComplejo = class
                Re,
                Img,
                Modulo,
                ArgumentoGrados,
                ArgumentoRadianes:Extended;
                N:LongInt; //Índice para la raíz n-esima
                SolucionesRaizN:TFPObjectList;
                {Función de construcción de un complejo (todo = 0)}
                Constructor NuevoNumero;
                {Procedimiento para rellenar la parte de coordenadas polares de la variable}
                Procedure CalcularPolar;
                {Procedimiento para rellenar la parte de coordenadas rectangulares de la variable}
                Procedure CalcularRectangular;
                {Función para sumar dos complejos}
                Function Suma(a,b:TComplejo);
                {Función para restar dos complejos}
                Function Resta(a,b:TComplejo);
                {Función para multiplicar dos complejos}
                Function Multiplica(a,b:TComplejo);
                {Función para dividir dos complejos}
                Function Divide(a,b:TComplejo);
                {Función para obtener el logaritmo natural de un complejo}
                Function Ln(a:TComplejo); overload;
                {Función para elevar un complejo a otro complejo}
                Function Eleva(a,b:TComplejo);
                {Función para sacar la raíz n-ésima de un complejo}
                Function RaizN(a:TComplejo;b:LongInt);

Suponiendo que el código completo de la unit esté correcto (no me ha dado ningun error de compilación) y esperando que no haya sorpresas (que las habrá seguro xD) cuando empiece a llamar al objeto por primera vez desde un form, les pego aquí la parte que me dio la duda (pongo la function completa para contextualizar, el problema está señalado con '//' espero se entienda bien :S):

Código Delphi [-]
      Function TComplejo.RaizN;
               Var
                  i:LongInt;
                  z:=TComplejo;
               Begin
                    {Si el índice de la raíz es 0, entonces damos como resultado un complejo 0}
                    If N<0 then
                       Begin
                            z:=TComplejo.NuevoNumero;
                            ListaSoluciones:=TFPObjectList.Create;
                            ListaSoluciones.Add(z);
                            z.free;
                       end
                    {Si el índice de la raíz es 1, entonces damos como resultado el mismo complejo}
                    else If N=1 then
                         Begin
                              z:=TComplejo.NuevoNumero;
                              z:= ;//¿z:=self? para asignar a los atributos de z los valores de los de
                                  //la instancia de TComplejo con la que estemos trabajando
                              ListaSoluciones:=TFPObjectList.Create;
                              ListaSoluciones.Add(z);
                              z.free;
                         end
                    {Si el índice de la raíz es >1, entonces damos las N soluciones}
                    else
                        ListaSoluciones:=TFPObjectList.Create;
                        For i:=1 to N do
                            Begin
                                 z:=TComplejo.NuevoNumero;
                                 {Cálculo de la raíz en formato polar}
                                 z.Modulo:=Power(Modulo,1/N);
                                 z.ArgumentoRadianes:=(2*Pi*(i))/N;
                                 {Conversión de radianes a grados}
                                 z.ArgumentoGrados:=RadToDeg(z.ArgumentoRadianes);
                                 {Modificación del formato rectangular}
                                 CalcularRectangular(z);
                                 {Añadir solución a la lista de soluciones}
                                 ListaSoluciones.Add(z);
                                 z.free;
                            end;
               end;

Un saludo y mil gracias por su tiempo

Última edición por ioco fecha: 11-03-2010 a las 08:31:33.
Responder Con Cita
  #2  
Antiguo 11-03-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Por lo que entiendí, creo que quieres "clonar" un objeto, en ese caso te conviene reimplementar el método Assign y utilizarlo.

PD: ¿No te resulta sumamente incómoda esa forma de identación?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 11-03-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
Cita:
Empezado por delphi.com.ar Ver Mensaje
PD: ¿No te resulta sumamente incómoda esa forma de identación?
Sangrado, sangrado.
Responder Con Cita
  #4  
Antiguo 12-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Cita:
Empezado por delphi.com.ar Ver Mensaje
PD: ¿No te resulta sumamente incómoda esa forma de identación?
Fue exactamente lo mismo que pensé al entrar al hilo
Es indentación me hace sentir incómodo leyendo. ¿Será la costumbre?
En fin, yo no entendí bien lo que necesitás. Algunos datos más tal vez ayuden.
Tus funciones no devuelven ningún tipo de dato, eso va contra la definición de function.
Por otro lado, donde remarcás el problema, ¿ahí necesitas que z sea igual al número complejo que estás usando?
En ese caso, como bien dice delphi.com.ar deberías tener un método de asingación entre 2 objetos de tu clase.
Saludos!!!
Responder Con Cita
  #5  
Antiguo 12-03-2010
ioco ioco is offline
Miembro
 
Registrado: ene 2010
Posts: 42
Poder: 0
ioco Va por buen camino
Siento no haber podido entrar antes, que he tenido un día un poco atareado jeje

Tal como dice delphi.com.ar, lo que quería era clonar una instancia. Entiendo que el método que sugieren para la clonación es asignando propiedad a propiedad mediante ":=" ¿me equivoco?.

Lo de las functions es un fallo mío que ya corregí de un ejemplo que entendí mal del libro, sorry.

Respecto al tema del sangrado, identación o como queramos llamarlo, me tiene un poco mosca porque me fijo bastante en que quede bien claro y agrupado todo por conjuntos y tal y no acabo de entender qué es lo que les resulta incómodo o molesto. Si me lo pudieran aclarar prometo adaptar el código a su explicación
Responder Con Cita
  #6  
Antiguo 13-03-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por ioco Ver Mensaje
Tal como dice delphi.com.ar, lo que quería era clonar una instancia. Entiendo que el método que sugieren para la clonación es asignando propiedad a propiedad mediante ":=" ¿me equivoco?.
No, me refería a complementar el método Assign:


Código Delphi [-]
procedure TMyClass.Assign(Source: TPersistent);
begin
  if Source is TMyClass then
    with Source as TMyClass do
    begin
      FField1 := Field1; 
      FField2 := Field1; 
      FField3 := Field1; 
      ...
    end 
  else
    inherited Assign(Source);
end;

Cita:
Empezado por ioco Ver Mensaje
Respecto al tema del sangrado, identación o como queramos llamarlo, me tiene un poco mosca porque me fijo bastante en que quede bien claro y agrupado todo por conjuntos y tal y no acabo de entender qué es lo que les resulta incómodo o molesto. Si me lo pudieran aclarar prometo adaptar el código a su explicación
Yo intento escribir como Borland sugirió: http://edn.embarcadero.com/article/10280

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 13-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Ya no hace falta ayudarte con la asignación, la que te pasó delphi.com.ar es la justa y necesaria.
Pero con el tema de la indentación yo sigo mi regla de lectura solamente:
Cada vez que agrupe código (ya sea entre un begin y end, o después de una estructura de control simple como IF o FOR, etc) cada renglón inmediato antes del final lleva una indentación.
Ejemplo:
Código Delphi [-]
begin
  //Indento
  //todo
  //lo que esté adentro
  if True then
    //Indento la única línea del if simple
  if True then begin
    //Indento todo
    //el begin
    //y el end
  end;
  for I:=1 to 10 do
    //Exactamente igual al IF anterior
  //Esto esta afuera del IF y del FOR, pertenece al primer BEGIN
  //así que lo indento
end;
Eso para cada conjunto de sentencias marcadas por un begin - end o una estructura de control (simple - de una sola línea - o compleja - con más de una lína, o sea con begin end).
Responder Con Cita
Respuesta



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
Error de asignacion de parametros. BuenaOnda MS SQL Server 1 10-04-2017 13:55:29
Asignacion Automatica frholguin Varios 9 19-10-2006 10:24:54
Asignación dinámica de propiedades Mariana OOP 3 14-11-2005 21:44:22
Asignacion de campos jdangosto OOP 1 05-08-2005 10:41:11
Asignación IP juanchi Internet 1 24-09-2003 19:07:05


La franja horaria es GMT +2. Ahora son las 17:19:57.


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