string versus char string char klasse primitief type

Slides:



Advertisements
Verwante presentaties
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Advertisements

Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Hoofdstuk 6: Controle structuren
Hoofdstuk 2 Hallo, C# !.
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 8 Objecten en klassen.
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Hoofdstuk 9 Objecten en klassen.
Hoofdstuk 10.1 Toepassing: Bitmap-editor. nKlik punten op scherm nPlaatje verschuiven left, right, up, down nPlaatje bewerken clear, invert, bold, outline.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Hoofdstuk 3 Methoden om te tekenen.
Over-erving nObjecten van een subklasse erven variabelen en methoden&properties van de superklasse kleiner straal CirkelGroei geërfd zelf gede- clareerd.
Hoofdstuk 4 Nieuwe methoden. Tekenen g.drawRect(20,60,40,40); g.drawLine(20,60,40,40); g.drawLine(40,40,60,60); g.drawRect(70,60,40,40); g.drawLine(70,60,90,40);
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Hoofdstuk 2 Hallo, C# !. Opbouw broncode nOpdrachten om het geheugen te veranderen nOpdrachten zijn gegroepeerd in methoden nMethoden zijn gegroepeerd.
Gelijkheid van Strings static bool Gelijk( string s, string t) { } int m = s.Length; int n = t.Length; for (i=0; i
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Klasse uit library Android.App Activity Bij het starten van een app: nOperating system maakt een Activity -object aan… n…en neemt dat onderhanden met de.
Klasse uit library Android.App Activity Bij het starten van een app: nOperating system maakt een Activity -object aan… n…en neemt dat onderhanden met de.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Eerste deeltentamen nNagekeken werk ligt voor in de zaal nNeem je eigen werk mee: in het college wordt het besproken nVragen over de beoordeling: in de.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Windows-applicatie class HalloWin1 { static void Main ( ) { } Form scherm; scherm = new Form( ); Application.Run(scherm); using System.Windows.Forms; scherm.Text.
Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty.
Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Meer constructormethodes in klasse Kleur { class Kleur } public byte Rood, Groen, Blauw; public Kleur( byte r, byte g, byte b ) { } Rood=r; Groen=g; Blauw=b;
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Activity Bij het starten van een app:
Objectgeoriënteerd Programmeren (2)
Aanroep van een methode voert opdrachten uit in de body daarvan
Voortborduren op eerder gedaan werk
ISensorEventListener
Gameprogrammeren: Objecten en geheugen
Reader en Writer leest en schrijft bytes leest string en char
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Char en String
Letterfrequentie turven
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Windows-applicatie using System.Windows.Forms; using System.Drawing;
vandaag èn vrijdag deadline maandag 12 dec.
Publieksvraag // schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string // voorbeeld-aanroep: int n; n = Demo . Freq(’e’,
Gameprogrammeren: Herhalingen
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Gameprogrammeren: Properties
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Arjan Egges & Paul Bergervoet
Tinpro015b-les4 Klassen.
Voorbeeld: Simulatie van bewegende deeltjes
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Voortborduren op eerder gedaan werk
Practicum: schets-editor
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Aanroep van een methode voert opdrachten uit in de body daarvan
Arjan Egges & Paul Bergervoet
Exceptions Exception:
Eerste deeltentamen Nagekeken werk ligt voor in de zaal
Gameprogrammeren: Arrays
Transcript van de presentatie:

string versus char string char klasse primitief type object-verwijzing directe waarde nul, een of meer… precies één symbool "" "A" "hello" ’A’ operatoren, methoden properties, indexer operatoren == , + == , + , <= Substring, ToUpper Length s[i]

string versus array Klasse Type met speciale syntax Indexer -notatie string s = new string(); char[] a = new char[10]; Indexer -notatie Speciale index-notatie c = s[2]; s[3] = c; c = a[2]; a[3] = c; Speciale quote-notatie s = "hallo"; Property s.Length Property a.Length Methoden s.IndexOf(t); s.Substring(3,2);

Tel symbool-frequentie public static int Freq(char x, string s) { int aantal; aantal = 0; for (int t=0; t<s.Length; t++) if ( ) aantal++; s[t]==x return aantal; }

Publieksvraag: Gelijkheid van Strings static bool Gelijk( string s, string t) { return s==t; Maar dan zonder de bestaande operator == voor strings te gebruiken == voor char en int mag wel }

Publieksvraag: Gelijkheid van Strings static bool Gelijk( string s, string t) { int m = s.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { char c = s[i]; char d= t[i]; if (c!=d) return false; } return m==n; }

Gelijkheid van Strings class String { static bool Equals( string s, string t) { int m = s.Length; this.Length; int n = t.Length; for (i=0; i<m && i<n; i++) { char c = s[i]; this[i]; char d= t[i]; if (c!=d) return false; } return m==n; } }

member void type naam methode ( parameters ) blok

member void type naam methode operator op ( parameters ) blok

Gelijkheid van Strings class String { static Gelijk ( string s, string t) operator == { return s.Equals(t); } }

Voorbeeld: Simulatie van bewegende deeltjes Simulatie - object Ruimte - objecten Deeltje - objecten Button - objecten

zich zelfstandig ontwikkelende lijn van gebeurtenissen Animatie Animatie: “tekenfilm” programma toont automatisch veranderende beelden Gemakkelijk te programmeren met gebruik van de klasse “draadje” Thread zich zelfstandig ontwikkelende lijn van gebeurtenissen

en keert dan direct terug Maak een animatie Thread animatie; animatie = new Thread ( this.run ); animatie . Start ( ); this . run ( ); roept de methode aan die bij constructor is meegegeven en keert dan direct terug (terwijl de methode nog bezig is)

De methode run class Simulatie : Form { oneindige herhaling! } oneindige herhaling! void run ( ) { while (true) { } this . stap_Click (this, null ); Thread . Sleep (50); milliseconden }

Starten van de animatie class Simulatie : Form { } Thread animatie; bool beweegt; void auto_Click(object o, EventArgs ea ) { if (beweegt) { auto.Text = "Start"; beweegt = false; } else { animatie = new Thread( this.run ); animatie . Start ( ); auto.Text = "Stop"; beweegt = true; }

De methode run nogmaals class Simulatie : Form { } oneindige herhaling! eindige herhaling. void run ( ) { while (true) ( this.beweegt ) { } this . stap_Click (this, null ); Thread . Sleep (50); milliseconden }

Handiger Starten van de animatie class Simulatie : Form { } Thread animatie; bool beweegt; void auto_Click(object o, EventArgs ea ) { if (beweegt) { auto.Text = "Start"; beweegt = false; } else { (animatie != null ) animatie = null; animatie = new Thread( this.run ); animatie . Start ( ); auto.Text = "Stop"; beweegt = true; }

De waarde null null : verwijzing naar niks x null : verwijzing naar niks x = null; null is een geldige waarde voor elk object-verwijzings-type

LetterTeller class LetterTeller : Form TextBox invoer Label uitvoer StaafDiagram diagram class StaafDiagram : UserControl class TurfTab

Letterteller hoofdklasse class LetterTeller : Form { TextBox invoer; Label uitvoer; StaafDiag diagram; LetterTeller() { invoer = new TextBox(); invoer.MultiLine = true; uitvoer = new Label(); diagram = new StaafDiag(); } invoer . TextChanged += this.Bereken; void Bereken(object o, EventArgs ea) { } TurfTab tabel = new TurfTab(); tabel.Turf ( invoer.Text ); uitvoer.Text = tabel.ToString() ; diagram.Waardes = tabel.Waardes ; }

De klasse TurfTab public class TurfTab { private int [ ] tellers; private int totaal; private void turf (char c) { } if (c>='A' && c<='Z') { } tellers [ ] ++; totaal++; c - 'A' if (c>='a' && c<='z') { tellers [ c - 'a' ] ++; totaal++; } }

De klasse TurfTab public class TurfTab { private int [ ] tellers; private int totaal; een eigen property! public int Totaal { get { } "mini- methodes" "mini- methodes" return totaal; set { } totaal = value; } }

geen set-minimethode: De klasse TurfTab public class TurfTab { private int [ ] tellers; private int totaal; een eigen property! public int Totaal { get { } "mini- methodes" "mini- methodes" return totaal; geen set-minimethode: read-only property set { } totaal = value; } }

De klasse TurfTab public class TurfTab { private int [ ] tellers; private int totaal; public float Gemiddelde { get mag ook nog rekenwerk doen get { } return (float)totaal / tellers.Length; } public int[] Waardes { get { } return tellers.Clone(); geef een kopie van de private array } }

De klasse StaafDiag public class StaafDiag : UserControl { private int[] waardes; alleen set-minimethode: write-only property public StaafDiag() { this.Paint += this.teken; } public int[] Waardes { } set { } this.waardes = value; this.Invalidate(); wie de property verandert, forceert een Paint private void teken(object o, PEA pea) { } // ...FillRectangle...waardes... }

Letterteller hoofdklasse class LetterTeller : Form { TextBox invoer; Label uitvoer; StaafDiag diagram; LetterTeller() { invoer = new TextBox(); invoer.MultiLine = true; uitvoer = new Label(); diagram = new StaafDiag(); } invoer . TextChanged += this.Bereken; void Bereken(object o, EventArgs ea) { } TurfTab tabel = new TurfTab(); tabel.Turf ( invoer.Text ); uitvoer.Text = tabel.ToString() ; diagram.Waardes = tabel.Waardes ; }

member const = initialisatie veld type naam ; , type naam { blok } get blok } property set void type naam methode operator op ( parameters ) naam ( parameters ) constructor blok

member const = initialisatie veld type naam ; , type naam { blok } get blok } property set indexer type this [ parameters ] void type naam methode operator op ( parameters ) naam ( parameters ) constructor blok

Toepassing: Bitmap-editor Hoofdstuk 10.1 Toepassing: Bitmap-editor

Toepassing: Bitmap-editor Klik punten op scherm Plaatje verschuiven left, right, up, down Plaatje bewerken clear, invert, bold, outline “Game of life”

Opdeling in klassen Hoofdscherm gebruikersinterface, menu’s, akties, files BitmapControl tekenen van het plaatje op het scherm BitMap plaatje in geheugen, operaties

Member-variabelen class Hoofdscherm class BitmapControl class BitMap BitmapControl viewer; MenuStrip menuStrip; class BitmapControl BitMap model; class BitMap bool [ , ] vakjes; : Form : UserControl zelfgemaakt

Methoden Hoofdscherm class Hoofdscherm : Form Hoofdscherm vergroten // eventhandler voor Resize afsluiten // eventhandler voor "Close"-menu

Methoden BitmapControl class BitmapControl : UserControl BitmapControl teken // eventhandler voor Paint klik // eventhandler voor MouseClick starten, stoppen // voor animatie-menu uitvoeren // voor andere menu-keuzes

Methoden BitMap class BitMap constructor BitMap, BitMap properties Breedte, Hoogte punten zetten veranderKleur, vraagKleur schuiven Left, Right, Up, Down bewerken Clear, Invert, Bold, Outline combineer game of life Life, buren

Methoden BitMap (versie 2) class BitMap : System.Drawing.Bitmap constructor BitMap, BitMap properties Breedte, Hoogte punten zetten veranderKleur, vraagKleur schuiven Left, Right, Up, Down bewerken Clear, Invert, Bold, Outline combineer game of life Life, buren

class Hoofdscherm public Hoofdscherm( ) { } this . Text = "Bitmap Editor"; this . viewer = new BitmapControl(); this . menuStrip = new MenuStrip( ); this . maakMenu(); this . Controls . Add(menuStrip); this . Controls . Add(viewer); this . Resize += this.vergroten; this . vergroten(null, null); // meteen al even

class Hoofdscherm MenuStrip menuStrip; BitmapControl viewer; private void maakMenu( ) { ToolStripDropDownItem menu; menu = new ToolStripDropDownItem("File"); menu.DropDownItems.Add("Close", null, this.afsluiten); menuStrip . Items . Add(menu); menu = new ToolStripMenuItem("Move"); menu.DropDownItems.Add("Left", null, viewer.uitvoeren); menu.DropDownItems.Add("Right",null, viewer.uitvoeren); menu.DropDownItems.Add("Up", null, viewer.uitvoeren); menu.DropDownItems.Add("Down",null, viewer.uitvoeren); menuStrip . Items . Add(menu); }

class Hoofdscherm void vergroten (object o, EventArgs ea) { int w = this.ClientSize.Width – 20; int h = this.ClientSize.Height – 50; viewer.Location = new Point(10,40); viewer.Size = new Size (w, h); } void afsluiten (object o, EventArgs ea) { this.Close(); }

Methoden BitMap class BitMap constructor BitMap, BitMap properties Breedte, Hoogte punten zetten veranderKleur, vraagKleur schuiven Left, Right, Up, Down bewerken Clear, Invert, Bold, Outline combineer game of life Life, buren

class BitMap public BitMap ( int w, int h ) { } vakjes = new bool [w , h]; public BitMap ( BitMap ander) { } vakjes = new bool [ander.Breedte , ander.Hoogte]; this.Kopieer(ander); public void verander ( int x, int y, bool b ) { } vakjes[x, y] = b; public bool vraag ( int x, int y ) { } return vakjes[x, y] ; property public int Breedte { } get { return vakjes.GetLength(0); }

class BitMap void combineer ( Bitmap ander { , Functie comb ) for (int x=0; this.Breedte; x++) for (int y=0; y<this.Hoogte; y++) this . verander (x, y, ); comb ( this.vraag(x,y) , ander.vraag(x,y) ) nieuwe type-declaratie: het type van een functie nieuwe expressie: naamloze functie } delegate bool Functie (bool, bool) ; void Clear ( ) { this.combineer(this, (a,b)=>false ); } void Invert ( ) { this.combineer(this, (a,b)=>!a ); } void Kopieer(Bitmap ander) { this.combineer(ander, (a,b)=>b ); }

class BitMap public void Left ( ) { } for (int y=0; y<this.Hoogte; y++) for (int x=0 ; x<this.Breedte; x++) { this.verander( this.Breedte-1, y, false ); } 1 this.verander( x-1, y, this.vraag(x,y) );

class BitMap public void Right ( ) { for (int y=0; y<Hoogte; y++) } for (int y=0; y<Hoogte; y++) for (int x=0 ; x<Breedte; x++) { this.verander( 0, y, false ); } Breedte-1; x>0; x-- ) this.verander( x, y, this.vraag(x-1 ,y) );

class BitMap public void Bold ( ) { BitMap ander; ander = new BitMap(this); ander . Left ( ); this . combineer (ander, (a,b)=>a||b ); ander = new BitMap(this); ander . Down ( ); this . combineer (ander, (a,b)=>a||b ); }

class BitMap public void Outline ( ) { BitMap ander; ander = new BitMap(this); ander . Left ( ); ander . Down ( ); this . combineer (ander, (a,b) => a != b ); }

class BitMap public void Life ( ) { BitMap oud; oud = new BitMap(this); for (int y=0; y<Hoogte; y++) for (int x=0; x<Breedte; x++) { } int n = oud . buren(x,y); this . verander (x, y, n==3 || n==2 && oud.vraag(x,y) ); }

class BitMap public int buren (int x, int y ) { xl xr yb yo return n; int xl = x-1; int xr = x+1; int yb = y-1; int yo = y+1; if (xl<0) xl += Breedte; if (xr>=breed) xr -= Breedte; if (yb<0) yb += Hoogte; if (yo>=hoog) yo -= Hoogte; int n = 0; if ( this.isZwart(xl,yb) ) n++; if ( this.isZwart(x ,yb) ) n++; if ( this.isZwart(xr,yb) ) n++; if ( this.isZwart(xl,y ) ) n++; if ( this.isZwart(xr,y ) ) n++; if ( this.isZwart(xl,yo) ) n++; if ( this.isZwart(x ,yo) ) n++; if ( this.isZwart(xr,yo) ) n++; xl xr yb yo return n;

meer-cellig “wezen” loopt! Game of Life meer-cellig “wezen” loopt! stabiel patroon stabiel patroon

Methoden BitmapControl class BitmapControl : UserControl BitmapControl teken // eventhandler voor Paint klik // eventhandler voor MouseClick starten, stoppen // voor animatie-menu uitvoeren // voor andere menu-keuzes membervariabele: Bitmap model;

class BitmapControl class BitmapControl { Bitmap model; public BitmapControl ( ) { } model = new Bitmap(20, 20); this . Paint += teken; this . MouseClick += klik;

class BitmapControl void teken ( object o, PEA pea ) { Graphics gr = pea.Graphics; int d = this . Diameter; this . lijnen (gr, d); for (int y=0; y<Hoogte; y++) for (int x=0; x<Breedte; x++) { } Brush br; if (model.vraag(x,y)) br = Brushes.Red; else br = Brushes.White; gr . FillRectangle (br, x, y, 1, 1); x*d+1, y*d+1, d-1, d-1 ); x*d, y*d, d, d ); }

class BitmapControl public int Diameter { get { Size s = this . ClientSize; return Math . min ( , ); s.Width / model.Breedte s.Height / model.Hoogte } }

class BitmapControl private void lijnen ( Graphics gr, int d) { Pen p = Color.Blue; // horizontale lijnen for (int y=0; y <= Hoogte; y++) gr . drawLine ( p, 0, y*d, model.Breedte*d, y*d ); // verticale lijnen for (int x=0; x <= Breedte; x++) gr . drawLine ( p, x*d, 0, x*d, model.Hoogte*d ); }

class BitmapControl void klik ( object o, MouseEventArgs mea ) { int diam = this . Diameter; model . verander ( , ); mea . X / diam mea . Y / diam mea.Button==MouseButtons.Left this . Invalidate ( ); }

class BitmapControl void uivoeren ( object sender, EventArgs ea ) { String keus = sender.ToString(); if (keus=="Clear") this.model.Clear(); if (keus=="Left") this.model.Left(); if (keus=="Right") this.model.Right(); if (keus=="Up") this.model.Up(); if (keus=="Down") this.model.Down(); if (keus=="Step") this.model.Step(); this . Invalidate ( ); }

class BitmapControl Thread animatie; void starten ( object o, EventArgs ea ) { animatie = new Thread(animatieFunctie); animatie . Start( ); } void stoppen ( object o, EventArgs ea ) { animatie = null; } void animatieFunctie( ) { } while (true ) { (animatie!=null) { this.model.Life( ); this.Invalidate( ); Thread.Sleep(50); }