Klasse als argument

Status
Niet open voor verdere reacties.

onlinejeroen

Nieuwe gebruiker
Lid geworden
6 jan 2014
Berichten
2
Ik ben sinds kort met Java aan het stoeien en probeer onderstaande code te doorgronden

Code:
//voorgaande code

File file = new File("fileWrite2.txt");
FileWriter fw = new FileWriter(file);

//overige code

Ik vraag me af wat het argument "file" in het stukje 'new FileWriter(file)' precies doet.
Het lijkt er op dat een hele klasse als argument wordt meegegeven maar wat is het nut hiervan ?

Is hier een Java Expert die dit (misschien met een klein voorbeeld) in "Jip en Janneke taal" kan uitleggen ?
 
bekijk eens
Code:
this.writer = new PrintWriter(fname, "UTF-8");
this.writer.println("<?php");
 
Ik vraag me af wat het argument "file" in het stukje 'new FileWriter(file)' precies doet.

Het geeft het object(!) "file" door aan de constructor van class FileWriter.

Noot dat je en object doorgeeft, geen class. Het helpt niet echt dat alles hier file heet:

File bestandobject = new File(bestandsnaam);
FileWriter bestandschrijver = new FileWriter(bestandobject);

Dus het object bestandschrijver zou nu gebruik moeten maken van het bestandobject object, wat weer gebruik maakt van het bestand dat je aanwijst met bestandsnaam.
 
beide bedankt voor het reageren op mijn vraag!

@PgVincent: inderdaad er wordt een object doorgegeven :o.
Na de laatste 2 zinnen uit jouw antwoord gingen er gelijk ook wat lampjes branden.

Ik ben weer even verder op weg geholpen.

Dank!
 
beide bedankt voor het reageren op mijn vraag!

@PgVincent: inderdaad er wordt een object doorgegeven :o.
Na de laatste 2 zinnen uit jouw antwoord gingen er gelijk ook wat lampjes branden.

Ik ben weer even verder op weg geholpen.

Dank!
Dus dat is dan een begin

bekijk nu ook eens als die class een interface wordt en als je iets aanpast aan dat object dat je meegeeft en dan erachter kijken naar de uitkomsten
//voorgaande code

Klasse1 file = new Klasse1("fileWrite2.txt");
Klasse2 fw = new Klasse2(file);
file.toonwatklasse2deed();
//overige code
 
Een vollediger antwoord lijkt mij: het is een objectgeoriënteerd ontwerp (Java is immers een objectgeoriënteerde programmeertaal) en biedt daardoor alle voordelen van objectgeoriënteerd programmeren. En wat is het nut van objectgeoriënteerd programmeren? Sowieso lijkt objectgeoriënteerd programmeren veel meer op de manier waarop wij de wereld interpreteren en voelt daardoor natuurlijker aan. Wanneer je bijvoorbeeld aan een spel als boter, kaas en eieren denkt en waar het uit bestaat, dan denk je aan een bord om op te spelen en de spelers die het spel spelen. Bij een autorace denk je bijvoorbeeld aan een racebaan en raceauto's. Deze simpele voorbeelden geven het idee wel weer.

Maar objectgeoriënteerd programmeren kent meer voordelen dan alleen een denkwijze die natuurlijker aanvoelt. De File klasse biedt bijvoorbeeld functionaliteit om te controleren of een bestand wel bestaat, er lees- en/of schrijfrechten zijn en nog een hoop meer functionaliteit. Een FileWriter heeft deze functionaliteit ook nodig (deze moet immers weten of je wel een geldig pad hebt ingegeven en of je wel de rechten hebtom naar deze locatie te schrijven) en deze zou dan dus ook geïmplementeerd moeten worden wanneer deze functionaliteit niet door een File-object geboden zou worden. Het meest voor de hand liggende nadeel van een dergelijke manier van programmeren is uiteraard dat je functionaliteit dubbel aan het schrijven bent (wat meer tijd kost en ook het onderhoud lastiger maakt), maar een ander nadeel is dat niet iedere klasse enkel en alleen over de eigenschappen beschikt die echt nodig zijn (en die extra functionaliteit daar dus eigenlijk niet logisch is; nog even los van het feit dat een klasse ook complexer wordt naarmate er meer functionaleit wordt toegevoegd).

Een ander groot voordeel is dat het de code veel flexibeler maakt. Stel bijvoorbeeld dat je de behoefte hebt om compressie op bestanden toe te passen. De standaard File klasse is voor dit doel niet toereikend en zou je daarom graag van extra functionaliteit willen voorzien. Doordat het bij objectgeoriënteerd programmeren ook mogelijk is een uitbreiding van een bestaande klasse te maken kun je dit heel makkelijk bereiken door iets als:

[cpp]
public class CompressedFile extends File {
public void compress() {
// ...
}
public void decompress(){
// ...
}
public boolean isCompressed(){
// ...
}
}
[/cpp]

En omdat CompressedFile is afgeleid van File kan deze overal gebruikt worden waar een File verwacht wordt, en dus zo ook bij de FileWriter uit je voorbeeld. Maar ik zou zeggen verdiep je eens in objectgeoriënteerd programmeren. Het is in een objectgeoriënteerde programmeertaal als Java sowieso van toegevoegde waarde gezien deze een objectgeoriënteerd ontwerp kent en je daar dan ook gebruik van kan maken.
 
Ik denk dat dit stuk tekst veel beter tot zijn recht zou komen in een artikel of een blogpost, dan als antwoord op "wat doet deze variabele in dit stukje code".
Wat je post is zondermeer waar, maar in het geheel niet relevant voor de vraag en wij zijn met z'n vieren waarschijnlijk de enigen die dit hier ooit zullen lezen.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan