Avatar billede gg Praktikant
22. januar 2002 - 17:09 Der er 4 kommentarer og
1 løsning

DataType

Er der nogen der kan forklare teoretisk hvad en datatype er og hvad den gør. Hvad er forskellen på en datatype og en abstrakt datatype ??
Avatar billede cs_henrik Nybegynder
22. januar 2002 - 17:29 #1
En datatype spænder over flere ting. For det første kan det være en primitiv datatype, som i Java fx. er en int, double eller boolean m.fl. En abstrakt datatype(ADT) abstraherer over de primitive. En opskrift på en ADT er givet ved de data, ADT'en skal indeholde og de metoder/funktioner/procedurer ADT'en skal stille til rådighed.
For et par dage siden blev jeg stillet overfor en eksamensopgave med en ADT. Denne ADT var en ønskeliste, der indeholdt navnet på den ting, man ønskede sig og prisen på denne - altså de data ADT'en skulle indeholde. Af metoder var der f.eks. defineret FindMinimumPris, som returnerer ønsket med den laveste pris.
Avatar billede gg Praktikant
22. januar 2002 - 17:37 #2
ok Henrik ADT erjeg fortrolig, kender godt til MAP, Grafer, Mængde, Collection,Indexed osv. Det er mere den simple datatype jeg ikke helt har tjekt på. Hvad sker der f.eks i memory, hvor gemmes den. En simpel datatype er vist et dataobjekt på runtime tidspunktet, der indehodler forskellige værdier, hvornår defineres disse værdier og hvordan er scoopet når en datatypen ligger i en metode ?
Avatar billede cs_henrik Nybegynder
22. januar 2002 - 18:09 #3
Jeg er ikke sikker på, at jeg kan give dig et fyldestgørende svar, men jeg prøver.

En ADT bliver allokeret på heap'en, hvorimod en primitiv datatype allokkeres på stack'en, som ifølge Bruce Eckel's "Thinking in Java" er meget hurtigere. Forskellen på dem er endvidere, at ADT'en allokkeres som en reference, mens en simpel, går direkte på værdien. Eksempel:

int i = 35;
int y = i;
i = 22;

I ovenstående tilfælde vil y stadig være 35. Anderledes ville det være, hvis det var en reference.

Hvis du definerer en simpel datatype inden i en metode, kan du kun bruge den der.
Avatar billede cs_henrik Nybegynder
22. januar 2002 - 18:30 #4
Et lille eksempel på det med objektreferencer er vist på sin plads:

import java.util.Date;

public class Simple
{
    public static void main(String[] args)
    {
        Date d1 = new Date();
        Date d2 = d1;
       
        System.out.println(d1.toString());
        System.out.println(d2.toString());
       
        d1.setTime(534729L);
        System.out.println();
        System.out.println(d1.toString());
        System.out.println(d2.toString());
    }
}

Hvis du prøver at køre det, vil du se, at selvom man kun udfører setTime(...) på d1, så vil det også gælde for d2. Dette skyldes, at d1 og d2 kun er objektreferencer, der peger på samme objekt.
Avatar billede hercule Nybegynder
23. januar 2002 - 11:01 #5
Der findes en række artikler fra 1996-7 hos JavaWorld.com, som beskriver hvad der foregår ind i Javas VM.
Den første introducerer hvad en VM er for en størrelse...
http://www.javaworld.com/javaworld/jw-06-1996/jw-06-vm.html
Senere artikler diskutere primitives, bytecode og hvad der foregår på stack'en......se bl.a.
http://www.javaworld.com/javaworld/jw-09-1996/jw-09-bytecodes.html
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester