Archief - Java hoofdstuk 2 vragen en oefeningen

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.

Pip

Legacy Member
Hey zoals in een vorige post door iemand is aangehaald post ik hier mijn oplossingen van de oefeningen die ik heb gemaakt.

Hoofdstuk 2: Vragen
1.Wat is een klasse?
Een klasse is een beschrijving voor objecten. Een klasse bestaat altijd uit een header en een body.
2.Wat is een object?
Een object kan vanalles zijn, het zijn de componenten van de applicatie zoals bv. een knop of een tekstvak.
3. Wat is een instantie?
Een instantie is een andere naam voor een object.
4. Wat is een package?
Een package is een verzameling klassen die bij elkaar horen. Een package wordt geïmporteerd dmv de instructie import. Met een * duid je aan dat je alle klassen van de package wilt gebruiken.
5. Wat is een declaratie?
Een declaratie is het bekendmaken van namen.
6. Wat is een methode?
Een methode is een groep opdrachten die bij elkaar horen en die een naam hebben. Een methode heeft ook altijd een header en een body.
7. Wat is een referentie?
Een referentie is het declareren(bekendmaken van namen) van objecten.
8. Wat is een event?
Een event is een gebeurtenis in de applicatie zoals bv. klikken op een knop, het afhandelen hiervan noemen we event-handling.
9. Java is case sensitive. Wat betekent dat?
Case sensitive betekend hoofdlettergevoelig zo is Knop niet hetzelfde als knop.
10. Java is een objectgeoriënteerde taal. Wat betekent dat?
In Java maken we verschillende objecten aan die met elkaar in verbinding staan en zo een volledige applicatie vormen. De code is niet lineair zo kan een actie van bv een knop helemaal beneden de code staan en toch als eerste worden uitgevoerd.
11. Welke gewoonte bestaat er in de naamgeving van klassen methoden en objecten?
De naamgeving wordt in kleine letters getypt, bestaat een naam uit 2 woorden dan worden deze gewoon aan elkaar getypt en het tweede woord begint met een hoofletter bv. tweeWoorden.
12. Aan welke regels moeten namen in Java voldoen?
Kleine en hoofdletters, getallen _ en het $-teken mogen gebruikt worden om namen te vormen in Java, een naam mag ook nooit beginnen met een getal.
13. Welke namen zijn toegestaan in Java?
constanteWaarde : toegestaan
muisknop : toegestaan
U2 : toegestaan
4U : niet toegestaan
c:\temp : niet toegestaan
Coca Cola : niet toegestaan
xs4all : toegestaan
14. Welke toevoegingen aan de broncode zijn nodig om een klik op een knop af te handelen?
eerst en vooral moet er een ActionListener worden toegevoegd aan de knop met een verwijzing naar de inwendige klasse met de methode voor het afhandelen van de knop.
bv. knop.addActionListener(new knopHandler());
de inwendige klasse ziet er als volt uit
class knopHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
tekstvak.setText(“Je hebt geklikt”);
}
}

en volgende sourcecode heb ik geschreven voor de oefeneningen, het compiled en runt zoals het zou moeten maar mss zien jullie er nog zaken in die ik beter anders zou aanpakken?
Code:
//Oefening 0210 applicatie met 2 knoppen en 2 tekstvlakken
//Opstartklasse
import javax.swing.*;
import java.awt.event.*;

public class Oef0210 extends JFrame
{
    public static void main (String [] args)
    {
        JFrame frame = new Oef0210();
        frame.setSize(400, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Oefening 02.10");
        JPanel Paneel = new Paneel();
        frame.setContentPane(Paneel);
        frame.setVisible(true);
    }
}
//paneel met 2 knoppen en 2 tekstvlakken
class Paneel extends JPanel
{
    private JButton knopVoornaam, knopAchternaam;
    private JTextField tekstvlak1, tekstvlak2;

    public Paneel()
    {
        knopVoornaam = new JButton("Voornaam");
        knopVoornaam.addActionListener(new voornaamHandler());

        knopAchternaam = new JButton("Achternaam");
        knopAchternaam.addActionListener(new achternaamHandler());

        tekstvlak1 = new JTextField(10);
        tekstvlak2 = new JTextField(10);
        add(knopVoornaam);
        add(knopAchternaam);
        add(tekstvlak1);
        add(tekstvlak2);
    }
    //inwendig klasse voornaamHandler
    class voornaamHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
            tekstvlak1.setText("Jeroen");
        }
    }
    //inwendige klasse achternaamHandler
    class achternaamHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
            tekstvlak2.setText("Nouws");
        }
    }
}

Code:
//Oefening 0210 applicatie met 2 knoppen en 2 tekstvlakken
//Opstartklasse
import javax.swing.*;
import java.awt.event.*;

public class Oef0210 extends JFrame
{
    public static void main (String [] args)
    {
        JFrame frame = new Oef0210();
        frame.setSize(400, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Oefening 02.10");
        JPanel Paneel = new Paneel();
        frame.setContentPane(Paneel);
        frame.setVisible(true);
    }
}
//paneel met 2 knoppen en 2 tekstvlakken
class Paneel extends JPanel
{
    private JButton knopVoornaam, knopAchternaam;
    private JTextField tekstvlak1, tekstvlak2;

    public Paneel()
    {
        knopVoornaam = new JButton("Voornaam");
        knopVoornaam.addActionListener(new voornaamHandler());

        knopAchternaam = new JButton("Achternaam");
        knopAchternaam.addActionListener(new achternaamHandler());

        tekstvlak1 = new JTextField(10);
        tekstvlak2 = new JTextField(10);
        add(knopVoornaam);
        add(knopAchternaam);
        add(tekstvlak1);
        add(tekstvlak2);
    }
    //inwendig klasse voornaamHandler
    class voornaamHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
            tekstvlak1.setText("Jeroen");
        }
    }
    //inwendige klasse achternaamHandler
    class achternaamHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
            tekstvlak2.setText("Nouws");
        }
    }
}

NeverwinterX

Legacy Member
Pip zei:
Hey zoals in een vorige post door iemand is aangehaald post ik hier mijn oplossingen van de oefeningen die ik heb gemaakt.

en volgende sourcecode heb ik geschreven voor de oefeneningen, het compiled en runt zoals het zou moeten maar mss zien jullie er nog zaken in die ik beter anders zou aanpakken?

Een paar opmerkingen:
  • Bij puntje 2 en 3. Je kan object en instantie wat beter definiëren: een instantie is een concrete "invulling" van een klasse. Sommigen zouden ook niet zeggen dat een object en een instantie helemaal hetzelfde zijn, maar dat is eerder muggenziften en maakt niet echt uit. Zolang je maar goed het verschil tussen klasse en instantie snapt.
  • Bij puntje 11. De naamgeving voor klassen, variabelen en methoden verschilt. Voor variabelen (zoals knopVoornaam) en methoden (zoals actionPerformed) moet de eerste letter inderdaad een kleine letter zijn. Bij de name van klassen moet echter de eerste letter wel een hoofdletter zijn, in je code onderaan is dat dus fout (allez "fout", het is tegen de richtlijn): het moet VoornaamHandler ipv voornaamHandler zijn. edit: en zoals Fraggie opmerkt: JPanel Paneel = new Paneel(); moet JPanel paneel = new Paneel(); zijn (en de naamgeving kan uiteraard beter, paneel zegt niet zoveel).
  • Het is eigenlijk aan te raden om dingen uit het swing framework (zoals JFrame en JPanel) op een andere manier te starten. Negeer dit maar voorlopig, het is te vroeg om dat al te snappen, maar kijk hier later eens naar: Initial Threads (The Java™ Tutorials > Creating a GUI With JFC/Swing > Concurrency in Swing)
  • Het is aan te raden om getters en setters te gebruiken. Ik neem aan dat dit later nog aan bod komt in het boek dat je volgt, dus dit kan je waarschijnlijk voorlopig negeren.

Fraggie

Legacy Member
In mijn ogen ga je niet te diep in op de zaken.

Plus een tip voor Java GUI's, noem je "paneel" a.u.b. geen "Paneel". Uiteindelijk kom je op construties uit die nog maar weinig willen zeggen ala:

Paneel paneel = new Paneel();

Zoals jij het nu gedaan hebt:
JPanel Paneel = new Paneel();

Hier heeft de variabele Paneel, excact dezelfde naam als de klasse Paneel.

8. Wat is een event?
Een event is een gebeurtenis in de applicatie zoals bv. klikken op een knop, het afhandelen hiervan noemen we event-handling.
Aanvulling:
Events staan tegenover polling en wordt best vergelijken met hardware. In hardware heb je twee manieren om een input te controleren. Ofwel werkt je met interrupts (hardware moet voorzien worden) ofwel werk je met polling (softwarematig).

Pollen is het gemakkelijkste, je roept continue een functie aan die die input controleert, terwijl en als deze taak klaar is (bv max 1 instructie cyclus kijken) doe je andere taken. In pseudo code:
Code:
while(true)
{
  checkInput();
  blinkLeds();
}

Het moment dat je de while verlaat, wordt de functie checkInput() niet meer uitgevoerd.

Met interrupts hoef je in de flow van je programma niet expliciet kijken naar die input. Wanneer er zich een interrupt/event voordoet op die input, zal je automatisch die actie uitvoeren.

jimowns

Legacy Member
@Pip Welk boek heb je voor java ? Want dat boek lijkt me heel leerzaam, omdat er veel oefenvragen inzitten + oefeningen.

Pip

Legacy Member
Hey Jim,
ik gebruik "En dan is er... Java" van Gertjan Laan,
ben zelf zeer tevreden van het boek omdat alles goed uitgelegd wordt en op latere momenten dieper op ingegaan wordt + de vragen en oefeningen zijn natuurlijk enorm goede oefening om te leren.

jimowns

Legacy Member
Dankuwel Pip ;) Dan ga ik deze maandag al bestellen, en het is zeer leerzaam, 200 vragen en 160 oefeningen, Dit is wel iets heel goed voormij :D
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