[ALG] OOP denken in de praktijk *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • lamko
  • Registratie: December 2001
  • Laatst online: 20-10-2024
Heb een simpel bash script en dit wil ik omzetten naar een Python Gui programma samen met WxPython.
Dit wil ik graag op een object georienteerde manier doen, ik weet dat dit niet noodzakelijk is maar wel zeer handig kan zijn.

Mijn bash script maakt mijn server wakker met wake on lan hier in het kort wat het script doet :
Is er een werkende netwerkverbinding ? Is dit het geval stuur dan een magic packet !
Is de server bereikbaar door middel van ping ? Zo ja, draait het file server gedeelte ?
File server werkend -> Geef waarschuwing dat er gewerkt kan worden op de file server.

Waar begin je ?
Eerste probleem wat definieer ik als class ?
Mijn eigen idee : Class Computer met de sub classes Client en server.
Computer heeft een ipadres, Toestand van de computer aan/uit
ClientActie Class en ServerActies Class
Als ik alle acties nu onderverdeel in Actie Classes hoe kan ik deze onafhankelijk functies dan weer hergebruiken
Hoe stel ik hier een geheel uit samen ?
Heb zelf al verschillende boeken over OOP gelezen alleen het omzetten van theorie naar praktijk !
En vond zelf deze onderstaande Delphi voorbeeld wel mooi omdat het niet eens ging over een auto of een persoon :
http://www.nldelphi.com/c....exe/ShowArticle?ID=15240

Deze link echt heel basis :
http://www.softwaredesign.com/objects.html

En dit lijkt mij echt een hele goede uitleg maar net of ik iets wat ik wil gewoon te klein is voor OOP.
http://www.tuxradar.com/practicalphp/6/2/2

Daarnaast nog verschillende Python Pdf's

Dit zal vast voor jullie wel super simpel zijn. En weinig interessants aan maar als iemand me n klein stukje kan laten zien van hoe je bijv zo iets opbouwt.

[ Voor 4% gewijzigd door lamko op 27-01-2010 21:53 ]

And this !! Is to go even further beyond!!!


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Voor zo'n eenvoudig script zou ik het simpel houden. Wat dacht je van een class Host met methode is_online() en een ip property.

Je GUI kan eenvoudig die methode aanroepen en het resultaat weergeven. In die methode zou ik dan ongeveer die stappen die je noemt zetten, eventueel aparte module(s) voor het 'low-level' ping en wake-on-lan gebeuren.

Jouw eigen idee van ServerActies etc. kan ook wel, je zou zelfs voor elke actie een class kunnen maken: PingAction, WolAction, CheckFSAction, etc., die allemaal inheriten van een base class. Elke class geef je dan een bepaalde methode en die voer je uit. Maar dat lijkt me hier enorm overkill eerlijk gezegd en of het nu echt voordelen heeft in de praktijk...

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Het is inderdaad een klein projectje, dus ik zou ook niet al te moeilijk doen. In principe kun je een klasse maken met de methodes die je al beschrijft en is er nog geen noodzaak om aparte actie klasses te maken.

pseudocode:
code:
1
2
3
4
5
6
7
8
9
class ServerCheck {
  var status:string = 'unknown'; // natuurlijk gebruik je hier class constants, denk aan: no_connection, ping_in_progress, host_up, host_down, wakeup_in_progress, fscheck_in_progress, fs_up, fs_down :p
  ServerCheck(servername, ip, interface) // constructor met alle server parameters
  function isServerUp():bool  // check je verbinding en kijk of je de server kan bereiken
  function getServerUp():bool  // doe een server wakeup
  function isFilesystemUp():bool
  getters voor de serverparameters
  function ifServerDownGetItUp():bool // gebruik bovenstaande methodes om je server in 1 keer up te krijgen indien nodig
}

Als je een verzameling van deze objecten bijhoudt kun je een list control maken in je GUI die zo nu en dan de status opvraagt. Als je net begint met Python heb je daar je handen waarschijnlijk al vol aan.

Als je de serverchecks asynchroon wilt laten lopen (aan te raden) dan kun sommige methodes in een aparte thread uitvoeren. Threading doorgronden is alleen minstens zo lastig als OOP leren. ;) Misschien is er een workerclass oid die je kan gebruiken, ik weet eigenlijk niet zo goed hoe dat gaat in Python.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • lamko
  • Registratie: December 2001
  • Laatst online: 20-10-2024
@JanDM
Waarom laat je het hele client class gedeelte weg is dit omdat je het moet zien uit het oogpunt van de client ?

Wat ik me ook afvraag kan ik buiten de class ook nog gewoon functies gebruiken ? Vast wel, maar wanneer komt het omslagpunt om hier een class voor te maken en de functie hier in te zetten als methode.

Ik wil graag een goede basis hebben over OOP wat zijn een beetje zo maar te zeggen de vuistregels ?

And this !! Is to go even further beyond!!!


Acties:
  • 0 Henk 'm!

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Functies die geen eigen data hebben (of erop opereren) hoef je niet in een class te hebben opzich , maar kun je statisch maken of in een library hangen oid ;).

Een sqrt functie is hier een voorbeeld van.

i3 + moederbord + geheugen kopen?


Acties:
  • 0 Henk 'm!

  • lamko
  • Registratie: December 2001
  • Laatst online: 20-10-2024
@zwippie
Je GUI vraagt de status, ik dacht meer aan is er een status update stuur die dan naar de list box.
Bij threading ga je uit van meerdere servers dit gaat nu voor namelijk om een server.

@boudewijn
bedankt voor de uitleg

And this !! Is to go even further beyond!!!


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
lamko schreef op woensdag 27 januari 2010 @ 22:54:
@JanDM
Waarom laat je het hele client class gedeelte weg is dit omdat je het moet zien uit het oogpunt van de client ?
Ja, jouw programma kun je zien als de client. De client wil praten met de server, dus heb je een object nodig dat die server 'representeert'.

Threading kan ook handig zijn met 1 server, omdat je niet wil dat je UI 'bevriest' als een server een timeout geeft ofzo. Gebruik je meerdere threads dan kun je idd wel een notificatie naar de UI-thread sturen van 'er is iets gewijzigd'.

Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 13-09 10:55

Nick_S

++?????++ Out of Cheese Error

lamko schreef op woensdag 27 januari 2010 @ 23:08:
@zwippie
Je GUI vraagt de status, ik dacht meer aan is er een status update stuur die dan naar de list box.
Dit is bekend onder de term MVC, Model View Controller, waarbij de Controller dus het model kan updaten en de view de opdracht geven om te refreshen.
Bij threading ga je uit van meerdere servers dit gaat nu voor namelijk om een server.
Nope, hoeft niet perse, als je je GUI responsive wilt houden, terwijl je ook aan het wachten bent op een server, heb je al twee threads, eentje die je GUI aanstuurt en eentje die op de server aan het wachten is.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • lamko
  • Registratie: December 2001
  • Laatst online: 20-10-2024
MVC is handig om het programma later uit te breiden met extra functies maar dit is hier niet nodig.
Verder maak ik gebruik van threading met behulp van wx.CallAfter.

And this !! Is to go even further beyond!!!

Pagina: 1