[Alg: Java/C#] iets dat mij een beetje ergert.

Pagina: 1
Acties:

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:07
Iets wat ik leuk vind aan C++ en aan Object Pascal, is dat je je member functies buiten je class kunt uitwerken. Hiermee bedoel ik het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Test
{
  private:
    int x, y;
  public:
    Test();
    Test(int, int);
    int som();
};

Test::Test()
{
 x = y = 0;
}

int Test::som()
{
 return x + y;
}

Zo krijg je nl. een mooi overzicht binnen je class welke functies je hebt, zonder dat dat overzicht vergalt wordt door de uitwerking van de functies binnen je class.

In C# en Java moet je nl. alles binnen de class zelf doen.

Nu, C# en Java zijn natuurlijk wel volledig OO, wat C++ niet is, maar de mogelijkheid om functie prototype en functie definitie gescheiden te houden doet toch eigenlijk geen afbreuk aan het OO principe? Waarom is dit dan eigenlijk niet mogelijk?

https://fgheysels.github.io/


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:59

.oisyn

Moderator Devschuur®

Demotivational Speaker

ja maar in java en in C# denk ik ook zijn de prototypes gewoon helemaal niet nodig

In C++ heb je de klasse prototypen nodig omdat de compiler anders niet weet welke functies een klasse heeft.

In java en C# is het zo geregeld dat de compiler het wel weet, omdat ze die informatie vergaren uit de al gecompileerde klassen. (kweet eigenlijk niet of dat tijdens compiletime of runtime is)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • tomato
  • Registratie: November 1999
  • Niet online
Zo krijg je nl. een mooi overzicht binnen je class welke functies je hebt, zonder dat dat overzicht vergalt wordt door de uitwerking van de functies binnen je class.
Misschien eens naar Interfaces kijken? Al is dat niet echt wat je hier vraagt.

Maar ik begrijp eigenlijk niet helemaal wat je probleem is, zie ook OiSyN's reactie...

[ge-edit]

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 28 januari 2002 21:29 schreef whoami het volgende:Waarom is dit dan eigenlijk niet mogelijk?
Is wel mogelijk in java, met de zgn. Interface of abstract class. Maar mij lijkt het helemaal niet handig, want wat doe je als je 200 classess met elk 20 methoden hebt?

Ga je die dan allemaal ergens anders definieren?? Dus 4000 verschillende methodes OOK nog es buiten de class-files van die ene class halen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:07
Op maandag 28 januari 2002 21:33 schreef OiSyN het volgende:
ja maar in java en in C# denk ik ook zijn de prototypes gewoon helemaal niet nodig

In C++ heb je de klasse prototypen nodig omdat de compiler anders niet weet welke functies een klasse heeft.
Die prototypes heb je idd niet meer nodig, maar het is wel een manier om heel het boeltje een beetje overzichtelijk te houden. Nu kan het gewoon niet meer.

https://fgheysels.github.io/


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als je overzicht wilt kan je eventueel een interface definieren, maar dit zou je alleen moeten doen als een interface ook daadwerkelijk nodig is vanwege een bepaald design.

Verder: ach, het is een keuze. Ik me voorstellen dat mensen het bijvoorbeeld onduidelijk vinden als een methode body niet bij de declaratie staat...

Verder heb je altijd nog Javadoc (en een alternatief in C#) om een overzicht van methoden van een klasse te hebben.

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


  • whoami
  • Registratie: December 2000
  • Laatst online: 12:07
Op maandag 28 januari 2002 21:34 schreef ACM het volgende:

Is wel mogelijk in java, met de zgn. Interface of abstract class. Maar mij lijkt het helemaal niet handig, want wat doe je als je 200 classess met elk 20 methoden hebt?
In C# heb je ook Interfaces zoals tomato al zei.
Ga je die dan allemaal ergens anders definieren?? Dus 4000 verschillende methodes OOK nog es buiten de class-files van die ene class halen?
In dezelfde file mag voor m'n part ook wel, maar waarom niet? In C++ was het makkelijk, de class definitie in de .h file en de uitwerking ervan in de .cpp file.

https://fgheysels.github.io/


  • tomato
  • Registratie: November 1999
  • Niet online
Goeie van mbravenboer, ik denk dat JavaDoc behoorlijk voldoet voor wat je wilt (in C# kun je hier de compiler voor gebruiken, gebruik makend van XML).

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:07
Op maandag 28 januari 2002 21:42 schreef tomato het volgende:
Goeie van mbravenboer, ik denk dat JavaDoc behoorlijk voldoet voor wat je wilt (in C# kun je hier de compiler voor gebruiken, gebruik makend van XML).
Die XML vorm van commentaar bedoel je?
code:
1
///

https://fgheysels.github.io/


Verwijderd

Op maandag 28 januari 2002 21:38 schreef whoami het volgende:


In dezelfde file mag voor m'n part ook wel, maar waarom niet? In C++ was het makkelijk, de class definitie in de .h file en de uitwerking ervan in de .cpp file.
Ja en je hoeft niet de gehele file door te scrollen er achter te komen wat voor methods er allemaal in een class staan.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
whoami: Die XML vorm van commentaar bedoel je?
In C# is het idd XML, in Java niet. Het idee is dat je bij een functie een korte omschrijving geeft van het doel, de parameters, het resultaat en mogelijke exceptions. Javadoc kan hieruit documentatie genereren in vele vormen (zoals bijvoorbeeld de standaard Java API documentatie). Je hebt zo een compact overzicht van alle methoden die een klasse biedt...

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


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 28 januari 2002 21:45 schreef vicz het volgende:
Ja en je hoeft niet de gehele file door te scrollen er achter te komen wat voor methods er allemaal in een class staan.
Daar heb je toch je class-ontwerp/specificaties en documentatie voor? ;)

  • tomato
  • Registratie: November 1999
  • Niet online
whoami: Die XML vorm van commentaar bedoel je?
JavaDoc heeft geen XML syntax, maar zoals mbravenboer al zei gaat het net als bij C# om het kort toelichten van classes en methods in een bepaalde opmaak waarbij je bijvoorbeeld parameters en return values behandelt.

Voorbeeldje in JavaDoc:
code:
1
2
3
4
5
6
7
8
/**
 * Removes Friend object from list
 *
 * @todo           Implementation
 *
 * @param name     Name used to identify Friend object
 */
public void removeFriend (String name) {

Dit kan JavaDoc dan verwerken tot erg mooie documentatie van je project.

edit:
Onderstaande is het vergelijkbare in C#:

code:
1
2
3
4
5
/// <summary>Removes Friend object from list</summary>
/// <remarks>TODO: Implementation</remarks>
/// <param name="name">Name used to identify Friend object</param>

public void removeFriend (string name) {

Hier kan de C# compiler vervolgens een mooie XML file van maken die je class documenteert. Hier kun je uiteraard direct documentatie in ieder formaat dat je zelf leuk vindt van maken mbv XSLT :)

[edit] oja, string type met een kleine letter in C# ;)

Verwijderd

Op maandag 28 januari 2002 21:50 schreef ACM het volgende:

[..]

Daar heb je toch je class-ontwerp/specificaties en documentatie voor? ;)
Misschien ben ik ouderwets bezig, maar de .h file is voor mij de blauwdruk van een class, implementatie valt daar buiten. Als ik aan het programmeren ben kijk ik daar meestal in (voor eigen gemaakte klassen). Documentatie gegenereerd door o.a. JavaDoc vind ik meer iets voor de buitenwereld als je bijvoorbeeld een library maakt.

Functies die op 1 regel kunnen worden geimplementeerd gooi ik wel in de klasse zelf.

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:07
Op maandag 28 januari 2002 21:57 schreef vicz het volgende:

[..]

Misschien ben ik ouderwets bezig, maar de .h file is voor mij de blauwdruk van een class, implementatie valt daar buiten. Als ik aan het programmeren ben kijk ik daar meestal in (voor eigen gemaakte klassen). Documentatie gegenereerd door o.a. JavaDoc vind ik meer iets voor de buitenwereld als je bijvoorbeeld een library maakt.
Hier ben ik het eigenlijk redelijk mee eens. Als je aan het proggen bent, kun je veel sneller een overzicht krijgen door gewoon de class def. in de header file te bekijken dan dat je voor iedere functie een rits commentaar moet schrijven om dat overzicht te krijgen.
Die doc is dan wel weer handig voor de buitenwereld. Volledig mee eens.
Functies die op 1 regel kunnen worden geimplementeerd gooi ik wel in de klasse zelf.
Zelfs dat doe ik niet. Ik zwier alles erbuiten, zelfs functies die op 1 lijn implementeerbaar zijn.

https://fgheysels.github.io/


Verwijderd

In VB heb je F2 (object-inspector), en je kunt voor C# ook wel wat moois krijgen.

Ik denk dat dit een tool-gerelateerd probleem is (en het lijkt een taal-probleem, omdat je vroeger alles twee keer in moest typen :(, nu gelukkig niet meer :))

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:07
Op maandag 28 januari 2002 22:11 schreef Doekman het volgende:

Ik denk dat dit een tool-gerelateerd probleem is (en het lijkt een taal-probleem, omdat je vroeger alles twee keer in moest typen :(, nu gelukkig niet meer :))
CTRL-C CTRL-V ? Bespaart ook heel wat typwerk en ik heb het er voor over.

Verder heb je in Delphi oa de mogelijkheid om aan 'Class Completion' te doen. Je schrijft je functie prototypes, je doet 'Class completion' en de IDE zorgt ervoor dat je enkel nog je functie body hoeft te schrijven.

https://fgheysels.github.io/


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Op maandag 28 januari 2002 22:03 schreef whoami het volgende:
Hier ben ik het eigenlijk redelijk mee eens. Als je aan het proggen bent, kun je veel sneller een overzicht krijgen door gewoon de class def. in de header file te bekijken dan dat je voor iedere functie een rits commentaar moet schrijven om dat overzicht te krijgen. Die doc is dan wel weer handig voor de buitenwereld. Volledig mee eens.
misschien begrijp ik het verkeerd maar een goede IDE geeft toch ook een overzicht van alle klassen en methoden in een sidebar?

en inderdaad vind ik JavaDocs ook meer iets voor de buitenwereld om jouw eigen API te bestuderen, of voor als je later zelf iets moet wijzigen.

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • Rukapul
  • Registratie: Februari 2000
  • Laatst online: 12:34
Op maandag 28 januari 2002 22:29 schreef limoentje het volgende:

[..]

misschien begrijp ik het verkeerd maar een goede IDE geeft toch ook een overzicht van alle klassen en methoden in een sidebar?

en inderdaad vind ik JavaDocs ook meer iets voor de buitenwereld om jouw eigen API te bestuderen, of voor als je later zelf iets moet wijzigen.
Of iets vergelijkbaars ja :)

VS.NET beschikt bovendien over folding waardoor je de body van functies kan collapsen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:07
Op maandag 28 januari 2002 22:29 schreef limoentje het volgende:

misschien begrijp ik het verkeerd maar een goede IDE geeft toch ook een overzicht van alle klassen en methoden in een sidebar?
Dan moet je natuurlijk wel een goede IDE hebben, en als je die niet hebt, dan heb je pech natuurlijk.

https://fgheysels.github.io/


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op maandag 28 januari 2002 21:29 schreef whoami het volgende:
Iets wat ik leuk vind aan C++ en aan Object Pascal, is dat je je member functies buiten je class kunt uitwerken. Hiermee bedoel ik het volgende
(...)
In C# en Java moet je nl. alles binnen de class zelf doen.
Wat weerhoudt je ervan om het als commentaar op te nemen in je bestanden? :) (Dus gewoon bovenaan een prototype van je klasse)

  • tomato
  • Registratie: November 1999
  • Niet online
Even over de gedachte dat het idee van JavaDoc en C# XML documentatie alleen voor buitenstaanders bedoeld is:

Je kunt er natuurlijk van maken wat je wilt. Desnoods maak je een XSL die de door de C# compiler uitgespuugde XML documentatie omzet in een formaat vergelijkbaar met C++ header files. Dan heb je eigenlijk met 1 druk op de knop wat je wilt. Met een druk op een andere knop genereer je dan uit de zelfde source files uitgebreide documentatie voor buitenstaanders.

Overigens vind ik JavaDoc ed niet echt voor de 'buitenwereld'. Informatie over je classes en methods lijkt me toch vooral interessant voor mededevelopers en jezelf.

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:07
Op maandag 28 januari 2002 23:36 schreef tomato het volgende:
Even over de gedachte dat het idee van JavaDoc en C# XML documentatie alleen voor buitenstaanders bedoeld is:
Hiermee bedoelde ik eigenlijk 'documentatie voor 3th party programmeurs die uw classes gebruiken.'.

https://fgheysels.github.io/

Pagina: 1