Presentation laddar. Vänta.

Presentation laddar. Vänta.

Mall för ett C#-program

Liknande presentationer


En presentation över ämnet: "Mall för ett C#-program"— Presentationens avskrift:

1 Mall för ett C#-program
/* * Här kommenteras vad programmet (klassen) skall göra */ class ProgramNamn { public static void Main () // Här står källkoden för det som skall // utföras när programmet exekveras } // Efter definitionen av Main kan det // följa definitioner av andra metoder.

2 Namnsättning kompilering class MyClass { } MyClass.cs MyClass.exe

3 Main - startpunkten class ProgramNamn { public static void Main ()
// Huvudflödet… } Ordet void innebär att metoden main inte lämnar något returvärde. Ordet public betyder att metoden skall vara åtkomlig utifrån. Det måste den vara för att interpretatorn skall kunna anropa den. Ordet static anger att metoden main är en klassmetod (statisk metod). En klassmetod är en metod som inte är speciell för något visst objekt, utan som har att göra med själva klassen. Eftersom det inte finns något objekt när programmet startar, måste main vara en klassmetod.

4 Kompilera och exekvera

5 Literaler Primärminnet ”Hej” 345 Hej 345

6 Variabler a = b = c = ”Hej” 345 -267.678 a = ”Hej då” b = -987
Primärminnet a = b = c = ”Hej” 345 Symboliska adresser a b c Hej då -987 35.231 Hej 345 a = ”Hej då” b = -987 c = Variabler kan ändra innehåll

7 Literaler public class ProgramEtt { public static void Main ( )
System.Console.WriteLine("Hej"); System.Console.WriteLine(345); System.Console.WriteLine( ); }

8 Variabler public class ProgramEtt { public static void Main ( )
string a = "Hej"; int b = 345; double c = ; System.Console.WriteLine(a); System.Console.WriteLine(b); System.Console.WriteLine(c); } a = "Hej då!"; b = -987; c = ;

9 Variabler, datatyper En variabel är ett utrymme i datorns arbetsminne som reserveras eller används av ett program under en kortare eller längre del av programmets exekvering. I C# måste alla variabler måste typdeklareras. Det finns följande primitiva datatyper : heltal (sbyte, byte,short, ushort, int, uint, long, ulong) flyttal (float, double, decimal) boolsk typ (bool) tecken (char, string) Övriga datatyper i C# är referenstyper (ej strukter). Värden i dessa typer kallas objekt

10 variabeldeklarationer
int heltal; double flyttal; char tecken; bool klar; string namn; Exempel på tilldelning: heltal = 2; flyttal = 9.0/heltal; flyttal = 9/heltal; tecken = 't'; klar = false; namn = "Göran"; Här blir flyttal = 4.5 Här blir flyttal = 4.0 Observera skillnaden i apostrofer om det är en textsträng eller ett enskilt tecken!

11 Konstanter Som variabler, men värdet kan inte ändras!
const string a = ”Hej”; a = ”Hej då”;

12 Literaler, variabler och konstanter
public class VariabelTesta { public static void Main ( ) int a = 45678; double b = 4.567; System.Console.WriteLine(a * (b + 2)); string s = “Helledudanedå”; System.Console.WriteLine(s); }

13 OBS! C# är ”case sensitive” !
Identifierare class Loneberakning { public static void Main ( ) const int TIMLÖN = 90; int antaltimmar = 40; int summa = TIMLÖN * antaltimmar; System.Console.WriteLine(summa); } OBS! C# är ”case sensitive” !

14 Kommentarer Allt mellan /* och */, samt allt efter // på en rad hoppar kompilatorn över class ProgramNamn { // Kommentar på en rad public static void Main () // Kommentar i slutet av rad } /* * En kommentar över * flera rader */

15 Operationer En operator är en symbol som samverkar på något sätt med operander a = b + c operatorer operation operander operation

16 Uttryck Ett uttryck är en representation av ett värde, framställt med ett värde eller en operation a = b + c uttryck uttryck uttryck

17 Uttryck sammansatta uttryck a = b + c primära uttryck

18 Aritmetiska operatorer
* Multiplikation / Division % Rest (modulo) + Addition - Subtraktion = Tilldelning

19 Särskilda aritmetiska operatorer
++ Ökning av variabelvärdet med 1 -- Minskning av variabelvärdet med 1 *= Tilldelning efter multiplikation /= Tilldelning efter division %= Tilldelning efter modulo += Tilldelning efter addition -= Tilldelning efter subtraktion

20 Datatyper primitiva datatyper Datatyp Bitar Alias för boolsk boolean 1
Datatyp Bitar Alias för boolsk boolean 1 System.Boolean heltal sbyte 8 System.Sbyte byte System.Byte short 16 System.Int16 ushort System.UInt16 int 32 System.Int32 uint System.UInt32 long 64 System.Int64 ulong System.UInt64 char System.Char flyttal float System.Single double System.Double decimal 128 System.Decimal text string System.String generisk typ object System.Object primitiva datatyper Även om string inte är en primitiv datatyp, kan den ofta användas på ett likartat sätt, ur programmerarens synvinkel, så vi tar med även den redan nu.

21 Vektorer namn[3] namn ålder

22 Flerdimensionella vektorer
1 56 2 1 2 3 4

23 Flerdimensionella vektorer
rad kolumn djup

24 Vektoradressering 3 4 5 2 1 public class ArrayTest {
public static void Main () int[] betyg = {3, 4, 5, 2, 4, 3, 1, 3, 2, 4, 2, 3, 4}; int längd = betyg.length; // Antal element System.Console.WriteLine(längd); System.Console.WriteLine(betyg[6]); } Skriver ut ”1” betyg betyg[2] Indexnumreringen börjar med ”0” Primärminnet 3 4 5 2 1

25 Vektoradressering 3 4 5 2 1 Primärminnet public class ArrayTest {
public static void Main () int[][] lista = {{3}, {2, 4, 3}, {1, 4}, {5, 3, 2, 3, 4}}; längd = lista.length; // Antal rader System.Console.WriteLine(längd); längd = lista[3].length; // Antal element i rad 4 } Primärminnet 3 4 5 2 1 lista[2][1] C# är ett av de få programmeringsspråk som kan hantera ”assymetriska” matriser

26 Vektorer Stack Heap ”objektet”
Att C# är ett av de få programmeringsspråk som kan hantera ”assymetriska” matriser beror till viss del på hur dessa lagras. I de flesta språk/miljöer lagras arraymedlemmarna i en enda rad på variabeladressens plats, och adresseringen utav de enskilda elementen sker genom en intern omräkning baserad på datatypens storlek. I C# är vektorer egentligen objekt! I C# är alla objekt referenstyper (till skillnad från de primitiva värdetyperna) Primärminnet Primärminnet är partitionerat i flera olika delar. Alla variabler hamnar i en del som kallas ”stack”. Stack Heap lista ”objektet” När det gäller referenstyper, läggs inte värdet i behållaren på ”stacken”, utan värdet läggs i något som kallas ”heap” adress till objektet Variablens plats håller då en referens till värdet på ”heapen”

27 Vektoradressering 3 4 5 2 1 Primärminnet Stack Heap ”matris-objektet”
lista referens till objektet ”matris-objektet” referens till vektor 0 3 4 5 2 1 referens till vektor 1 referens till vektor 2 referens till vektor 3

28 variabeltyper Det finns inom grundläggande programmering i huvudsak två slags variabeltyper: värdetyper referenstyper ... int heltal; float flyttal; char bokstav; ... string textsträng; Bok boken; int[] poängen;

29 Posttyp En struct är en sammansatt typ där flera värden av olika typ kopplas till en enhet. struct Bok { public string namn; public string författare; public float pris; }

30 Procedurer och funktioner
public class SumTest { public static void Main () Summera(); } public static void Summera () System.Console.Write(“Ange tal: “); int a = int.Parse( System.Console.ReadLine() ); int b = int.Parse( System.Console.ReadLine() ); System.Console.WriteLine( a + b );

31 Procedurer och funktioner
public static void Main () { Summera(); } public static void Summera () { System.Console.Write(“Ange tal: “); int a = int.Parse( System.Console.ReadLine() ); int b = int.Parse( System.Console.ReadLine() ); System.Console.WriteLine( a + b ); } Vid anropet av en metod ”hoppar” exekveringen till den punkten i programmet När metoden kört klart, hoppar exekveringen tillbaks, och kör vidare på raden efter anropet

32 Funktioner I Excel använder vi färdiga funktioner.
static int heltal (double tal) { return (int) tal; } Som programmerare gör vi också funktioner själva:

33 Funktioner & procedurer
En procedur var en del utav ett program, som brutits ut för att få det programmet överskådligt, eller för att slippa upprepa kod. Jobbar mot programmets data Därför inget returvärde En funktion sågs från början inte som en del utav programmet, utan snarare ett ”hjälpprogram” för att få fram resultatet utav en viss beräkning eller liknande Jobbar mot data som fåtts i parameterlistan Returnerar resultatet

34 Metoder I dagens moderna programmeringsspråk har detta oftast förenklats till en enda gemensam konstruktion, vilket vi kallar metod. Varför man använder metoder: för att programmet skall bli mera lättläst för att kunna återanvända kod

35 Metodens signatur public static int minstaTalet (int a, int b) {
Ordet public anger att metoden är synlig utifrån, dvs att även andra program (klasser) kan anropa den. Ordet static anger att metoden är en klassmetod (statisk metod). Detta nyckelord utelämnas helt, om vi vill använda det för objekt. Om en metod skall returnera något måste rätt datatyp anges här. Om metoden inte lämnar något returvärde skriver man istället void. Parametrar till metoden. Dessa fungerar inom metoden som lokala variabler. Metodens namn public static int minstaTalet (int a, int b) { if (a < b) return a; return b; } Kombinationen utav metodnamn, formella parametrar och returtyp, kallas för metodens ”signatur”

36 Funktioner class GradTest { static double Fahrenheit (double c)
return (c * 9 / ); } static double Celcius (double f) return ((f - 32) * 5 / 9); public static void Main () System.out.println("Fahrenheit:" + Fahrenheit(37.2) ); System.out.println("Celcius:" + Celcius(99) );

37 Procedurer class ProcedurTest { static hälsning = "Hello World!";
static void proceduren () System.out.println(hälsning); } public static void main (String[] args) ProcedurTest.proceduren();

38 Metoder y = Math.Sqrt(x); Metoden finns i .NETs klassbibliotek.
Sqrt( ) är en statisk metod (klassmetod). Den anropas via klassnamnet. Klassen Math finns i namnrymd System och är deklarerad: public static double Sqrt(double d)

39 using Vill man använda funktioner i ett program (en klass) från .NETs standardbibliotek måste man inleda med using för den namnrymd där klasserna finns: using System; using System.Collections; Därigenom har man tillgång till alla klasser i den namnrymd man angett. Titta på egen hand i dokumentationen för System.Math System.String System.DateTime System.Random

40 Metoder i String-biblioteket
Studera nu några användbara metoder i klassen System.String Vad kan vi behöva? Vi vill jämföra två strängar veta längden av en sträng plocka ut delar av en sträng Studera metoden Equals ( ) public virtual bool Equals(Object o) Antag följande deklaration: string namn1 = "Ola"; string namn2 = "Olle";

41 Metoder if (namn1.Equals(namn2))
Skriv ”lika” O Skriv ” olika” if (namn1.Equals(namn2)) System.Console.WriteLine("Lika namn"); else System.Console.WriteLine("Olika namn");

42 String informatik värden En sträng är en ändlig följd av tecken.
OBS!!! När en sträng väl är skapad går det ej att göra några ändringar. string str1 = "informatik"; str1 är en referensvariabel som pekar på det utrymme i primärminnet där strängkonstanten "informatik" ligger. informatik värden index str1 En sträng har en fast längd: str1.Length // str1 har längden 10

43 String informatik värden Informatik värden
Antag att jag vill ha ändra i till I i str1. Hur göra? Svar: Man måste skapa en ny sträng, tex str1 = ”informatik"; str1 = "I" + str1.Substring(1); informatik värden index str1 Informatik värden index

44 Skillnaden mellan parameter och argument
public class Meddelande { public static void Main() Skriv(5); // argumentet är 5 } public static void Skriv(int antalGgr) { //formell parameter är antalGgr for (int i = 0; i < antalGgr; i++) System.Console.WriteLine("Hej Nisse!");

45 Parametrar antalGgr är en formell parameter och en lokal variabel.
i är också en lokal variabel. Dessa är endast definierade inne i metoden. Kom ihåg när ni anropar en metod att alltid kontrollera att de formella och de aktuella parametrarna överensstämmer till antal, ordning och typ!!! Ändra i Meddelande så att Main-metoden endast innehåller anropet skriv(”Cecilia”,5); Utskriften vid körning skall se ut som tidigare, men metoden skall hälsa på rätt person, dvs det som kommer in som argument 1.

46 Parametrar och argument skall stämma
public class Meddelande { public static void Main(String[] args) skriv("Cecilia", 5); // två argument } public static void Skriv(string namn, int antalGgr) { // två formella parametrar for (int i = 0; i < antalGgr; i++) System.Console.WriteLine("Hej " + namn + "!");

47 return Avslutningen utav en funktion sker med det reserverade ordet return, tillsammans med värdet av det som skall returneras. public class Test { public static void Main(String[] args) int a = Plus(4, 5); System.Console.WriteLine(a); } int Plus(int x, int y) int z = x + y; return z; Där avslutas exekveringen av metoden och exekveringen av programmet där metodanropet ingick fortsätter. Värdet av anropet är värdet av uttrycket efter return.

48 Returvärden public class Test { public static void Main(String[] args) int a = Plus(4, 5); System.Console.WriteLine(a); } int Plus(int x, int y) return x + y; När return följt av ett uttryck exekveras beräknas värdet av uttrycket. Värdet i det som returneras måste naturligtvis stämma med returtypen, eller kunna omvandlas till samma typ med implicit typkonvertering.

49 Lär er att hitta i klassbiblioteket
Färdiga funktioner Lär er att hitta i klassbiblioteket Funktioner för stränghantering och numerisk omvandling hittar ni bl.a. i: System.String (string) System.Double (double) System.Single (float) System.Int32 (int) System.Int64 (long) Grundläggande matematiska funktioner hittar ni bl.a. i : System.Math

50 Stack och Heap i primärminnet
Operativ-systemarea Stack Heap Maskininstruktioner för varje procedur/funktion inklusive huvudprogrammets kod. Koden är fix, den ändras inte under exekveringen. ”statiska” data: ”värdet” i värdetyper och referenstypernas adresser på heapen ”dynamiska” data: ”värdet” för referenstyperna Instruktionsarea

51 Sammansatta typer och minnet
Beroende på kompilator/språk läggs sammansatta typer i minnet på olika sätt (något förenklat exempel): C++: Bok bokEtt (”Java från grunden”, ”Franzén”, ”Studentlitteratur”, 440); Värdena hamnar på ”stacken”. C++/Java: Bok bokTvå = new Bok(”Java från grunden”, ”Franzén”, ”Studentlitteratur”, 440); Värdena hamnar på ”heapen”. C# skiljer på ”struct” och ”class”, där en variabel för en instans av en struct blir av värdetyp, dvs värdena hamnar på ”stacken”, medan en variabel för en instans ur en class blir av referenstyp, dvs värdena hamnar på ”heapen”.

52 Vektorer och minnet Beroende på kompilator/språk läggs vektorer i minnet på olika sätt (något förenklat exempel för den grundläggande principen): int[] poängen = {45, 13, 67}; Primärminnesadress: (stacken) Variabeln poängen[0] refererar nu till adress 102. För att kompilatorn skall hitta till poängen[1], lägger den på storleken av en int för varje index. Men i C# fungerar inte vektorer på detta sätt…

53 Vektorer och minnet I C# är en vektor alltid en referenstyp!
int[] poängen = {45, 13, 67}; Primärminnesadress: (stacken) Här refererar variabeln poängen till adress 102. För att kompilatorn skall hitta till poängen[n], går den till adressen på heapen (något förenklat):

54 Variabler och minnet Olika variabler använder minnet på olika sätt. I C# sker det på följande sätt: variablerna hamnar på ”stacken” Om variablerna är ”värdetyper” hamnar värdena på ”stacken” Om variablerna är ”referenstyper” hamnar värdena på ”heapen” string textsträng = ”Hej!”; r204 Hej! int heltal = 45; 45 float flyttal = (float) 14.6; 14.6 char bokstav = ’a’; 97 45 13 67 r206 int[] poängen = {45,13,67};

55 Tilldelning med värdetyper
Primärminnet 5 kopiering 5 a b

56 Tilldelning med referenstyper
Primärminnet Objektet Ref kopiering Ref a b

57 Block { } kan uppfattas som en slags parentes. Ibland måste vi använda detta när vi skall ”samla” flera programsatser för att hanteras som ett block. Varje programsats avslutas med semikolon.

58 Variablers synlighet och räckvidd
Finns och syns i hela programmet class MinaVariabler { static int x = 8; public static void Main() int y = 16; MinMetod(); } public static void MinMetod() int z = 32; Finns och syns bara i metoden Main Finns och syns bara i metoden MinMetod Block Här går z ur räckvidden (ur ”scope”) och upphör att existera

59 Block och lokala variabler
using System; public class Lokal { public static void Main ( ) int c = 111; int b = 333; int a = 222; Console.WriteLine(a + b); } Console.WriteLine(c); Block Block

60 Det utrymme som vi allokerar för programmet måste vi också deallokera.
Skräpsamling Det utrymme som vi allokerar för programmet måste vi också deallokera. Minnesutrymmen för värden på stacken återvinns automatiskt (lokala variabler av värdetyp) när variabeln ”gått ur räckvidden”. Minnesutrymmen på heapen måste återvinnas aktivt (värden för variabler av referenstyp och ev variabler av värdetyper som de i sin tur refererar till) I .NET återvinns utrymmen på heapen av en skräpsamlare (Garbage Collector), vid behov.

61 I .NET finns datatypen System.DateTime Håller både datum och klockslag
DateTime lucia = new DateTime(2004, 12, 13); DateTime idag = DateTime.Today; DateTime nu = DateTime.Now;


Ladda ner ppt "Mall för ett C#-program"

Liknande presentationer


Google-annonser