1 van 4

Minicursus java: voorbereiding

Geplaatst: vr 16 mei 2008, 20:20
door Lathander
Het idee om een mini-cursus Java te schrijven is officieel anvaard en op de lijst gezet. Na mijn examens begin ik eraan.

Ik heb best een idee van wat ik erin ga zetten.

Ik overloop de primitieve types, geef uitleg over flow control, ga zo naar Arrays, van zowel 1 als meerdere dimensies, over naar methoden en velden.

Da's de basis. Ook zal ik bij ieder stuk het hebben over hoe Java het hele zaakje intern bekijkt en beredeneert. Het verschil tussen het bijhouden van dingen in een Interger array en een gewone int bijvoorbeeld. Een paar bewerkingen op string, werken met substrings, het charAt() commando, enzovoort.

Nu is mijn vraag, zou het handig zijn de uitleg verder te zetten naar constructor-logica, meerdere klassen aan elkaar linken, het verschil tussen gewone en static methode's en welke invloed dat heeft op informatie halen uit andere klassen. De beschermingsmodes private, protected en public en finaal ook nog hoe klassen elkaar kunnen aanvullen.

Dus vraag ik aan de ervaren programmeurs: wat is een goede voorbereiding in jullie ervaring?

En vraag ik aan de studenten: wat willen jullie zien?

Link naar het topic waar de organisatie van de minicursussen instaat: http://sciencetalk.nl/forum/index.php?showtopic=84960

Zou wel voor na m'n examens zijn, eind Juni dus :D

Ook heb ik best wat voorbeeldbestanden die dingen goed uitleggen en in de praktijk laten zien wat in theorie soms moeilijk te snappen is.

Alles zou zich beperken tot rekenkundige bewerkingen, nog helemaal niks van via Java bestanden openen, logs inkijken enzo... als je dat wilt weten raad ik je aan een proffesionele opleiding te gaan volgen.

Re: Minicursus java: voorbereiding

Geplaatst: vr 16 mei 2008, 20:32
door Cycloon
Je moet naar mijn mening zeker referenties (references) behandelen ivm objecten. Dan kan je natuurlijk nog doorgaan met overerving en polymorfisme. Het gebruik van interfaces en abstracte klassen.

Ik zou zeker niet de bewerkingen op Strings bespreken, daarvoor heb je de JAVA API voor handen. Het lijkt me niet de bedoeling om bepaalde klassen te bespreken, daar is al genoeg info over.

Mss ook nog kort een stukje over clone() (ivm dan met multidimensionele arrays, waar het precies mis gaat).

Ik vraag me enkel af wat je bedoelt met constructor logica?

Re: Minicursus java: voorbereiding

Geplaatst: vr 16 mei 2008, 20:45
door Bart
Ik zou beginnen met de vraag: wie is jouw publiek? Zijn dat mensen zonder programmeer ervaring, mensen met programmeer ervaring, maar niet object georienteerd, of mensen die wel eens object georienteerd hebben geprogrammeerd?

Wat jij waarschijnlijk in Java wil uitleggen, kun je in principe ook in C++, C# of Delphi. Of wil je echt de truukjes van Java gaan behandelen? In het eerste geval is het een minicursus programmeren. ipv Java. Je kunt dan natuurlijk wel Java kiezen als programeertaal.

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 00:07
door Lathander
Cycloon schreef:Je moet naar mijn mening zeker referenties (references) behandelen ivm objecten. Dan kan je natuurlijk nog doorgaan met overerving en polymorfisme. Het gebruik van interfaces en abstracte klassen.

Ik zou zeker niet de bewerkingen op Strings bespreken, daarvoor heb je de JAVA API voor handen. Het lijkt me niet de bedoeling om bepaalde klassen te bespreken, daar is al genoeg info over.

Mss ook nog kort een stukje over clone() (ivm dan met multidimensionele arrays, waar het precies mis gaat).

Ik vraag me enkel af wat je bedoelt met constructor logica?
1) Referenties zullen zeker behandeld worden, net als overerving. Abstract heb ik zelf nog niet gezien, interfaces heb ik al ervaring mee gehad en kan ik best wat basiskennis over neerpennen.

2) Ik bedoel niet echt bewerkingen op String, daar bestaat idd reeds de API voor, wat ik bedoel is de interne logica die een String volgt. Namelijk dat het een Array van char elementen is.

3) clone() gebruik je naar mijn weten om een exacte kopie van een object aan te maken... als in dat object een multidimensionele Array zit zie ik het probleem niet echt... wat is jouw ervaring met problemen hieromtrent?

4) constructor logica, daarmee bedoel ik hoe constructoren werken, eigenlijk een verderzetting van de uitleg over methoden en velden. Ik doe dit omdat ik merk dat veel van mijn medestudenten de logica die achter een constructor schuilgaat niet snappen, en gewoon invullen om te kunnen invullen.

Trouwens, indien nodig ken ik de URL van een goede freeware versie van een programma om Java in te programeren
Ik zou beginnen met de vraag: wie is jouw publiek? Zijn dat mensen zonder programmeer ervaring, mensen met programmeer ervaring, maar niet object georienteerd, of mensen die wel eens object georienteerd hebben geprogrammeerd?
Doelpubliek zijn in feite alledrie
Wat jij waarschijnlijk in Java wil uitleggen, kun je in principe ook in C++, C# of Delphi. Of wil je echt de truukjes van Java gaan behandelen? In het eerste geval is het een minicursus programmeren. ipv Java. Je kunt dan natuurlijk wel Java kiezen als programeertaal.
Het kan, maar Java is het enige dat ik goed ken :D

Volgend jaar volgt C# in mijn eigen opleiding, waarin we voortbouwen op wat we gezien hebben in Java.

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 10:04
door Bart
Doelpubliek zijn in feite alledrie


Dan zul je moeten beginnen met hoe programmeren werkt (compileren) en verder dingen als variabelen, if-statements en for-loops uit moeten leggen.

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 10:14
door Cycloon
3) clone() gebruik je naar mijn weten om een exacte kopie van een object aan te maken... als in dat object een multidimensionele Array zit zie ik het probleem niet echt... wat is jouw ervaring met problemen hieromtrent?


clone() zal enkel een kopie maken van de tabel waar de array referentie naar verwijst. In die array zitten dan nog eens verwijzeningen naar andere arrays en deze worden NIET gekopieerd. Deze verwijzen nog altijd naar de oude. Idem voor objecten waarin je objecten bijhoudt. Als je deze cloned zal het hoofdobject gekopieerd zijn, maar de referenties binnenin niet waardoor je daar nog steeds dezelfde objecten aanspreekt. Daarvoor moet je dus zelf een nieuwe clone() methode maken binnen je object (overriding).

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 15:41
door Lathander
clone() zal enkel een kopie maken van de tabel waar de array referentie naar verwijst. In die array zitten dan nog eens verwijzeningen naar andere arrays en deze worden NIET gekopieerd. Deze verwijzen nog altijd naar de oude. Idem voor objecten waarin je objecten bijhoudt. Als je deze cloned zal het hoofdobject gekopieerd zijn, maar de referenties binnenin niet waardoor je daar nog steeds dezelfde objecten aanspreekt. Daarvoor moet je dus zelf een nieuwe clone() methode maken binnen je object (overriding).
Dus met andere woorden, uitleggen dat als je clone() gebruikt dat je helemaal geen nieuw object hebt aangemaakt, alleen een nieuwe verwijzing naar hetzelfde object(of bij array's, gewoon eens dezelfde verwijzer in een nieuwe Array gezet hebt);

als dat niet is wat clone() doet, dan zijn we blijkbaar over iets aan het spreken dat ik nog niet gezien heb.

In feite kun je in Java zo doorgaan, een verwijzing die naar een volgende verwijzing loopt die naar een volgende verwijzing loopt... enzoverder, tot je aan je gegevens komt.
Dan zul je moeten beginnen met hoe programmeren werkt (compileren) en verder dingen als variabelen, if-statements en for-loops uit moeten leggen.
Zoals ik reeds zei, flow control zal bij de uitleg zitten. if/for/while-do/do-while/switch;

Zullen allemaal uitgelegd worden.

En dat van die compiler, tja, je moet eerst je code door een compiler jagen eer ie werkt. Dus weer verwijzing naar de JCreator link die ik opgezet heb in dit topic(die ik in de mini-cursus ook zal zetten).

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 16:27
door Jan van de Velde
Jullie passen wel op dat er niet wordt doorgehold hè?

Mijn eigen (beperkte) ervaring op programmeergebied is dat er drie niveaus zijn:
  1. de starter die nog geen idee heeft hoe hij in zo'n programma 2 en 3 moet optellen en het resultaat bruikbaar moet uitvoeren, kortom hoe de taal in principe in elkaar zit.
  2. Eenmaal onderweg met een goed begrip van de basisfuncties (dat was voor mij de eerste lastige stap, krijg maar eens iets werkend) lag er dan al gauw een boek met een soort encyclopedische opsomming van allerlei functies met syntaxvoorbeelden naast, waarmee wat "spannender" programmaatjes werden gebouwd, en waarbij je in allerlei valkuilen kon vallen.
  3. Ten slotte het "opleuken" zeg maar van de grafische weergave van input en output.
Kan zijn dat ik dat verkeerd zie hoor.

Die eerste stap, en het basale van de derde stap lijken me voor zo'n minicursus prima te doen. Maar stap 2 lijkt me al gauw héél veel worden, en toch nooit volledig kunnen zijn, zodat we m.i. twee gevaren lopen:

1) onvolledig betekent altijd van zeer beperkte gebruikswaarde (als je vaak genoeg iets niet terugvindt, zoek je het toch al gauw elders)

2) gaat dat niet zoveel tijd en moeite kosten dat de cursus wegens gebrek aan tijd maar ook aan motivatie ("wát een berg werk nog, daar kom ik toch nooit doorheen") stil komt te liggen en nooit meer af raakt?

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 16:55
door Cycloon
Dus met andere woorden, uitleggen dat als je clone() gebruikt dat je helemaal geen nieuw object hebt aangemaakt, alleen een nieuwe verwijzing naar hetzelfde object(of bij array's, gewoon eens dezelfde verwijzer in een nieuwe Array gezet hebt);
clone() maakt nét wel een nieuw object aan met dezelfde waarden. Maar als in die waarden nu net nog een verwijzing zit, dan blijft deze verwijzing nog steeds naar hetzelfde linken. Als voorbeeld:

Code: Selecteer alles

class Voorbeeld {

  private Auto auto;

  private int getal;

  

  Voorbeeld(int i) {

opel = new Auto();

getal = i;

  }

  

  public Auto getAuto() {

return auto;

  }

}

}
Stel nu dat we dit gaan klonen dan zal er nieuwe geheugenruimte worden gealloceerd en zal er een kopie van het object worden gemaakt. Er zal dus een 2de voorbeeld zijn die exact dezelfde waarden zal hebben. Vermits de variabele Auto enkel een referentie is naar het object van een Auto zullen beide kopiën naar dezelfde auto wijzen en dat wil je meestal niet. Daarom zal je zelf een methode clone() opgeven.

Code: Selecteer alles

class Voorbeeld {

  private Auto auto;

  private int getal;

  

  public Voorbeeld(int i) {

auto = new Auto();

getal = i;

  }

  private Voorbeeld(Auto auto, int getal) {

this.auto = auto;

this.getal = getal;

  

  public Auto getAuto() {

return auto;

  }

  

  public Voorbeeld clone() {

return new Voorbeeld(new Auto(),getal);

  }

}

}
Mss niet het beste voorbeeld, maar je ziet nu wel dat je bij de nieuwe clone() methode werkelijk een nieuwe auto zal aanmaken (die je mss indien nodig nog dezelfde eigenschappen meegeeft). Als je anders bij de eerste manier de auto van het origineel zou aanpassen dan zou deze van de kopie ook gewijzigd zijn en omgekeerd.

Bij een multidimensionele array kan je echter zelf geen nieuwe clone() methode meegeven en is het dus ook niet verstandig om dan clone() te gaan gebruiken. Dan moet je echt gaan for-lussen om écht een nieuwe kopie aan te maken.
Jan van de Velde schreef:Mijn eigen (beperkte) ervaring op programmeergebied is dat er drie niveaus zijn:
  1. de starter die nog geen idee heeft hoe hij in zo'n programma 2 en 3 moet optellen en het resultaat bruikbaar moet uitvoeren, kortom hoe de taal in principe in elkaar zit.
  2. Eenmaal onderweg met een goed begrip van de basisfuncties (dat was voor mij de eerste lastige stap, krijg maar eens iets werkend) lag er dan al gauw een boek met een soort encyclopedische opsomming van allerlei functies met syntaxvoorbeelden naast, waarmee wat "spannender" programmaatjes werden gebouwd, en waarbij je in allerlei valkuilen kon vallen.
  3. Ten slotte het "opleuken" zeg maar van de grafische weergave van input en output.
Kan zijn dat ik dat verkeerd zie hoor.
Naar mijn mening is het niet de bedoeling om deze dingen aan te halen, maar eerder de werking van bepaalde zaken aan te halen (voor object-georïenteerde principes) die vaak door weinig beginners gesnapt worden.

Als je de dingen wil uitleggen die jij aanhaalt dan is het idd een berg werk, want dat is zowat een hele opleiding informatica geven :D

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 17:16
door Jan van de Velde
Cycloon schreef:clone() maakt nét wel een nieuw object aan met dezelfde waarden.

..//..

Als je de dingen wil uitleggen die (Jan) aanhaalt dan is het idd een berg werk, want dat is zowat een hele opleiding informatica geven :D
Dan is mij nu écht niet meer duidelijk wat nou de bedoeling is. Dan ben ik de doelgroep en het startniveau van die doelgroep even kwijt.

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 17:23
door Cycloon
Dan is mij nu écht niet meer duidelijk wat nou de bedoeling is. Dan ben ik de doelgroep en het startniveau van die doelgroep even kwijt.


Het leek mij dat de bedoeling werd dat de interne werking van Java werd uitgelegd (op welke manier springt Java om met het verwerken van bepaalde zaken). De doelgroep lijkt mij mensen die beter willen begrijpen waarom iets misloopt in stukken code, bv hoe het komt dat als je het ene object aanpast dat er plots nog objecten aangepast zijn. Het startniveau is mss een beetje moeilijk te bepalen. Ik denk niet dat deze materie heel zwaar kan of hoeft te worden. Het zal alleszins niet zijn voor mensen die nog nooit met Java gewerkt hebben. Een ruime basiskennis lijkt me wel mooi meegenomen. Maar mss kan evil lathander eens zeggen wat hij denkt over dit standpunt.

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 17:27
door Ruben01
Jan van de Velde schreef:Mijn eigen (beperkte) ervaring op programmeergebied is dat er drie niveaus zijn:
  1. de starter die nog geen idee heeft hoe hij in zo'n programma 2 en 3 moet optellen en het resultaat bruikbaar moet uitvoeren, kortom hoe de taal in principe in elkaar zit.
  2. Eenmaal onderweg met een goed begrip van de basisfuncties (dat was voor mij de eerste lastige stap, krijg maar eens iets werkend) lag er dan al gauw een boek met een soort encyclopedische opsomming van allerlei functies met syntaxvoorbeelden naast, waarmee wat "spannender" programmaatjes werden gebouwd, en waarbij je in allerlei valkuilen kon vallen.
  3. Ten slotte het "opleuken" zeg maar van de grafische weergave van input en output.
Ik denk dat wanneer je het hebt over een "minicursus" dat je eerst moet beginnen met de eerste stap van hierboven. Wanneer je over Java iets gaat maken misschien eerst iets kort vermelden over een gratis programma zoals hierboven JCreator is vermeld.

Wat uitleg wat 'compilen' inhoud e.d. zou denk ik het volgende hoofdstukje in de cursus kunnen zijn.

Nadat de lezer weet hoe hij Java kan gaan programmeren op zijn pc kun je volgens mij pas van start gaan met de primitieve types die dan worden opgevolgd door de lussen, arrays, strings, ...

Zoals Jan als zegt kun je onmogelijk alles gaan bespreken want dan krijg je een encyclopedie.

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 17:36
door Cycloon
Ruben01 schreef:Ik denk dat wanneer je het hebt over een "minicursus" dat je eerst moet beginnen met de eerste stap van hierboven. Wanneer je over Java iets gaat maken misschien eerst iets kort vermelden over een gratis programma zoals hierboven JCreator is vermeld.

Wat uitleg wat 'compilen' inhoud e.d. zou denk ik het volgende hoofdstukje in de cursus kunnen zijn.

Nadat de lezer weet hoe hij Java kan gaan programmeren op zijn pc kun je volgens mij pas van start gaan met de primitieve types die dan worden opgevolgd door de lussen, arrays, strings, ...

Zoals Jan als zegt kun je onmogelijk alles gaan bespreken want dan krijg je een encyclopedie.
Maar dit lijkt mij de bedoeling niet. Als je met Java wil leren werken kan je beter andere websites bezoeken die daarover pakken meer info hebben. Volgens mij kan je niks extra bieden door de basis van java nog maar eens uit te schrijven. Een beetje lussen en werken met variabelen is in zo goed als elke taal hetzelfde. Dan kan je beter een algemene cursus informatica geven (en zoals reeds gezegd zie ik de meerwaarde daar niet van in). Informatie over de echte werking van java is dan weeral schaarser en vaak incorrect.

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 17:43
door Ruben01
Informatie over de echte werking van java is dan weeral schaarser en vaak incorrect.
Ik weet niet of die informatie incorrect is maar wanneer je dat allemaal wil gaan uitleggen denk ik dat je beter een boek kan gaan schrijven ipv een minicursus.

Re: Minicursus java: voorbereiding

Geplaatst: za 17 mei 2008, 18:57
door Cycloon
Ik weet niet of die informatie incorrect is maar wanneer je dat allemaal wil gaan uitleggen denk ik dat je beter een boek kan gaan schrijven ipv een minicursus.


Nee dat denk ik niet. Het gaat hem hier net over de valkuilen waar de meeste mensen problemen mee hebben. Wat jij wou uitleggen daar kan je idd hele boeken over schrijven. Het gaat hem hier niet daadwerkelijk om mensen te leren programmeren, maar eerder om programmerende mensen te duiden op mogelijke problemen.