Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: OOP - Java probleem  (gelezen 2365 keer)

Offline idefix

  • Lid
OOP - Java probleem
« Gepost op: 2009/10/05, 21:29:57 »
Hallo programmeurs,
Ik wil in Java een programma maken om zinnen te ontleden in woorden.

Ik maak een klasse Woord waarvan ik dan (via overerving) de verschillende woordsoorten afleid:
bvb:

class Werkwoord extends Woord{
//hier de code voor de klasse Werkwoord
}

Een werkwoord is een woord. Een lidwoord is een woord. Dus hier zijn afgeleide klassen inderdaad op hun plaats.

De woorden worden opgeslagen in een database (in MySQL) die verschillende tabellen bevat: de moedertabel bevat de volgende kolommen:

woord_id (om het woord uniek te kunnen bepalen)
woord     (het woord zelf dus)
categorie  (bvb. werkwoord)
categorie_id  (de id uit de tabel "werkwoorden")

En dan heeft elke categorie zijn eigen tabel: bvb. de tabel werkwoorden heeft o.a. de volgende kolommen:
werkwoord_id (verwijst naar categorie_id uit moedertabel)
noemvorm  (bvb. "lopen")
stam  (bvb. "loop")
3e persoon enkv tegenwoordige tijd (bvb. "loopt")
woord_id  (verwijst naar id in de moedertabel)

Een goede OOP-aanpak vraagt dat de objecten zelf het verkeer tussen de database en henzelf afhandelen. Nu is mijn vraag: waar zet ik die afhandeling ? In de klasse "Woord" ontbreken gegevens. Anderzijds, als het programma een woord voorgeschoteld krijgt, moet het eerst nog opzoeken in de moedertabel om welke categorie het gaat.
Dus: zet ik de data-transfer-mechanismes in de klasse "Woord" of in de afgeleide klasse "Werkwoord"?

PS: ik wil hier niet op details ingaan, zoals synoniemen (bvb. loop is een werkwoord en substantief [loop van geweer])
Tevens weet ik dat bvb de tabel werkwoorden onvolledig is. Ik wil deze post kort houden.
Ik zou graag een globaal plan hebben hoe ik dit aanpak. Met heel veel dank voor het denkwerk.
 
Support bacteria. They're the only culture some people have.

Offline bram103

  • Lid
Re: OOP - Java probleem
« Reactie #1 Gepost op: 2009/10/06, 18:37:42 »
Citaat
"Een goede OOP-aanpak vraagt dat de objecten zelf het verkeer tussen de database en henzelf afhandelen."
Volgens mij zijn er ook theorieen die beweren dat je dit juist niet moet doen.

Ik zou 0,0 kennis van de database in Woord en de daarvan afgeleide klassen zetten en een 'Factory' klasse maken die het verkeer met de database regelt. De factory heeft dan zoiets als: public Woord get(String woord) {} deze method zoekt het woord op in de database, maakt een object van de juiste subklasse vult dit met gegevens en geeft het terug aan de vrager.

Gr,
Bram

Offline idefix

  • Lid
Re: OOP - Java probleem
« Reactie #2 Gepost op: 2009/10/06, 19:13:21 »
Hey Bram103,

bedankt voor je heldere antwoord. Ik had deze vraag deze morgen ook op het Java-forum gezet en daar kreeg ik hetzelfde antwoord.  Merci!
Support bacteria. They're the only culture some people have.

Offline bram103

  • Lid
Re: OOP - Java probleem
« Reactie #3 Gepost op: 2009/10/08, 12:00:18 »
Citaat
bedankt voor je heldere antwoord. Ik had deze vraag deze morgen ook op het Java-forum gezet en daar kreeg ik hetzelfde antwoord.

Graag gedaan.

Zomaar uit nieuwsgierigheid: Waarom ga je zinnen op deze mannier ontleden in woorden?

Offline idefix

  • Lid
Re: OOP - Java probleem
« Reactie #4 Gepost op: 2009/10/08, 13:39:54 »
Ik zou een programma willen maken dat zinnen kan ontleden op een ondubbelzinnige manier. Deze manier kan dan gebruikt worden om de zin te vertalen.
Ik zie heel vaak manke vertalingen van zinnen:

We are like you  -> We houden van jullie

In bovenstaand voorbeeld is de woordsoort van "like" verkeerd begrepen. "like" is hier opgevat als een werkwoord, terwijl er al een werkwoord in die zin staat ("are").

Ik denk dat daar op allerlei fronten hard aan gewerkt wordt; Ik heb een idee dat zou kunnen helpen en ik wil dat eens uitwerken. Het komt erop neer dat een woord ipv enkel de grammaticale eigenschappen ook nog associaties krijgt. Een voorbeeld:

haan (het dier) kan de volgende associaties krijgen: "dier, vogel, hoen, pluimvee, kraaien, kukelekuu"
haan (van een geweer) kan de volgende associaties krijgen "trekker, overhalen, geweer, schieten"

Op die manier kan een programma uit de context van een tekst en uit de associaties verbonden met "haan", met grotere zekerheid bepalen om welk soort haan het gaat.

Trouwens, ik ben momenteel de variant met Python en SQLite aan het bekijken. Python programmeert toch een stuk sneller dan Java. Maar het OOP-probleem is gelijkaardig.

Support bacteria. They're the only culture some people have.

Offline bram103

  • Lid
Re: OOP - Java probleem
« Reactie #5 Gepost op: 2009/10/08, 19:17:11 »
Leuke uitdaging om je tanden in te zetten!

Citaat
Trouwens, ik ben momenteel de variant met Python en SQLite aan het bekijken. Python programmeert toch een stuk sneller dan Java. Maar het OOP-probleem is gelijkaardig.

Klopt, OOP als concept staat los van de programmeertaal.
Google maar eens op 'design patterns', neem niet alles voor "DE" oplossing, maar vaak kom je toch wel dingen tegen die je op weg kunnen helpen met de opzet van een programma.  
« Laatst bewerkt op: 2009/10/08, 19:20:58 door bram103 »