Toon posts:

[OOP]? Instelling moet functie bepalen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een applicatie die een apart device uit moet kunnen lezen. Voor dit uitlezen heb ik voorlopig twee manieren geprogrammeerd: Via de seriele of de paralelle poort.

In de applicatie kan ik bij de instellingen aangeven welke methode gebruikt moet worden.

Als de functie uitlezen wordt aangeroepen check ik eerst met een simpel if-statement welke instelling er is gekozen. Afhankelijk hiervan spring ik naar LeesSerieel() of LeesParallel(). Nou denk ik dat dit beter moet kunnen op een OOP manier, zodat afhankelijk van de instelling direct de juiste manier wordt gekozen. Daar kom ik echter niet echt uit. Heeft iemand hiervoor een goeie suggestie? Of is er geen andere manier?

Straks wil ik nl. ook de USB versie gaan maken, en dit zorgt dan voor redelijk veel werk om dit toe te voegen. Het moet dus haast wel anders/beter kunnen.

BTW: Nu is alles in Delphi ingeklopt, maar ik denk er hard over om naar C++ over te stappen.

Thanx.

edit:

Programmeertaal vergeten...

  • Onno
  • Registratie: Juni 1999
  • Niet online
Uhm.. gewoon iets als dit?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
type
  TDevice = class
    procedure Lees(); virtual;
    ...
  end;

  TSerialDevice = class(TDevice)
    procedure Lees(); override;
    ...
  end;

  TParallelDevice = class(TDevice)
    procedure Lees(); override;
    ...
  end;

var
  device:TDevice;

procedure TDevice.Lees();
begin
  ...
end;

procedure TSerialDevice.Lees();
begin
  ...
end;

procedure TParallelDevice.Lees();
begin
  ...
end;

begin
  if (...)
    device = TSerialDevice.Create()
  else
    device = TParallelDevice.Create();
  device.Lees();

end.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je kan inderdaad gewoon een interface definieren en deze op verschillende manieren implementeren. Je kan dit daarna heel mooi combineren met een Factory design pattern. Deze factory maakt dan instanties van je concrete implementatie.

In omgevingen met dynamic-class-loading zou de instelling heel gemakkelijk kunnen verwerken zonder gevalsonderscheid door de concrete implementatie dynamisch aan te maken.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Juicy
  • Registratie: December 2000
  • Laatst online: 19:11
Of op de C++ manier:

class CDevice {
virtual bool read(...);
}

clas CSerialDevice : public CDevice {
bool read(...);
}

class CParallelDevice : public CDevice {
bool read(...);
}

class CUsbDevice : public CDevice {
bool read(...);
}

>:)

-


Verwijderd

Topicstarter
if (...)
device = TSerialDevice.Create()
else
device = TParallelDevice.Create();
device.Lees();
Maar als eerst de serieele variant is gekozen en daarna de parallele, dan heb ik dus twee keer de variabele naam 'device'. Of is het in delphi zo (net als in C++) dat na een functie de lokale variabelen automatisch worden opgeheven?

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op dinsdag 04 december 2001 20:21 schreef delighteddennis het volgende:
Maar als eerst de serieele variant is gekozen en daarna de parallele, dan heb ik dus twee keer de variabele naam 'device'.
In de code die jij quote wordt helemaal geen variabele gemaakt, dat gebeurt hier:
code:
1
2
var
  device:TDevice;

Dus uhm... :?

Verwijderd

Topicstarter
|:( ik zit inderdaad ernstig te slapen |:(

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Of je doet het zo: (in C++)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class dev_reader()
{
  ...

  void (*read)();

  ...
};

void read_serial()
{
}

void read_parallel()
{
}

void read_usb()
{
}

void read_firewire() // ;)
{
}

int main()
{
  ...

  dev_reader *a_dev_reader;

  ...

  if (...)
  {
    a_dev_reader->read = read_serial;
  }
  else
  {
    a_dev_reader->read = read_parallel;
  }

  ... 

  a_dev_reader->read();

  ...
}

:z

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Onno
  • Registratie: Juni 1999
  • Niet online
Dat is niet echt een OOP oplossing.

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Op vrijdag 07 december 2001 11:17 schreef Onno het volgende:
Dat is niet echt een OOP oplossing.
Klopt, maar zo kun je als je wilt via een DLL nieuwe drivers gebruiken. Soft-coded dus.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Onno
  • Registratie: Juni 1999
  • Niet online
Eh.. dat kan toch ook wel als je een class extend?
Pagina: 1