Archief - java programmeren

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

NeverwinterX

Legacy Member
mausdabber zei:
Akkoord. Zet je schrap:
* In Java alloceer je alles, zelfs als er maar één instantie van een object nodig is. Software-matig is dit niet nodig.
* In Java leer je niet wat geheugen de-alloceren is, want dat doet java voor jou.
* Java doet heel veel met exception handling, een luxe zeg maar die je afleert hoe je routines maakt die alle (fout)situaties opvangen.
* Java mist een aantal zaken die niet nodig zijn omdat het ding in een VM draait, maar die wel essentieel zijn in de software-wereld: pointers, alignment, bit-velden, geheugen de-alloceren, unsigned types.
* Dit ga je niet graag horen: Java verbiedt goto. Nochtans is het leerrijk om de voor- en nadelen ervan te bestuderen gewoon door het te proberen. Als je zoals ik vaak eerst een schema tekent en dat dan omzet in source code dan kan een goto best wel noodzakelijk zijn, of net niet en je doen inzien dat het schema verbeterd kan worden.

Ik heb samengewerkt met mensen die van Java naar C++ zijn omgeschakeld en vice versa. Het valt me op dat iemand met C++ achtergrond goede Java-software maakt. Het valt me ook op dat iemand die na jaren Java overstapt op C++ vaak geen goede software schrijft, net vanwege m'n argumenten: hij alloceert objecten tot in den treure, hij creëert geheugenlekken omdat hij vergeet te de-alloceren, pointers begrijpt hij niet goed.

Ik breek Java niet af, in tegendeel, ik gebruik het af en toe zelf, je kan er mooie software mee maken. Maar Java is geen goede basis om te leren programmeren of software te leren begrijpen. Het is te simpel en software is niet simpel.

Allez goed, I'll bite. Denk eens over het volgende na: kreeg je in de lagere school calculus, reële en imaginaire getallen, hogere wiskunde en lineaire algebra? Nee ze beginnen langzaam. Net op die manier is Java veel geschikter om te beginnen. Je kan Java bekijken als een subset van C++ (uiteraard is dit niet volledig correct om te zeggen, maar het komt dicht in de buurt). Als je eerst Java leert kan je daarna gemakkelijk C++ leren: het zijn maar enkele dingen die erbij komen.

Voorts hecht je ook een overmatig belang aan low level zaken en premature optimalisatie (sqrt(evil)): er zijn nog maar zeer weinig toepassingsgebieden waar deze van belang zijn. Java is zeker niet te simpel en uitstekend geschikt voor de meerderheid van alle toepassingen.

Het valt mij trouwens ook op dat velen die altijd C++ hebben gebruikt en daarna overstappen naar Java gore code schrijven. Je kan daarmee beide kanten op.

Dit zijn trouwens de principes waarop Java gebouwd is, moet je eens lezen. Dat stemt tot nadenken:
  • Reading is more important than writing
  • Code should be a joy to read
  • The language should not hide what is happening
  • Code should do what it seems to do
  • Simplicity matters
  • A clear semantic model greatly boosts readability
  • Every “good” feature adds more “bad” weight
  • Sometimes it is best to leave things out
(Bron: Project Coin at Devoxx 2010 : Joseph D. Darcy's Oracle Weblog )

mausdabber

Legacy Member
Messias. zei:
Alles wat je opsomt is boekhouding, dat raakt niet aan de essentie van programmeren. C kan inderdaad perfect gebruikt worden in een eerste cursus programmeren, maar niet om de redenen die je hebt opgesomd. Java heeft het voordeel dat je kan focussen op de essentie. Diegenen die nog nooit een lus van dichtbij hebben gezien, kunnen segfaults etc. missen als kiespijn. De scope van de dingen die jij opsomt gaat niet verder dan embedded programmeren, besturingssystemen en compilers. Dat zijn ook niet toevallig de domeinen waar C echt tot zijn recht komt. Voor de rest van de wereld zijn die dingen compleet en volledig irrelevant.

Wat is dan volgens jou de essentie van programmeren ? Jouw mening graag.

mausdabber

Legacy Member
NeverwinterX zei:
Allez goed, I'll bite. Denk eens over het volgende na: kreeg je in de lagere school calculus, reële en imaginaire getallen, hogere wiskunde en lineaire algebra? Nee ze beginnen langzaam. Net op die manier is Java veel geschikter om te beginnen. Je kan Java bekijken als een subset van C++ (uiteraard is dit niet volledig correct om te zeggen, maar het komt dicht in de buurt). Als je eerst Java leert kan je daarna gemakkelijk C++ leren: het zijn maar enkele dingen die erbij komen.

We spreken over de unief, niet de lagere of middelbare school. In de unief leer je moeilijke dingen.

NeverwinterX zei:
Voorts hecht je ook een overmatig belang aan low level zaken en premature optimalisatie (sqrt(evil)): er zijn nog maar zeer weinig toepassingsgebieden waar deze van belang zijn. Java is zeker niet te simpel en uitstekend geschikt voor de meerderheid van alle toepassingen.

Tegenwoordig heeft iedereen een afkeer van "low level". Da's natuurlijk handig gezegd als het te moeilijk wordt. Voor mij is er geen "low level" of "high level", het is allemaal hetzelfde vakgebied: software.

NeverwinterX zei:
Het valt mij trouwens ook op dat velen die altijd C++ hebben gebruikt en daarna overstappen naar Java gore code schrijven. Je kan daarmee beide kanten op.

Wat is gore code ?

NeverwinterX zei:
Dit zijn trouwens de principes waarop Java gebouwd is, moet je eens lezen. Dat stemt tot nadenken:
  • Reading is more important than writing
  • Code should be a joy to read
  • The language should not hide what is happening
  • Code should do what it seems to do
  • Simplicity matters
  • A clear semantic model greatly boosts readability
  • Every “good” feature adds more “bad” weight
  • Sometimes it is best to leave things out
(Bron: Project Coin at Devoxx 2010 : Joseph D. Darcy's Oracle Weblog )

Da's nogal syntax-gebaseerd, niet ? BTW, leesbaarheid is een mythe.

NeverwinterX

Legacy Member
mausdabber zei:
We spreken over de unief, niet de lagere of middelbare school. In de unief leer je moeilijke dingen.



Tegenwoordig heeft iedereen een afkeer van "low level". Da's natuurlijk handig gezegd als het te moeilijk wordt. Voor mij is er geen "low level" of "high level", het is allemaal hetzelfde vakgebied: software.



Wat is gore code ?



Da's nogal syntax-gebaseerd, niet ? BTW, leesbaarheid is een mythe.

Alles wat je zegt zijn klassieke non-arguments en klassieke retorische ontwijktrucs. Je brengt niets inhoudelijks aan. Zwijg dan als je niet weet wat zeggen.

kimdenkt

Legacy Member
mausdabber zei:
Wat is dan volgens jou de essentie van programmeren ? Jouw mening graag.

In de meeste situaties is de essentie van programmeren het zo efficient mogelijk (gemeten in mandagen) omzetten van requirements in werkende software.
Liefst door middel van leesbare en onderhoudbare code, aangezien dat toelaat om toekomstige requirements ook efficient te implementeren.

Wolf2000me

Legacy Member
My2c, want hier wordt nogal wat zever verkocht, imho.

mausdabber zei:
Akkoord. Zet je schrap:
* In Java alloceer je alles, zelfs als er maar één instantie van een object nodig is. Software-matig is dit niet nodig.

Je moet mij eens uitleggen wat je onder alloceren verstaat. In java wordt een object instantie pas "gealloceerd" wanneer dit nodig is. Ik zie niet in hoe je iets afgehandeld krijgt als je *nooit* een object aanmaakt.
In C++ kan je toch evengoed vergeten van je objecten op het juiste moment te verwijderen? Ik zie het verschil in foute code niet met een programmeur die gans de tijd een overdaad aan objecten maakt. Erger nog.. Wanneer een C++ programmeur AFAIK vergeet van objecten te verwijderen dan blijven die bestaan 'tot in den treure' of tot de server crasht. Wanneer een onvoorzichtige Java programmeur teveel objecten aanmaakt maar ze omwille van hun nutteloosheid nooit naar refereert zullen deze automatisch verwijderd worden.


mausdabber zei:
* In Java leer je niet wat geheugen de-alloceren is, want dat doet java voor jou.

Dat is dus utter bollocks. Het is aan de programmeur om te weten waar, en hoe een object door de VM gaat "garbage collected" worden. Het is waar dat er in java geen expliciete destructor bestaat, maar de finalize() methode bestaat wel degelijk en fungeert op die manier. Maar zelfs dat is niet nodig, de VM is slim genoeg om te weten wanneer er geen verwijzingen meer naar een bepaald object meer bestaan en waardoor dat object dus verwijderd mag worden. Zoek maar op: "heap", "stack" en "garbage collector".

mausdabber zei:
* Java doet heel veel met exception handling, een luxe zeg maar die je afleert hoe je routines maakt die alle (fout)situaties opvangen.

Niks houd je als java programmeur tegen om exceptions op te vangen, in te slikken en deze routinematig te behandelen. Maar imo is dit crappy code. Exceptions zijn net zeer nuttig om op een efficiënte manier fouten in het systeem te behandelen en daar gevolg aan te geven. Trouwens exceptions bestaan in C++ toch ook? :)

mausdabber zei:
* Java mist een aantal zaken die niet nodig zijn omdat het ding in een VM draait, maar die wel essentieel zijn in de software-wereld: pointers, alignment, bit-velden, geheugen de-alloceren, unsigned types.

De VM zorgt ten eerste al voor platform onafhankelijke software. Verder zijn alle objecten in java pointers. Enkel primitieve variabelen zijn dit niet. Hierdoor gebeurt alles dmv. call by reference, uiteraard uitgezonderd primitieve variabelen.
De zogenaamde "bit-velden" zijn bruikbaar in C++ omdat dit relatief platform afhankelijk is en past in een "word", wat vertaald wordt naar een cpu adres (edx, eax, ...) register. In de VM is dit niet nodig en niet nuttig en zeker al niet efficiënter.

mausdabber zei:
* Dit ga je niet graag horen: Java verbiedt goto. Nochtans is het leerrijk om de voor- en nadelen ervan te bestuderen gewoon door het te proberen. Als je zoals ik vaak eerst een schema tekent en dat dan omzet in source code dan kan een goto best wel noodzakelijk zijn, of net niet en je doen inzien dat het schema verbeterd kan worden.

Een labelled break en continue bestaan wel degelijk in Java... Ze worden echter maar uiterst zelden gebruikt omwille van hun bijna nutteloosheid. Ik zit al enkele jaren in het vak en heb nog nooit zoiets gebruikt of zelfs maar gezien.

mausdabber zei:
Ik heb samengewerkt met mensen die van Java naar C++ zijn omgeschakeld en vice versa. Het valt me op dat iemand met C++ achtergrond goede Java-software maakt. Het valt me ook op dat iemand die na jaren Java overstapt op C++ vaak geen goede software schrijft, net vanwege m'n argumenten: hij alloceert objecten tot in den treure, hij creëert geheugenlekken omdat hij vergeet te de-alloceren, pointers begrijpt hij niet goed.

Ik denk dat uw stelling enkel opgaat voor mensen die in hun eerste weken van omschakeling zitten en even aanpassing nodig hebben. Een Java programmeur die pointers niet goed begrijpt is geen goeie Java programmeur.

mausdabber zei:
Ik breek Java niet af, in tegendeel, ik gebruik het af en toe zelf, je kan er mooie software mee maken. Maar Java is geen goede basis om te leren programmeren of software te leren begrijpen. Het is te simpel en software is niet simpel.

Volgens mij is de simpelste oplossing de beste oplossing. We moeten niet allemaal opnieuw het wiel uitvinden he.
Java lijkt simpel, zeker als je het in z'n enge betekenis bekijkt, maar Java is ook alle open-source frameworks zoals Spring, Hibernate, iText, ... Deze 3 frameworks zijn ondertussen na lang zagen geport naar .net en c#. En verder is Java een volledig Object Georiënteerde taal die op een paar semantische zaken na even ingewikkeld kan zijn als c++. Alleen is het platform onafhankelijk en heb je daarvoor geen ingewikkeld geheugen- en machine afhankelijke bewerkingen en declaraties meer voor nodig.


Het is helemaal geen kwestie van het slechter dan of beter dan... Het is een kwestie van deftig gebruik van de programmeertaal en deftige keuze van de taal voor het gestelde probleem.

Wolf2000me

Legacy Member
mausdabber zei:
We spreken over de unief, niet de lagere of middelbare school. In de unief leer je moeilijke dingen.

Moeilijk is een relatief begrip. Zoals ik ook al eerder zei (nog maar net eerder, dus np :p) is de simpelste oplossing de beste oplossing. Of toch uitermate vaak.

mausdabber zei:
Tegenwoordig heeft iedereen een afkeer van "low level". Da's natuurlijk handig gezegd als het te moeilijk wordt. Voor mij is er geen "low level" of "high level", het is allemaal hetzelfde vakgebied: software.

Low level en high level hebben elk hun doel en limieten. Het is aan ons om de juiste keuze te maken voor het gestelde probleem. Maar de begrippen zijn er wel degelijk voor een reden.


mausdabber zei:
Wat is gore code ?
BTW, leesbaarheid is een mythe.

gore code is wat een slechte programmeur schrijft, in eender welke taal. Slecht leesbare code is er een mooi voorbeeld van. In Java zijn er tools genoeg om aan quality control van je code te doen. Veel kwaliteitsevaluaties hebben dan ook te maken met leesbare code. Software schrijven doe je hoofdzakelijk in teamverband, het is daardoor dan ook stukken efficiënter en kost-effectiever om leesbare code te schrijven en daar dan ook effectief moeite voor te doen. Iedereen heeft er baat bij.

dJeez

Legacy Member
mausdabber zei:
We spreken over de unief, niet de lagere of middelbare school. In de unief leer je moeilijke dingen.
Op unief leer je vooral hoe je je eventueel later in de echte wereld kan gaan behelpen, en daarnaast wat leuke dingen op didactisch gebied waar je in de bedrijfswereld niks of weinig mee bent. Doch dit volledig terzijde :p.

Tegenwoordig heeft iedereen een afkeer van "low level". Da's natuurlijk handig gezegd als het te moeilijk wordt. Voor mij is er geen "low level" of "high level", het is allemaal hetzelfde vakgebied: software.
Software is een uitgewerkte toepassing, het eindresultaat van een proces, het vakgebied is informatica (of automatisering van processen). De low en high level slaat op abstracties, hoe lager hoe dichter het bij de machinecode aanleunt. Je hoeft echter niet dichter bij de machine te programmeren om efficiënte code te produceren (wel integendeel). De juiste tool (en taal) gebruiken voor de job of het probleem dat voorligt is de oefening die je moet maken, dus niet de tool (of taal) op zichzelf is belangrijk. In het ene geval zal dit C/C++ zijn, voor een ander geval Java, nog een ander zal eerder voor scripting (Perl, Python, PHP, ...) geschikt zijn.

Wat is gore code ?
De code die jij schrijft blijkbaar als je echt nood meent te hebben aan een goto statement.

Da's nogal syntax-gebaseerd, niet ? BTW, leesbaarheid is een mythe.
Leesbaarheid van code helpt je oa. om sneller code te begrijpen en bugs te vinden. Als jij 30 statements op 1 regel propt is het niet echt makkelijk om daar step bij step door te debuggen, laat staan een nuttig breakpoint te zetten. Als iedereen in het team dezelfde conventies gebruikt (aka coding standards) dan zal het al makkelijker worden om de code te beheersen en te onderhouden.

Just me

Legacy Member
Wolf2000me zei:
Niks houd je als java programmeur tegen om exceptions op te vangen, in te slikken en deze routinematig te behandelen. Maar imo is dit crappy code. Exceptions zijn net zeer nuttig om op een efficiënte manier fouten in het systeem te behandelen en daar gevolg aan te geven. Trouwens exceptions bestaan in C++ toch ook? :)

Even hierop inpikken. Het verschil is dat in Java de checked exceptions bestaan die je wel moet opvangen. Voor en nadelen aan verbonden uiteraard en ook een punt van discussie. In tegenstelling tot java heeft C++ geen checked exceptions.

Wolf2000me

Legacy Member
Just me zei:
Even hierop inpikken. Het verschil is dat in Java de checked exceptions bestaan die je wel moet opvangen. Voor en nadelen aan verbonden uiteraard en ook een punt van discussie. In tegenstelling tot java heeft C++ geen checked exceptions.

I see. Wel, hoe men dit over't algemeen regelt in C++ daar heb ik maar beperkt ervaring mee. Een groot voodeel van checked exceptions, vind ik, is bv. het opvangen van IOExceptions. Men kan dan een aantal I/O operaties uitvoeren en de problemen die daarmee kunnen voorkomen gaan opvangen op meer gecentraliseerde plaatsen/layers/... Maar ook voor parsing zoals text, dates of xml is dit echt wel nuttig.


Ik vind het wel bizar dat nog niemand multiple inheritance van C++ heeft aangehaald. Da's toch eigenlijk een klassieker? :)

Any comments van C++ kenners? ^^

kimdenkt

Legacy Member
Wel, ik kan mezelf helemaal geen C++ kenner noemen, maar daar hebben ze ook exceptions hoor, dus je kan daar hetzelfde doen als je in je Java-voorbeeld vermeldt (exception-handling centraliseren). Het enige verschil is dat je in java sommige exceptions verplicht moet opvangen of declareren in de throws-clausule van de functie.
Kan handige info zijn voor de gebruiker van de functie, en je hebt extra compile-time checking, maar maakt de code wel meer verbose natuurlijk, dus de meningen zijn verdeeld. En als mensen dan gewoon alle checked exceptions gaan wrappen in RuntimeException ben je minstens even ver van huis :)

Multiple inheritance... Mja, heb ik in de praktijk nog niet zo heel vaak gemist in Java. En je kan wel meerdere interfaces implementeren natuurlijk.

Enira

Legacy Member
De meeste argumenten hier over high level versus low level zijn gewoonweg irrelevant gezien vanuit een educatief perspectief.
mausdabber zei:
Ik vraag me af waarom ze op de unief met java beginnen, C en/of C++ is een veel betere basis.

Waarom? Omdat C met Java vergelijken, is zoals appelen met peren. C is gestructureerd programmeren, Java is een object georiënteerde programmeertaal.

Meestal kiest men dus voor een object georiënteerde programmeer taal in combinatie met 't een of 't ander UML boek welke dan gegeven wordt in een vak eindigend met '-architecture' of beginnend met 'business-'. Mijn UML boek staat boordevol Java voorbeeldjes. De combinatie Java + UML is voor docenten dan ook heel logisch.

Naar mijn mening is C++ voor beginners enorm aartsmoeilijk om meteen object oriented mee te gaan programmeren in vergelijking met Java. C++ en C is dus zeker en vast geen 'betere basis'. Je leert er de logica mee maar elke notie van object orientatie geraakt verwikkeld in de onnoemelijke kluwen van deze taal zoals headers, global variables, Qt framework, e.d...

De tijd dat men leerde programmeren om te programmeren is gedaan mijn beste, er komt een hele zwik aan extra's bij kijken en liefst zo vroeg mogelijk. :)

Wat ik achteraf gezien wel leuk vond is dat men mij in het begin leerde om gestructureerd te programmeren op papier. 'Deal with it'. Geen kutcompiler die het werk van de studenten vergemakkelijkt, mijn eerste examen programmeren heb ik dus op papier gemaakt.

NeverwinterX zei:
Daar gaan we weer :help:
²

Just me

Legacy Member
Wolf2000me zei:
Ik vind het wel bizar dat nog niemand multiple inheritance van C++ heeft aangehaald. Da's toch eigenlijk een klassieker? :)

Any comments van C++ kenners? ^^

Zelf geen C++ kenner maar de inheritance van Java (single inheritance) is vaker slecht dan correct gebruikt. Zeker sinds ik Design Patters heb gekregen is mijn mening over overerving zeer sterk verandert.
Laat dan nog staan als je multiple inheritance kan gebruiken..

kimdenkt zei:
Wel, ik kan mezelf helemaal geen C++ kenner noemen, maar daar hebben ze ook exceptions hoor, dus je kan daar hetzelfde doen als je in je Java-voorbeeld vermeldt (exception-handling centraliseren). Het enige verschil is dat je in java sommige exceptions verplicht moet opvangen of declareren in de throws-clausule van de functie.

Fouten zo maar doorgooien is niet echt een goei idee.. Als je in een layered systeem zit kan je in de DAO layer een SQL exception opvangen en die casten naar een IllegelArgumentException en deze omhoog gooien naar u BLL. Op die manier weet u BLL niet dat je met een database zit en blijft u design implementatie onafhankelijk.

NeverwinterX

Legacy Member
Just me zei:
Zelf geen C++ kenner maar de inheritance van Java (single inheritance) is vaker slecht dan correct gebruikt. Zeker sinds ik Design Patters heb gekregen is mijn mening over overerving zeer sterk verandert.
Laat dan nog staan als je multiple inheritance kan gebruiken..

Mja ook op de universiteit merk ik dat daar pas laat aandacht aan wordt besteed. Bijvoorbeeld bij de bachelorproef in het begin waren er nog steeds veel mensen die een klasse Material hadden en daaronder dan subklassen Nail, Wheel enzovoort. Veel geluk daarmee, telkens een klasse bijmaken als er een nieuw soort materiaal gebruikt wordt. Overerving dien je even weloverwogen en kritisch mee om te gaan als alle andere dingen. Geldt net zo voor Java als C++ en elke andere objectgerichte taal.

Wolf2000me

Legacy Member
Just me zei:
Zelf geen C++ kenner maar de inheritance van Java (single inheritance) is vaker slecht dan correct gebruikt. Zeker sinds ik Design Patters heb gekregen is mijn mening over overerving zeer sterk verandert.
Laat dan nog staan als je multiple inheritance kan gebruiken..

Academisch kunnen we inderdaad wel stellen dat overerving gevaarlijk kan zijn, zeker gestaafd met mooie voorbeelden uit boeken over design patterns. Maar zonder inheritance denk ik dat Java nooit zou kunnen zijn wat het is, en het is een requirement om van een OO taal te spreken he.

Vergeet overigens niet dat Inheritance ook kan gebruikt worden bij interfaces onderling en dat implementatie van interfaces ook kan bekeken worden als inheritance.

Zo is alles waar "is een" relatie voor bestaat inheritance in mijn boekje. Dus een class die de interface "johnny" interpreteert is een johnny en kan dus ook typesafe en met instanceof benaderd worden.

Design patterns blokken en zich blind op staren is eigenlijk niet zo'n goed idee imo, omdat deze in de boeken in de praktijk zelden voorkomen. Uiteraard zijn er uitzonderingen en uiteraard is die kennis en begrip ervan uitermate nuttig. Maar men had ook wel wat vaker mogen stilstaan bij meer gebruikte patterns. Zo is eigenlijk alles waar een patroon in zit een "design pattern".

Maar verder zijn factory, observer en singleton mijn meest gebruikte.

Just me zei:
Fouten zo maar doorgooien is niet echt een goei idee.. Als je in een layered systeem zit kan je in de DAO layer een SQL exception opvangen en die casten naar een IllegelArgumentException en deze omhoog gooien naar u BLL. Op die manier weet u BLL niet dat je met een database zit en blijft u design implementatie onafhankelijk.

Haha, Ik moet zeggen dat ik het opvangen van checked exceptions met een gooi van een runtimeexception al veelvuldig heb gezien.

Wat ik altijd wel mooi vind zijn custom checked exception wrappers die dan per layer een soort van afhandeling gaan triggeren in het framework.

Just me

Legacy Member
Wolf2000me zei:

Natuurlijk is een mooi voorbeeldje in de academische boeken niet hetzelfde als een probleem in een echte businessomgeving en moet je u er ook niet op blindstaren. Ik vind wel dat door meer te leren over delegatie je helemaal anders gaat denken over overerving. Zoals bijvoorbeeld bij adapter en bridge wordt gedaan.

Wolf2000me zei:
Haha, Ik moet zeggen dat ik het opvangen van checked exceptions met een gooi van een runtimeexception al veelvuldig heb gezien.

Wat ik altijd wel mooi vind zijn custom checked exception wrappers die dan per layer een soort van afhandeling gaan triggeren in het framework.

Ik zie niet in waarom een checked exception vangen en een runtime gooien een slecht idee zou zijn. Als je een database connectie wilt opzetten en die geeft een sql exception omdat ze niet gevonden kan worden of ze niet draait dan is u programma waardeloos (het kan immers toch niks doen) en kan je volgens mij dan perfect een runtimeexception gooien.

Wolf2000me

Legacy Member
Just me zei:
Natuurlijk is een mooi voorbeeldje in de academische boeken niet hetzelfde als een probleem in een echte businessomgeving en moet je u er ook niet op blindstaren. Ik vind wel dat door meer te leren over delegatie je helemaal anders gaat denken over overerving. Zoals bijvoorbeeld bij adapter en bridge wordt gedaan.

Absoluut, maar het ene sluit het andere niet uit he. En.. probeer maar eens een deftige Spring applicationcontext te schrijven zonder Interfaces. Ik vind trouwens dat elk goed framework een deftige level of abstraction heeft. Zonder overerving is dat al heel moeilijk en ingewikkeld. Maar ik sta wel altijd open voor discussie :)
In de design patterns filosofie waarschuwt men gewoon voor het teveel aan overerving. Men moet niet alles proberen te modelleren met overerving, da's absoluut waar. (in mijn boek vroeger, het voorbeeld van de vogel en het badeendje ^^ )

Just me zei:
Ik zie niet in waarom een checked exception vangen en een runtime gooien een slecht idee zou zijn. Als je een database connectie wilt opzetten en die geeft een sql exception omdat ze niet gevonden kan worden of ze niet draait dan is u programma waardeloos (het kan immers toch niks doen) en kan je volgens mij dan perfect een runtimeexception gooien.

Een runtime exception gooien (throw new RuntimeException(e) ) is eigenlijk de gemakkelijkheidsoplossing vind ik.
Ik zou liever in jouw voorbeeld de sql exception wrappen in een custom (bv. TechnicalException) exception die dan naar de laag erboven gegooid wordt. Op die manier kan dan de business layer nog steeds kiezen wat ze ermee aanvangt. Bv. message naar de user, 2de DB call attempt, throw runtimeexception, ...

Nu natuurlijk spreek ik over software in productie he, in development is dat iets helemaal anders.

Just me

Legacy Member
Wolf2000me zei:
Een runtime exception gooien (throw new RuntimeException(e) ) is eigenlijk de gemakkelijkheidsoplossing vind ik.
Ik zou liever in jouw voorbeeld de sql exception wrappen in een custom (bv. TechnicalException) exception die dan naar de laag erboven gegooid wordt. Op die manier kan dan de business layer nog steeds kiezen wat ze ermee aanvangt. Bv. message naar de user, 2de DB call attempt, throw runtimeexception, ...

Nu natuurlijk spreek ik over software in productie he, in development is dat iets helemaal anders.

Goh ik denk dat dat volledig overeen te komen is met de opdrachtgever over wat hij dan wil dat er gebeurd. :) maar de oplossingen die jij aangeeft zijn uiteraard ook perfect mogelijk.

Wolf2000me

Legacy Member
Just me zei:
Goh ik denk dat dat volledig overeen te komen is met de opdrachtgever over wat hij dan wil dat er gebeurd. :) maar de oplossingen die jij aangeeft zijn uiteraard ook perfect mogelijk.

True, maar de meeste opdrachtgevers weten echt niet wat ze willen tot ze het practisch zien gebeuren in de presentatie laag. Het is dus zo goed als aan ons om aan te voelen hoe hij dit zal willen om dan een keuze te maken. Maar da's nu ook wel echt met alles zo. Pseudo-tech-talk van sales mensen is vaak een kunst zenne :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan