Avatar billede langkiller Nybegynder
12. juni 2013 - 13:27 Der er 15 kommentarer og
1 løsning

abstract datatypes - definition

Leder efter en simpel definition på "abstract datatypes", altså en forklaring der er til at forstå. Hvad kendetegner "Abstract datatypes" osv.?

Ved godt hvilke abstakte datayper der findes, såsom:
List, Sets, Maps, Queue, Deque, stacks og trees.

Og hvilke operationer og funktioner de har, men selve definitionen på hvad det er i en større helhed er jeg ikke sikker på. Håber at nogen kan komme med en god lille forklaring på dette.
Avatar billede tjp Mester
12. juni 2013 - 14:10 #1
Et kort bud ku være:
En datatype kan anses som abstrakt, når den:
1. er defineret i forhold til de operationer der kan udføres på den - dvs. at evt. members er skjulte/private
2. dens implementation er skjult, så det er muligt at erstatte én implementation med en anden.
Avatar billede langkiller Nybegynder
12. juni 2013 - 15:14 #2
forstå desværre ikke dit svar helt må jeg indrømme..
hvad er forskellen på primitive datayper ( f.eks. int) og abstrakte datayper?
Avatar billede langkiller Nybegynder
12. juni 2013 - 15:35 #3
Er det korrekt at sige at en "Abstract type" er en samling af forskellige "operations" og "types" (f.eks. primitive typer som int) der sammen udgør en ny "datatype". Det er en slags "custom made datatype".

Eller er det helt ved siden af ?
Avatar billede langkiller Nybegynder
12. juni 2013 - 16:23 #4
har endnu et spørgsmål.. Har læst at List, Sets osv. er interfaces.. men det er også abstrakte datatyper? Hvordan hænger det sammen?
Avatar billede arne_v Ekspert
12. juni 2013 - 17:09 #5
Det er faktisk et ret godt spoergsmaal.

http://en.wikipedia.org/wiki/Abstract_data_type har en lang forklaring, men jeg synes ikke at den er saerlig praecis i forhold til at anvende paa Java.

Andre kilder angiver en definition som vel kan opsummeres til "en Java klasse som er paen objektorienteret kode med god indkapsling af implementation".

Imidlertid passer 99.9% af de eksempler som angives med en betydeligt snaevre definition "et generisk Java interface".

Saa mit raad er: kig i din laerebog og brug dens definition, hvis det ikke er muligt saa tag wiki definition og lev med dens manglende praecision.
Avatar billede langkiller Nybegynder
12. juni 2013 - 17:23 #6
Okay jeg har fået skrevet en slags definition på ADT nu.
Vil bare lige høre om det nu er "korrekt" det jeg har skrevet, for er lidt i tvivl ud fra hvad jeg har læst de forskellige steder, men synes da selv det giver mening.

En "Abstract type" (ADT) er en samling (collection) af bestemte data med bestemt sæt operationer. ADT kan bl.a. gemme, hente og manipulere disse data.
ADT benytter/implementerer "Collection Interface", som igen har disse "sub interfaces":
-    List
-    Queue
-    Deque
-    Set
-    Map
-    Stacks
-    Trees
Hver af disse sub interfaces, har forskellige data strukturer, som er nyttige på hver deres måde.
Avatar billede arne_v Ekspert
12. juni 2013 - 17:34 #7
Jeg mener ikke at det behoever at vaere en collection.

Omend alle de mest gaengse eksempler er.

Men jeg vil kalde:

public interface Censor<T extends Fag> {
    public int gradeThirteenScale(Exam<T> exam);
    public int gradeAceptReject(Exam<T> exam);
}

som en ADT og Censor er ikke en collection.
Avatar billede langkiller Nybegynder
12. juni 2013 - 17:46 #8
Så det ville være mere korrekt at skrive at de fleste ADT'er er collections?

Har noget andet som jeg er lidt i tvivl om.
Hvorfor er det smart at bruge interfaces?
Har brugt det i små programmer, for prøve det af, men kan simpelthen ikke se hvorfor jeg skulle bruge det og hvad det egentlig er interfacen sørger for, har du et godt svar på det ? :)
Avatar billede arne_v Ekspert
12. juni 2013 - 18:19 #9
Et interface er 100% kontrakt og 0% implementation.

MitInterface o = new MinKlasse();

sikrer derfor at man udelukkende programmerer mod kontrakt og ikke mod implementation.
Avatar billede langkiller Nybegynder
12. juni 2013 - 18:25 #10
kan du uddybe det? tror ikke jeg er med på hvad du mener..
Avatar billede langkiller Nybegynder
12. juni 2013 - 18:39 #11
hvad mener du med 100% kontrakt?
Og hvad er det der sker i :
MitInterface o = new MinKlasse(); ?
Er det din interface der bliver sat lig med en klasse? troede kun at interfaces kunne implementeres af en klasse og ikke initialiseres på nogen måde.
Avatar billede arne_v Ekspert
12. juni 2013 - 18:43 #12
Du kan ikke skrive:

MitInterface o = new MitInterface();

men du kan godt skrive:

MitInterface o = new MinKlasse();

(forudsat at MinKlasse implementerer MitInterface)

o er en instans af MinKlasse, men fordi den kun er erklaeret som MitInterface, saa kan du kun bruge metode fra MitInterface (kontraken) og ikke diverse implementations specifikke metoder i MinKlasse.
Avatar billede langkiller Nybegynder
12. juni 2013 - 19:09 #13
okay, så tror jeg at jeg er med.
Mange tak for hjælpen! smid et svar
Avatar billede arne_v Ekspert
12. juni 2013 - 19:25 #14
svar

overvej om ikke tjp skal med i pointene p.g.a. #1
Avatar billede langkiller Nybegynder
12. juni 2013 - 20:07 #15
Jo jeg giver ham lige en chance til at smide et svar, ellers går de bare til dig
Avatar billede langkiller Nybegynder
12. juni 2013 - 21:58 #16
Jeg tror ikke han går op i det, så nu lukker jeg bare spørgsmålet.
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