Dvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet.

Størrelse: px
Starte visningen fra side:

Download "Dvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet."

Transkript

1 Denne guide er oprindeligt udgivet på Eksperten.dk Refleksion med.net Refleksion bruges til at undersøge klasser på runtime tidspunktet. Se hvordan du f.eks. loader en klasse fra en DLL, gennemkigger dens metoder (funktioner) og kalder dem. Helt uden at kende klassen i forvejen. Skrevet den 03. Feb 2009 af nielle I kategorien Programmering / C# Indledning Refleksion giver dig muligheden for - på runtime tidspunktet - at undersøge hvordan en klasse, et interface, en struct, eller noget helt fjerde, er skruet sammen. Med disse oplysninger i hånden kan man bruge klassen som om den var kendt på kompileringstidspunktet. Man behøver imidlertid ikke at have haft adgang til klassen på det tidspunkt. Man behøves faktisk ikke engang at have haft kendskab til dens eksistens..net frameworket er gennemsyret af såkaldte metadata ("data om data"), og refleksion er teknologien som man bruger til at udtrække disse metadata og handle på baggrund af dem. Hvad kan det så bruges til? En af mulighederne er muligheden for at lave en plugin arkitektur, hvor andre kan berige dit program med ny funktionalitet uden at din kode skal rekompileres: Dette har jeg skrevet om i en tidligere artikel Dvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet. En anden mulighed er et program som NUnit der bruges til unittest: Du placere dine tests i en DLL som NUnit så loader. Derefter skanner NUnit DLL'en for tests og udføre dem. Hvis du ikke allerede kender NUnit bør du tage et seriøst kig på det. Du kan starte med at læse arne_v's udmærkede artikel om det her på Eksperten: Denne her artikel afslutter i øvrigt med at skitsere skelettet for hvordan NUnit kunne være kodet. Andre steder, hvor der gemmer sig refleksion under kølerhjelmen, er sådan noget som Visual Studio's Intellisence. v. 1.0: 18/01/ Første version. Type-klassen Type-klassen er den centrale klasse inden for refleksion; enhver klasse har en type som indeholder oplysninger om klassen - klassens metadata.

2 Man kan enten bruge typeof()-operatoren eller GetType()-metoden til at finde typen af en klasse eller et objekt: using System; namespace RefleksionNS1 class Program static void Main(string[] args) // Typen af en klasse. Type type1 = typeof(enklasse); Console.WriteLine(type1.Name); // Typen af et objekt. EnKlasse klasse2 = new EnKlasse(); Type type2 = klasse2.gettype(); Console.WriteLine(type2.Name); // GetType() må ikke forveksles med ToString(): Console.WriteLine(klasse2); class EnKlasse public override string ToString() return "Hvis ikke ToString() overstyres vil den returnere: RefleksionNS1.EnKlasse"; Når man har typen, kan man udfritte den om forskellige oplysninger om klassen: using System; using System.Reflection; namespace RefleksionNS2 class Program static void Main(string[] args) // Prøv selv med en anden klasse som f.eks. int Type typen = typeof(enklasse); Console.WriteLine(typen.Name);

3 Console.WriteLine(typen.FullName); Type basetypen = typen.basetype; if (basetypen!= null) Console.WriteLine("Nedarver fra: " + basetypen); else Console.WriteLine("Nedarver ikke fra noget."); Console.WriteLine(); MemberInfo[] miarr = typen.getmembers(); foreach (MemberInfo mi in miarr) Console.WriteLine(mi.Name); Console.WriteLine("\ter en " + mi.membertype); Console.WriteLine("\ter defineret i " + mi.declaringtype); class EnKlasse public int SvaretPåLivetUniversetOgAltDetDer() return 42; public string klasselærer; public string KlasseLærer get return klasselærer; set klasselærer = value; Resultat: EnKlasse RefleksionNS2.EnKlasse Nedarver fra: System.Object SvaretPåLivetUniversetOgAltDetDer er en Method er defineret i RefleksionNS2.EnKlasse get_klasselærer er en Method er defineret i RefleksionNS2.EnKlasse set_klasselærer er en Method er defineret i RefleksionNS2.EnKlasse

4 GetType er en Method er defineret i System.Object ToString er en Method er defineret i System.Object Equals er en Method er defineret i System.Object GetHashCode er en Method er defineret i System.Object.ctor er en Constructor er defineret i RefleksionNS2.EnKlasse KlasseLærer er en Property er defineret i RefleksionNS2.EnKlasse klasselærer er en Field er defineret i RefleksionNS2.EnKlasse Som man i øvrigt kan se af output, vil en property give anledning til to metoder (foruden sig selv), en for hver af get()- og set()-accessorerne. Funktionen GetMembers() giver altså oplysninger om klassens indhold; dens metoder inkl. constructore, properties og fields. BindingFlags Hvis man derimod specifikt er ude efter en bestemt af typerne, kan man i stedet for GetMembers() bruge en af GetMethods()-, GetConstructors()-, GetProperties()- eller GetFields()-metoderne. Som udgangspunkt vil en metode som f.eks. GetMethods() returnere oplysninger om alle de metoder som klassen har og som i øvrigt er erklæret som public. Man kan ændre på dette, og man kan endda få fat i metoder som er erklæret private. Dette gøres med den rette kombination af BindingFlags: using System; using System.Reflection; namespace RefleksionNS3 class Program static void Main(string[] args) // Klassens type. Type typen = typeof(enklasse); // Klassens private metoder. MethodInfo[] miarr = typen.getmethods(

5 BindingFlags.NonPublic BindingFlags.Instance BindingFlags.DeclaredOnly); // Udskriv dem. foreach (MethodInfo mi in miarr) Console.WriteLine(mi.Name); class EnKlasse public int Metode1() return 42; private int Metode2() return ; public static int Metode3() return 100; Resultat: Metode2 BindingFlags.NonPublic giver de metoder som ikke er erklæret public. Dette er selvfølgelig ikke det samme som at sige at de er erklæret private. BindingFlags.Instance giver de metoder som er kræver en instans af klassen - altså modsætningen til metoder som er erklæret som static. BindingFlags.DeclaredOnly giver de metoder der er erklæret i selve klassen - i modsætning til de metoder der er erklæret i klasser der ligger tidligere end EnKlasse i arve-hierarkiet. Uden denne ville man også have fået udskrevet: MemberwiseClone Finalize foruden altså Metode2. Kodestumperne: MethodInfo[] miarr = typen.getmethods( BindingFlags.Public BindingFlags.Instance BindingFlags.DeclaredOnly); og: MethodInfo[] miarr = typen.getmethods( BindingFlags.Public BindingFlags.Static BindingFlags.DeclaredOnly); resulterer i: Metode1 hhv. Metode3.

6 MethodInfo-klassen GetMethods() returnere et array af MethodInfo-objekter. Disse beskriver klassens metoder i flere detaljer: using System; using System.Reflection; namespace RefleksionNS4 class Program static void Main(string[] args) Type typen = typeof(enklasse); MethodInfo[] miarr = typen.getmethods( BindingFlags.Public BindingFlags.Instance BindingFlags.DeclaredOnly); foreach (MethodInfo mi in miarr) // Metodens navn. Console.WriteLine(mi.Name); // Hvilken type returnere metoden. Console.WriteLine("\t" + mi.returntype); // Array som beskriver metodens argumenter. ParameterInfo[] piarr = mi.getparameters(); // Udskriv oplysninger om de enkelte argumenter. foreach (ParameterInfo pi in piarr) Console.WriteLine("\t\t0 1", pi.parametertype.tostring(), pi.name); Console.WriteLine("\t\t\tout=0", pi.isout); class EnKlasse public int Metode1() return 42; public string Metode2(string argument) return "For held: " + ( );

7 public void Metode3(ref string arg1, string arg2, out double arg3, params int[] arg4) arg3 = 42D; // arg3 er defineret som "out" og skal derfor sættes til en værdi. Console.Write("0 1 2", arg1, arg1, arg3); for (int idx = 0; idx < arg4.length; idx++) Console.Write(arg4[idx] + " "); Console.WriteLine(); I samme ånd giver funktioner som GetConstructors(), GetEvents(), GetFields() og GetProperties() oplysninger om hhv. klassens constructores, dens events, dens fields (variable) og dens properties. Funktionen GetMembers() giver information om samtlige members - dvs. metoder, properties og fields samlet under én hat. Assembly-klassen En af de grundlæggende ting, man kan bruge refleksion til, er at loade en kompileret assemply - DLL eller EXE - og undersøge hvad der er inde i den. Man kan endda oprette instanser af, og kalde funktioner på de klasser man finder på den måde! NUnit, og muligheden for at lave plugins, er gode eksempler på hvad man kan gøre, hvis man kan undersøge kompileret kode - ikke på kompileringstidspunktet, men på det langt senere runtime tidspunkt. Lad os kigge nærmere på det. Opret en DLL med følgende kode: using System; namespace RefleksionNS5 public class EnKlasse public void Metode1() Console.WriteLine("Metode1() kaldt"); public string Metode2(string argument) return argument + ( ); delegate int EnDelegate(string argument);

8 enum EnEnum interface EtInterface struct EnStruct Dette er det assembly som vi ønsker at undersøge nærmere i det følgende. Læg det i roden af C-drevet eller ret stien i den næste blok kode. Opret derefter et Console projekt: using System; using System.Reflection; namespace RefleksionNS6 class Program static void Main(string[] args) try // Indlæs assemblyet fra dens position på disken. // Andre muligheder er at indlæse den fra f.eks. GAC'en. Assembly assemply = Assembly.LoadFile(@"C:\RefleksionNS5.dll"); // Undersøg de typer der er i assemplyet. Scan4Types(assemply); catch (ReflectionTypeLoadException)... Med Assembly.LoadFile() indlæses den kompilerede DLL, sådan at vi kan kigge efter hvad der ligger i den. Det er Scan4Types() som efterfølgende gør dette: private static void Scan4Types(Assembly assemply) // Hent alle typerne fra assembly'et. Type[] typearr = assemply.gettypes(); // Undersøg dem mens de gennemløbes. foreach (Type type in typearr) // Hvilken type er det?

9 Console.WriteLine(type.Name); // Hvis det er en klasse... if (type.isclass) // Klassens navn. Console.WriteLine("\tEn klasse"); // Undersøg de metoder der er i klassen. Scan4Methods(type); // Et par andre muligheder. if (type.isenum) Console.WriteLine("\tEn enum"); if (type.isinterface) Console.WriteLine("\tEt interface"); if (type.isvaluetype) Console.WriteLine("\tEn value type (f.eks. en enum eller struct)"); Koden starter med at bede assembly'et som dens typer. Af udskriften kan man se at det ikke kun er EnKlasse som vises på denne måde - også EnDelegate, EnEnum, EtInterface og EnStruct har en type. Det er ikke kun klasser som har en type. De viste er ikke de eneste C# konstruktioner som har en type - det er blot dem af de mulige som kan optræde helt ude på namespace niveau. Derefter bruger koden properties, som IsClass, IsEnum, IsInterface og IsValueType, til at spørge ind til hvad der egentlig gemmer sig i typen. Det kan måske komme som en overraskelse at en delegate faktisk er en klasse. Men det er den, som man kan se af udskriften (når vi er færdige). Hvis programmet i øvrigt konstatere at det er en klasse, som gemmer sig bag typen, kaldes Scan4Methods() som løber igennem dennes metoder: private static void Scan4Methods(Type classtype) // Hent oplysninger om alle metoderne i klassen. MethodInfo[] methodinfoarr = classtype.getmethods(); // Gennemløb metoderne. foreach (MethodInfo methodinfo in methodinfoarr) // Udskriv metodens navn Console.WriteLine("\t\t" + methodinfo.name); // Hvis det endda er EnKlasse klassen... if (classtype.name == "EnKlasse") //... så "leger" vi lidt med den og dens metoder.

10 // Afprøv Metode1(). if (methodinfo.name == "Metode1") CallMetode1(classType, methodinfo); // Ditto for Metode2(). if (methodinfo.name == "Metode2") CallMetode2(classType, methodinfo); Denne udskriver i denne version bare metodernes navne - hvilket jo kan være interessant nok i sig selv. Activator-klassen og Invoke funktionen Hvis det endeligt konstateres at det endda er EnKlasse klassen, så går programmet et skridt videre og prøver at kalde metoderne Metode1() og Metode2(). Først koden for Metode1(): private static void CallMetode1(Type enklassetype, MethodInfo method1) // Metoden var defineret som: // public void Metode1() // Opret en instans af klassen EnKlasse. object enklasseobj = Activator.CreateInstance(enKlasseType); // Kald Metode1() på instansen. Console.Write("\t\t\tResultat: "); method1.invoke(enklasseobj, null); En klasse kan have både static-erklærede og instans metoder. I dette tilfælde er der kun tale om instansvariable. For at kalde sådanne metoder skal man først have en instans - dvs. et objekt af klassen. Normalt ville man f.eks. kalde Metode1() på denne måde: EnKlasse ek = new EnKlasse(); ek.metode1(); Det kan vi imidlertid ikke gøre i dette tilfælde. Det første problem er at vi faktisk slet ikke har inkluderet definitionen af EnKlasse i vores konsol applikation. Husk på at EnKlasse jo bare er repræsenteret ved en type som vi tilfældigvis fandt i en DLL som vi loadede direkte fra harddisken. Alligevel kan vi lave en instans af denne klasse vha. refleksion. Det gør Activator-klassen med denne kommando:

11 object enklasseobj = Activator.CreateInstance(enKlasseType); Det kunne være fristende at skrive: EnKlasse enklasseobj = Activator.CreateInstance(enKlasseType); Men den går heller ikke. EnKlasse-definitionen er jo som sagt ikke inkluderet i vores applikation. Her er det så på sin plads at nævne en smule om constructoren: I EnKlasse-koden er der ikke angivet nogen constructor. Activator.CreateInstance() bruger derfor klassens default-constructor. En klasse har altid en costructor, og hvis man ikke selv har angivet en så vil.net selv tilføje en. Det er den man får udfør nor man skriver: new EnKlasse(); Hvis man selv har udvidet klassen med en eller flere constructore, har man mulighed for at kalde nogen af overload versionerne af CreateInstance() for at få Activator-klassen til at bruge dem i steder for defaultconstructoen. Vi har også en MethodInfo som beskriver den metode vi ønsker at køre; et objekt af typen MethodInfo har en Invoke() metode. Syntaksen er lidt sjov - essentielt set beder man metoden om at køre sig selv fra instansen af klassen: object enklasseobj = Activator.CreateInstance(enKlasseType); method1.invoke(enklasseobj, null); hvilket altså svare nogenlunde til dette: EnKlasse enklasseobj = new enklasseobj() enklasseobj.metode1(); fordi method1-argumentet, i kaldet til CallMetode1(), i dette tilfælde repræsenterer en MethodInfo for metoden Metode1(). Tjek selv efter hvor den kaldes i Scan4Methods() ovenfor. Koden for at kalde Metode1() var relativt simpel. Dette skyldes at den hverken tager argumenter eller returnere noget som resultat af kaldet. Der skal lidt mere med i kaldet af Metode2():

12 private static void CallMetode2(Type enklassetype, MethodInfo method2) // Metoden var defineret som: // public string Metode2(string argument) // Opret en instans af klassen EnKlasse. object enklasseobj = Activator.CreateInstance(enKlasseType); // Et array af argumenter til metoden. Der skal bruges // et array også selv om der som her kun er et enkelt // argument, nemlig en string. object[] parameters = "Lykken er: " ; // Kald Metode2() på instansen med parametrene // i arrayet. Gem returværdien i resultobj. object resultobj = method2.invoke(enklasseobj, parameters); // Vi ved at det faktisk var enklasseobj string. string resultstr = resultobj as string; // Udskriv resultatet. Console.WriteLine("\t\t\tResultat: " + resultstr); Argumenterne skal serveres som et array af objekter. Dette kan selvfølgelig godt virke lidt som overkill, hvis der nu kun er ét argument som det er tilfældet her. Ovenfor, for Metode1() brugte jeg i øvrigt bare en null på denne plads. Resultatet returneres i et objekt. Dette castes til en string og udskrives. Jeg har "snydt" lidt her og brugt at jeg kender metoderne på forhånd. Både metodernes argumenter, typerne og antallet af dem, samt deres returtype var kendt på forhånd. I et tidligere eksempel viste jeg hvordan man kunne detektere disse oplysninger på runtime tidspunktet. Attribute-klassen Refleksion handler primært om metadata - hvad kan klasser, interfaces, metoder, fields, osv. fortælle om sig selv. Alle disse ting er indbygget i.net frameworket på forhånd. Man har imidlertid selv tilføje oplysninger. Dette gøres vha. attributter - hvilket blot er klasser som arver fra Attribute-klassen. Du har sikkert allerede stødt på attributter uden at vide det. F.eks. hvis du har set en af disse linjer i noget af den kode du har været igennem: [assembly: AssemblyTitle("ReflectionNS6")] [DllImport] [Obsolete] [Serializable] [STAThread]

13 [Test] Attributter er en måde at hægte ekstra metadata på en klasse uden ellers at ændre den måde selve klassen fungere på. Normalt er de simpelthen en slags besked til andre programmer om at behandle klassen på en speciel måde. Det nævnte NUnit bruger attributter til at markere om noget er en klasse med test-metoder (TestFixtureAttribute) og om en given metode i en klasse er en test (TestAttribute). Hvis vi selv skulle lave en lille NUnit klon, kunne starten på denne se nogenlunde sådan her ud: using System; using System.Reflection; namespace NUnitKlon [AttributeUsage(AttributeTargets.Class)] class TestFixtureAttribute : Attribute [AttributeUsage(AttributeTargets.Method)] class TestAttribute : Attribute... Det er en konvention at attributten navngives med et "Attribute" sidst i navnet. Læg i øvrigt mærke til at der endda er brugt attributter på definitionen af de to attributter. I dette tilfælde betyder det at TestFixture kun kan bruges på klasser og at Test kun kan bruges på metoder. Under normale omstændigheder ville man have sine tests liggende i en separat DLL og ikke blande dem sammen med NUnit koden. Lad os se bort fra det, og med det sammen definere to klasser med test metoder i: [TestFixture] class UnitTestSuite1 [Test] public void Test1() Console.WriteLine("Test1 udført."); [Test] public void Test2() Console.WriteLine("Test2 udført."); [TestFixture] class UnitTestSuite2 [Test] public void TestX() Console.WriteLine("TestX udført.");

14 public void TestY() Console.WriteLine("Bliver ikke testet."); Læg mærke til at der skrives [TestFixture] og [Test] i stedet for [TestFixtureAttribute] og [TestAttribute]. Det er faktisk.net som tillader at man kan udelade "Attribute" hvis man ønsker det. Herefter selve programmet, som starter med at indlæse sig selv og skanne for typer: class Program static void Main(string[] args) // Load dette assembly... Assembly thisassembly = Assembly.GetExecutingAssembly(); //... og led alle typerne igennem. Scan4Types(thisAssembly);... Programmet går målrettet efter at finde de klasser som er dekoreret med en TestFixture attribut. Dette er de klasser hvor at der er test i. Ved at markere klasserne med attributten undgår man at skulle lede samtlige klasser igennem efter noget som kunne ligne en test metode - man kan dermed gå målrettet efter dem: private static void Scan4Types(Assembly thisassembly) Type[] typearr = thisassembly.gettypes(); foreach (Type type in typearr) // Er det en klasse som er dekoreret med en TestFixtureattribut. if (type.isclass && IsTestFixture(type)) // Led alle metoderne igennem. Scan4Tests(type); private static bool IsTestFixture(Type type) // Hent alle de attributter som er dekoreret med en TestFixtureAttribute. object[] attrarr =

15 type.getcustomattributes(typeof(testfixtureattribute), false); // Returnere sand hvis der mindst er en. Ellers false. return (attrarr!= null && attrarr.length > 0); Når programmet har fundet en passende klasse skannes den for metoder som er markeret med [Test]. Ved at skelne disse fra dem som ikke har denne attribut, kan man skelne de rigtige tests far de andre metoder (hjælpe metoder): private static void Scan4Tests(Type type) MethodInfo[] metharr = type.getmethods( BindingFlags.Public BindingFlags.Instance BindingFlags.DeclaredOnly); foreach (MethodInfo meth in metharr) // Er det en metode dekoreret med en Test-attribute? if (IsTest(meth)) // Kør testen. RunTest(type, meth); false); private static bool IsTest(MethodInfo meth) // Hent alle de attributter som er dekoreret med en TestAttribute. object[] attrarr = meth.getcustomattributes(typeof(testattribute), // Returnere sand hvis der mindst er en. Ellers false. return (attrarr!= null && attrarr.length > 0); Til sidst køres de test-metoder der er fundet:... private static void RunTest(Type type, MethodInfo meth) object testfixture = Activator.CreateInstance(type); meth.invoke(testfixture, null);

16 I sin nuværende form indeholder koden ikke noget tjek af at test-metoderne rent faktisk er på formen: public void MethodeNavn()... Der er et par enkelte andre steder hvor programmet ligeledes kunne strammes om, men det viste burde forhåbentlig vis demonstrerer grundprincippet. Efterord Ovenstående har blot ridset overfladen af nogen af de muligheder man har: F.eks. kan man også få fat i selve MSIL koden. Eller man kan endda generere ny kode på runtime tidspunktet. Jeg håber dog at det er nok til at du har fået blod på tanden til at gå videre. Kommentar af miclarsen d. 12. Feb Kommentar af bertelsenbo d. 15. Feb Dækker det essentielle og er godt forklaret Kommentar af sph1nx d. 06. Aug

Plugin-arkitektur med.net

Plugin-arkitektur med.net Denne guide er oprindeligt udgivet på Eksperten.dk Plugin-arkitektur med.net Denne artikel viser hvordan du kan lave en plugin-arkitektur i dit program. Gør det muligt for andre at skrive udvidelser til

Læs mere

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Singleton pattern i C#

Singleton pattern i C# Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er

Læs mere

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

METODER ARV KLASSER. Grundlæggende programmering Lektion 5 METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

Læs mere

Java Klasse nedarvninger

Java Klasse nedarvninger Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

SWC Elementer i klassedefinition

SWC Elementer i klassedefinition SWC Elementer i klassedefinition Indhold Eksempel... 2 Karakteristika for en klasse... 3 Karakteristika for et instance field... 4 Karakteristika for en constructor... 5 Karakteristika for en property...

Læs mere

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni 2011. 1 8 jun 2011 MapBasic &.

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni 2011. 1 8 jun 2011 MapBasic &. MapBasic &.NET interaktion MapBasic.NET Jakob Lanstorp IT konsulent COWI Odense 23. Juni 2011 1 MapBasic &.NET interaktion Erfaring med MapBasic.NET / Visual Studio Anden programmering 2 Program Hurtig

Læs mere

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections; PROGRAM using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace EventManager class Program static void Main(string[] args) string hovedmenu = ""; string svar;

Læs mere

Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.

Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af XML i C# Denne artikel vil vise lidt om hvordan man kan bruge XML i C#. Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.

Læs mere

Register-databasen med.net

Register-databasen med.net Denne guide er oprindeligt udgivet på Eksperten.dk Register-databasen med.net Mange programmer gemmer deres konfiguration-data i register-database. Denne artikel viser hvordan du - f.eks. vha. C# - henter

Læs mere

ATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11

ATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11 ATTRIBUTES DYNAMIC PROGRAMMING MULTITHREADING Grundlæggende programmering Lektion 11 1 ATTRIBUTES Information om adfærd 2 ATTRIBUTES En attribut er en deklarativ tag, der bruges til at formidle information

Læs mere

CodeDOM - Dynamisk generering og kompilering af kode

CodeDOM - Dynamisk generering og kompilering af kode Denne guide er oprindeligt udgivet på Eksperten.dk CodeDOM - Dynamisk generering og kompilering af kode Med CodeDOM kan man på runtime generere kode, kompilere det og derefter afvikle det. I denne artikel

Læs mere

Introduction til.net remoting i C#

Introduction til.net remoting i C# Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i C# Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i C#. Den forudsætter kendskab

Læs mere

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang

Læs mere

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder. Denne guide er oprindeligt udgivet på Eksperten.dk Collections i.net Når du kigger i namespacet System.Collections finder du over 10 forskellige klasser. At vælge den rigtige til netop din applikations

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge. Denne guide er oprindeligt udgivet på Eksperten.dk Tilfældige tal Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge. Den forudsætter

Læs mere

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen. Denne guide er oprindeligt udgivet på Eksperten.dk Grundlæggende PHP I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

Læs mere

I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.

I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal. Denne guide er oprindeligt udgivet på Eksperten.dk Afrund til helt tal I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal. Skrevet den 03. Feb 2009 af tjomsen I kategorien

Læs mere

At klippe en streng over på det mest hensigtsmæssige sted

At klippe en streng over på det mest hensigtsmæssige sted Denne guide er oprindeligt udgivet på Eksperten.dk At klippe en streng over på det mest hensigtsmæssige sted Formålet med denne artikel er at kaste lidt lys over, hvordan man klipper en streng over på

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Undtagelseshåndtering i C#

Undtagelseshåndtering i C# Denne guide er oprindeligt udgivet på Eksperten.dk Undtagelseshåndtering i C# I modsætning til C++ kan man i C# ikke skrive et program uden undtagelseshåndtering, så derfor har jeg skrevet denne guide

Læs mere

Test med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det.

Test med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det. Denne guide er oprindeligt udgivet på Eksperten.dk Test med NUnit Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det. Den forudsætter kendskab

Læs mere

Programmering for begyndere Lektion 2. Opsamling mm

Programmering for begyndere Lektion 2. Opsamling mm Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger

Læs mere

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste Denne guide er oprindeligt udgivet på Eksperten.dk Indkøbsvogn i PHP I denne artikel vil jeg prøve at lave en indkøbskurv som let kan udvides, og som ikke er svær at forstå. Det er bedst med viden om OOP(klasser),

Læs mere

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET. Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET. Der findes en tilsvarende artikel med

Læs mere

Send fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.

Send  fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende  fra Java. Denne guide er oprindeligt udgivet på Eksperten.dk Send email fra Java Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende email fra Java. Simple eksempler ikke noget vildt

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

Den forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET.

Den forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af XML i VB.NET Denne artikel vil vise lidt om hvordan man kan bruge XML i VB.NET. Den forudsætter kendskab til XML og VB.NET men ikke til brug af

Læs mere

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4 LØKKER METODER C S HISTORIE Grundlæggende programmering Lektion 4 1 LEKTIER UML struktur diagrammer om biler 2 OPERATORER Syntaks til at udføre forskellige beregninger og handlinger Booleans og hvorfor

Læs mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

Database for udviklere. Jan Lund Madsen PBS10107

Database for udviklere. Jan Lund Madsen PBS10107 Database for udviklere Jan Lund Madsen PBS10107 Indhold LINQ... 3 LINQ to SQL og Arkitektur... 3 O/R designere... 5 LINQ Den store introduktion med.net 3.5 er uden tvivl LINQ(udtales link): Language-INtegrated

Læs mere

Introduction til.net remoting i VB.NET

Introduction til.net remoting i VB.NET Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i VB.NET Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i VB.NET. Den forudsætter

Læs mere

Debugging ivs. Praksis eksempel. Assemblies Attributes Dynamic programming. Github. Multithreading. Grundlæggende programmering Lektion 6

Debugging ivs. Praksis eksempel. Assemblies Attributes Dynamic programming. Github. Multithreading. Grundlæggende programmering Lektion 6 Praksis eksempel Assemblies Attributes Dynamic programming Multithreading Debugging ivs Github Grundlæggende programmering Lektion 6 Praksis eksempel ShareX, et skærm-optager program ShareX er et gratis

Læs mere

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af MySQL i C++ Denne artikel bygger ovenpå artiklen "MySQL C API" og forklarer hvordan man kan programmere mere objekt orienteret. Den forudsætter

Læs mere

Lektion 6. Grundlæggende programmering i VR

Lektion 6. Grundlæggende programmering i VR Lektion 6 Grundlæggende programmering i VR Plan for i dag Simpelt FPS Triggerzones og animationer C# og objekt orienteret programmering Interfaces Generics Google Cardboard Video om VRs fremtid App til

Læs mere

Kontrol-strukturer i PHP

Kontrol-strukturer i PHP Denne guide er oprindeligt udgivet på Eksperten.dk Kontrol-strukturer i PHP Denne artikel gennemgår kontrolstrukturer i PHP. 'if', 'switch', 'while' og 'for' bliver gennemgået. Den forudsætter lidt grundlæggende

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

Kursusarbejde 2 Grundlæggende Programmering

Kursusarbejde 2 Grundlæggende Programmering Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................

Læs mere

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

Læs mere

Metoder Klasser Arv. Operatorer Løkker. Praksis eksempel. Grundlæggende programmering Lektion 3

Metoder Klasser Arv. Operatorer Løkker. Praksis eksempel. Grundlæggende programmering Lektion 3 Praksis eksempel Operatorer Løkker Metoder Klasser Arv Grundlæggende programmering Lektion 3 Praksis eksempel Et program der benytter Unity til at lave et 3D spil Praksis eksempel Spil der benytter Unity

Læs mere

Klasser og objekter. (Afsnit i manualen)

Klasser og objekter. (Afsnit i manualen) Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#.

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#. Denne guide er oprindeligt udgivet på Eksperten.dk.NET 4.0 og C# 4.0 Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#. Skrevet den 14.

Læs mere

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1 Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Introduktion til AOP i C#

Introduktion til AOP i C# Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til AOP i C# Denne artikel giver en introduktion AOP (Aspect Oriented Programming) i C#. Den forudsætter et pænt kendskab til programmering,

Læs mere

Bits, bit operationer, integers og floating point

Bits, bit operationer, integers og floating point Denne guide er oprindeligt udgivet på Eksperten.dk Bits, bit operationer, integers og floating point Denne artikel beskriver hvordan data gemmes som bits og hvordan man kan manipulere med bits. Den forudsætter

Læs mere

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree. Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer

Læs mere

Tredjepart webservices

Tredjepart webservices Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output

Læs mere

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7 DM01 DM01 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 13/5-2003 Side 1 af 7 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DNA2:...4 2.1.1 METODER:...4

Læs mere

Udvikling af DOTNET applikationer til MicroStation i C#

Udvikling af DOTNET applikationer til MicroStation i C# Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt

Læs mere

Arkitektur for begyndere

Arkitektur for begyndere Denne guide er oprindeligt udgivet på Eksperten.dk Arkitektur for begyndere Denne artikel beskriver forskellige basale n-tier arkitekturer. Som man bør kende og have valgt inden man går igang med at udvikle

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Eksempel: et ordresystem note 5 Lagdeling s. 1

Eksempel: et ordresystem note 5 Lagdeling s. 1 Eksempel: et ordresystem note 5 Lagdeling s. 1 Eksempel: et ordre-system NiceHair er et firma, som sælger udstyr, inventar og frisørartikler til frisørsaloner over hele landet. Det er ejet af et ægtepar

Læs mere

Introduktion til funktioner, moduler og scopes i Python

Introduktion til funktioner, moduler og scopes i Python Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for

Læs mere

Løsningsforslag til Camp Let. Case Beskrivelse: Camp Let

Løsningsforslag til Camp Let. Case Beskrivelse: Camp Let Løsningsforslag til Camp Let Case Beskrivelse: Camp Let Firmaet Camp Let har til formål at udleje forskellige typer transportable ferieboliger. Det drejer sig i øjeblikket om campingbusser, campingvogne,

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel: Denne guide er oprindeligt udgivet på Eksperten.dk SQL og ASP En artikel omkring simpel SQL og hvordan disse opbygges, udformes og udføres, sådan at man kan få et brugbart resultat i ASP. Dette ligefra

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

Afsending af s vha. ASP

Afsending af  s vha. ASP Denne guide er oprindeligt udgivet på Eksperten.dk Afsending af emails vha. ASP Det kan ofte være praktisk at afsende emails fra sin hjemmeside. Denne artikel tager udgangspunkt i komponenten JMail fra

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

.NET 4.5 og C# 5.0. Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#.

.NET 4.5 og C# 5.0. Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#. Denne guide er oprindeligt udgivet på Eksperten.dk.NET 4.5 og C# 5.0 Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#. Skrevet den 11.

Læs mere

Arrays i PHP. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 04. Feb 2009 af taskmgr I kategorien Programmering / PHP

Arrays i PHP. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 04. Feb 2009 af taskmgr I kategorien Programmering / PHP Denne guide er oprindeligt udgivet på Eksperten.dk Arrays i PHP De fleste som har skrevet omfattende scripts, er før eller siden stødt på problemet med at de bliver vanskelige at overskue hvis man bruger

Læs mere

WINDOWS FORMS EVENTS INTERAGEREN MED FIL SYSTEMET. Grundlæggende programmering Lektion 9

WINDOWS FORMS EVENTS INTERAGEREN MED FIL SYSTEMET. Grundlæggende programmering Lektion 9 EVENTS INTERAGEREN MED FIL SYSTEMET WINDOWS FORMS Grundlæggende programmering Lektion 9 1 EVENTS Der sker ting når der sker ting 2 EVENTS Events er brugerhandlinger såsom tastetryk, klik, musebevægelser,

Læs mere

C# spil (del 1) - Kom i gang med et simpelt spil

C# spil (del 1) - Kom i gang med et simpelt spil Denne guide er oprindeligt udgivet på Eksperten.dk C# spil (del 1) - Kom i gang med et simpelt spil Denne artikel starter helt fra grunden (med GDI). Den viser hvordan man undgår flimmer, og hvordan man

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Med register_globals = On får du automatisk adgang til en række variabelnavne i dit script.

Med register_globals = On får du automatisk adgang til en række variabelnavne i dit script. Denne guide er oprindeligt udgivet på Eksperten.dk Register Globals Off Lad os slå en ting fast med det samme - register_globals = Off er en god ting, i hvert fald set ud fra et sikkerhedsmæssigt synspunkt.

Læs mere

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

Hvilket sprog er hurtigst

Hvilket sprog er hurtigst Denne guide er oprindeligt udgivet på Eksperten.dk Hvilket sprog er hurtigst Denne artikel forsøger at aflive forskellige myter om hvilke sprog der er hurtigst. Den forudsætter ikke noget særligt. Skrevet

Læs mere

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Denne guide er oprindeligt udgivet på Eksperten.dk RMI avanceret Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Den forudsætter

Læs mere

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api Specifikation Abstrakt, objektorienteret operativsystem-api Indhold 1 Indledning... 3 1.1 Introduktion... 3 1.2 Formål... 3 1.3 Overordnede krav... 3 2 Ressourcer i OS-API et... 4 2.1 Tråde... 4 2.2 Timere...

Læs mere

Offset til terminalskærm i Java

Offset til terminalskærm i Java Denne guide er oprindeligt udgivet på Eksperten.dk Offset til terminalskærm i Java Ikke en atikkel - men en Classe til java der gør det nemt at skrive ud på avancerede måder når man kun opererer i dosvindue.

Læs mere

ODIN-webservice ændringer release 2010 v2.0

ODIN-webservice ændringer release 2010 v2.0 DOKUMENTATION OG VEJLEDNING ODIN-webservice ændringer release 2010 v2.0 Indholdsfortegnelse 1. Nye webservice metoder... 2 1.1 Anvendelse af køretøjer og personel fra fremmede beredskaber ifm. indberetning

Læs mere

Overblik. Class Loader. Java. Class Libraries. Bytecode. Verifier Java. Source (.java) Just in Time Compiler. Java

Overblik. Class Loader. Java. Class Libraries. Bytecode. Verifier Java. Source (.java) Just in Time Compiler. Java OOP1 Java intro. Klasser, objekter, interfaces, nedarvning, Association, Aggregation og Composition mvh. Try and catch exceptions. Package Intro. til jar filer. Overblik Compile-time Environment Run-time

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

Denne artikel er en detaljeret gennemgag af det fundamentale i batchfiler til hjemmebrug :-) FEEL THE POWER! ;-)

Denne artikel er en detaljeret gennemgag af det fundamentale i batchfiler til hjemmebrug :-) FEEL THE POWER! ;-) Denne guide er oprindeligt udgivet på Eksperten.dk Batch genopfriskning Denne artikel er en detaljeret gennemgag af det fundamentale i batchfiler til hjemmebrug :-) FEEL THE POWER! ;-) Skrevet den 03.

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Vinter 1998/99 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 16% Opgave 2 12% Opgave 3 10% Opgave

Læs mere

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 1241 August 24, 2010 Indhold I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering 4 III Sprogkonstruktioner 5 4 Klasser

Læs mere

Objektorienteret Programmering

Objektorienteret Programmering Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:

Læs mere

Kursus navn: Indledende programmering Kursus nr. 02101

Kursus navn: Indledende programmering Kursus nr. 02101 Danmarks Tekniske Universitet Side 1 af 8 sider Skriftlig prøve, den 15. december 2007 Kursus navn: Indledende programmering Kursus nr. 02101 Tilladte hjælpemidler: Alle skriftlige hjælpemidler Vægtning

Læs mere

Tidligere gik denne i øvrigt under navnet DLINQ for Database LINQ, og man kan finde masse materiale om emnet under dette navn på Internettet.

Tidligere gik denne i øvrigt under navnet DLINQ for Database LINQ, og man kan finde masse materiale om emnet under dette navn på Internettet. Denne guide er oprindeligt udgivet på Eksperten.dk LINQ for SQL med C# LINQ for SQL er en af de nye teknologier med.net 3.5. Den gør det muligt at skrive (typesikre!) database søgninger direkte i programkoden

Læs mere

Test med JUnit 3. Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det.

Test med JUnit 3. Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det. Denne guide er oprindeligt udgivet på Eksperten.dk Test med JUnit 3 Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det. Den forudsætter kendskab

Læs mere

Loginsystem (med MySQL)

Loginsystem (med MySQL) Denne guide er oprindeligt udgivet på Eksperten.dk Loginsystem (med MySQL) Dette er en guide til, hvordan man kan lave et loginsystem med php og muligvis også med sessioner og MySQL Skrevet den 02. Feb

Læs mere

Introduktion til NAnt

Introduktion til NAnt Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til NAnt Denne artikel beskriver NAnt, som er et værktøj til at builde.net applikationer med. Den beskriver nogle af de mest brugte NAnt

Læs mere

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen... Modul 2 Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen... 6 Opgave... 6 POST/GET og formular... 6 Opgaver...

Læs mere

Kapitel 6 Events i C#

Kapitel 6 Events i C# Kapitel 6 i C# Når vi snakker programmering er en Event når der aktiveres specielt indbygget kode. Der sker en hændelse (event). Man siger at eventet bliver udført. De events vi skal gennemgå i dette kapitel

Læs mere