Institut für Informatik Christian-Albrechts-Universität zu Kiel. Borland Delphi. Einführung in die Programmiersprache



Ähnliche Dokumente
Informatik GK 12 Klassen Klassen programmieren in Delphi am Beispiel der konkreten Klasse Auto

Delphi eine Einführung

Delphi-Source.de. Delphi-Source.de - Grundlagen. Object Pascal-Grundlagen. Allgemeines zur Syntax. Variablen und Konstanten. Was ist Object Pascal?

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

Objektorientierte Programmierung

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Programmierung in Delphi

Modul 122 VBA Scribt.docx

Sin-Funktion vgl. Cos-Funktion

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Delphi DLL Tutorial Wie exportiere ich Komponenten aus einer DLL?

Programmierkurs: Delphi: Einstieg

Klausur in 12.1 Themen: Zahlsysteme, Grundlagen von Delphi (Bearbeitungszeit: 90 Minuten)

Über Arrays und verkettete Listen Listen in Delphi

E-PRIME TUTORIUM Die Programmiersprache BASIC

Modellierung und Programmierung 1

Mediator 9 - Lernprogramm

Vererbung & Schnittstellen in C#

Virtuelle COM-Schnittstelle umbenennen

Delphi Grundkurs Seite 31

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Einführung in Javadoc

Java Kurs für Anfänger Einheit 5 Methoden

Erwin Grüner

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einführung in die Programmierung

1 Mathematische Grundlagen

Kapitel MK:IV. IV. Modellieren mit Constraints

Einführung in die Programmierung (EPR)

Programmierkurs Java

1 Vom Problem zum Programm

Lehrer: Einschreibemethoden

Syntax der Sprache PASCAL

5. Tutorium zu Programmieren

Schmitt, Günter (1996): Fortran 90 Kurs technisch orientiert, R. Oldenbourg Verlag, München

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Internationales Altkatholisches Laienforum

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

VisualBasic - Variablen

Outlook und Outlook Express

Computeranwendung und Programmierung (CuP)

Vorkurs C++ Programmierung

SMS-Dienst SMS-Dienst procar informatik AG Stand: FS 04/2011 Eschenweg Weiterstadt 1

Erstellen von x-y-diagrammen in OpenOffice.calc

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Einführung in die Java- Programmierung

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Datenbanken Microsoft Access 2010

Kurs 1613 Einführung in die imperative Programmierung

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

KOSTENTRÄGER VERWALTUNG / ZUWEISUNG

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

GOtoSPORT.CH Internetplattform

Nutzung von GiS BasePac 8 im Netzwerk

Neben dem Symbol Entwurfsmodus ist das Symbol Befehlschaltfläche zu sehen.

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Name. Aufgabe 1) Zur Erinnerung:

FH-SY Chapter Version 3 - FH-SY.NET - FAQ -

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Statuten in leichter Sprache

teischl.com Software Design & Services e.u. office@teischl.com

Arbeiten mit UMLed und Delphi

VBA-Programmierung: Zusammenfassung

Rundung und Casting von Zahlen

Lizenzierung von StarMoney 10 bzw. StarMoney Business 7 durchführen

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Programmteil Bautagebuch

Auf der linken Seite wählen Sie nun den Punkt Personen bearbeiten.

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

PTV VISWALK TIPPS UND TRICKS PTV VISWALK TIPPS UND TRICKS: VERWENDUNG DICHTEBASIERTER TEILROUTEN

Visual Basic Express erstes Projekt anlegen

Klausur in Programmieren

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

2. Semester, 2. Prüfung, Lösung

Einführung in die Programmierung

Datentypen: Enum, Array, Struct, Union

Programmierung mit Delphi

Graphic Coding. Klausur. 9. Februar Kurs A

1Schnelleinstieg 14. 2Wie aus einer einfachen Textdatei. 3 Wie man eigene Programme erstellt 30. Inhaltsverzeichnis. ein Programm wird 20

Einzel- s und unpersönliche Massen-Mails versenden

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

Programmieren Tutorium

Die Programmiersprache C99: Zusammenfassung

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Übungsaufgaben zur Programmiersprache Python

jetzt lerne ich Der einfache Einstieg in Object Pascal Für alle Versionen bis einschließlich Delphi 2006 THOMAS BINZINGER

Angaben zu einem Kontakt...1 So können Sie einen Kontakt erfassen...4 Was Sie mit einem Kontakt tun können...7

Anbindung des Onyx Editors an das Lernmanagementsystem OLAT Anwendungsdokumentation

Jahrgang: Jahrgang 1. Thema: Systementwicklung einer Webapplikation - Geheimnachrichten-Generator

Komponente NumEdit für Delphi 5.0

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Transkript:

Institut für Informatik Christian-Albrechts-Universität zu Kiel Borland Delphi Einführung in die Programmiersprache

Geschichte Objective Pascal objektorienterte Programmiersprache Rapid Development schweizer Professor Niklaus Wirth (* 1934, Bild rechts) 1968-1972 an der ETH Zürich 1983 Pascal 1995 Delphi 1

RAD-Umgebung 1. Frame 2. Objekt Hierachie 3. Objekt Inspektor 4. Komponentenpalette 5. Symbolleiste

Inhalt 1. Syntax 2. Variablen, Konst. 3. String-Typen 4. Kompl. Datentypen 5. Zeiger 6. Schleifen 7. Verzweigungen 8. Operatoren 9. Prozeduren, Funkt. 10. Programmaufbau 11. Objektorientierung 12. Zugriff auf Objekte

Syntax Befehle werden durch ; getrennt meine_variable und Meine_Variable die in C/C++ unterschiedlich sind, sind sie für die Delphi-Sprache gleich Typstrenge: Variablen müssen vor ihrer Verwendung in einem bestimmten Bereich deklariert werden Ist einer Variable einmal ein Typ zugeordnet, kann sie keine Werte eines anderen Typs aufnehmen, nur Werte des gleichen Typs oder eines Untertyps. Bsp. ein Integer kann keine Realzahlen aufnehmen Zuweisungen zwischen Variablen unterschiedlichen Typs sind meist nur über Konvertierfunktionen (wie z.b. IntToStr) möglich

Variablen und Konstanten Datentypen Typ Wertebereich Beispiel:Deklaration Zuweisung Integer (ganze Zahlen) -2147483648 bis 2147483647 var zahl: integer; zahl:=14; Real (Gleitkommazahlen) 5.0 x 10 324.. 1.7 x 10 308 var zahl: real; zahl:=3.4; String (Zeichenketten) ca. 2 31 Zeichen var text: string; text:='hallo Welt!'; Char (Zeichen) 1 Zeichen var zeichen: char; zeichen:='a'; Boolean (Wahrheitswert) true, false var richtig: boolean; richtig:=true; Deklaration var zahl1, zahl2, zahl3: integer; ergebnis: real; text, eingabe: string; Zuweisung x := x + 1;

Globale Variablen unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(tform) private { Private-Deklarationen } public { Public-Deklarationen } var Form1: TForm1; einezahl: integer; // Diese Variable gilt in der ganzen Unit und // in allen Units, die diese Unit einbinden implementation {$R *.DFM} var eine_andere_zahl: real; // Diese Variable gilt nur in dieser Unit Globale Variablen können bei ihrer Deklaration mit einem Startwert belegt werden: Lokale Variablen einezahl: integer = 42; procedure IchMacheIrgendwas; var text: string;... //Irgendwas Sinnvolles

Typumwandlungen von nach Funktion Beispiel Integer Real kein Problem, einfache Zuweisung var zahl1: integer; zahl2: real; zahl2 := zahl1; Real Integer Möglichkeiten: - Nachkommastellen abschneiden (trunc) - kaufm. Runden (round) - aufrunden (ceil, Unit Math) - abrunden (floor, Unit Math) var zahl1: real; zahl2: integer; zahl2 := trunc(zahl1); zahl2 := round(zahl1); Integer String IntToStr var textzahl: string; zahl: integer; textzahl := IntToStr(zahl); Real String FloatToStr FloatToStrF zahl: real; textzahl := FloatToStr(zahl); String Integer StrToInt StrToIntDef var textzahl: string; zahl: Integer; zahl := StrToInt(textzahl); String Real StrToFloat var textzahl: string; zahl: real; zahl := StrToFloat(textzahl); String Char Zugriff über Index (1 ist erstes Zeichen) var text: string; zeichen: char; zeichen := text[1]; Char String kein Problem, einfache Zuweisung var zeichen: char; text: string; text := zeichen;

Teilbereichstypen var kleinezahl: 0..200; var kleinerstring: string[10]; Aufzählungstypen var farben: (blau, gelb, gruen, rot); Konstanten ord pred succ low high gibt die Position des Bezeichners zurück gibt den Vorgänger zurück gibt den Nachfolger zurück gibt den niedrigsten Wert zurück gibt den höchsten Wert zurück const version = '1.23';

String-Typen var kurzertext: ShortString var kurzertext: String[20]; String ShortString AnsiString WideString Array[0..x] of Char PChar Enumerierte Strings Zeichenketten zusammenhängen var text: array [0..100] of Char; Zugreifen auf ein bestimmtes Zeichen in einem String Vergleichen zweier Strings var text1, text2: String; text1 := 'gut'; text2 := 'Ich finde Delphi '+text1+'!!'; // text2 enthält nun den Text 'Ich finde Delphi gut!!' var text: String; zeichen: Char; text := 'Ich finde Delphi gut!'; zeichen := text[1]; // zeichen enthält nun den Buchstaben 'I' var text1, text2: string;... if text1 = text2 then...

Mengentypen var zahlen: set of 0..255; Komplexe Datentypen zahlen := [5, 9]; // zahlen enthält die Zahlen 5 und 9 zahlen := []; // zahlen enthält überhaupt keine Werte zahlen := [1..3]; // zahlen enthält die Zahlen von 1 bis 3 zahlen := zahlen + [5]; // zahlen enthält die Zahlen 1, 2, 3, 5 zahlen := zahlen - [3..10]; // die Zahlen von 3 bis 10 werden aus der Menge // entfernt, es bleiben 1 und 2 Arrays if 7 in zahlen then... var testwert: array [0..10] of integer; testwert[0] := 15; testwert[1] := 234; Dynamische Arrays var dynarray: array of integer; SetLength(dynArray, 5); dynarray[0] := 321; for i := 0 to 10 do testwert[i] := 1; for i := 0 to high(dynarray) do dynarray[i] := 0; var koordinate: array [1..10, 1..10] of integer; SetLength(dynArray, 2); Records koordinate[1,6] := 34; koordinate[7][3] := 42; var Adresse: record name: string; plz: integer; ort: string; with adresse do name := 'Hans Müller'; plz := 12345; ort := 'Irgendwo'; adresse.name := 'Hans Müller'; adresse.plz := 12345; adresse.ort := 'Irgendwo';

Zeiger Zeiger sind Variablen, die eine Specheradresse enthalten. type PAdressRecord = ^TAdressRecord; TAdressRecord = record name: string; plz: integer; ort: string; Steht das Symbol ^ vor einem Typbezeichner, wird daraus ein Typ, der einen Zeiger auf den ursprünglichen Typ darstellt. ^TAdressRecord ist ein Zeigertyp auf einen Speicherbereich, an dem sich etwas vom Typ TAdressRecord befinden muss. var adresse: TAdressRecord; adresszeiger: PAdressRecord; adresszeiger := @adresse; @ zur Ermittlung einer Speicheradresse var gesuchtername: string; gesuchtername := adresszeiger^.name; ^ zur Dereferenzierung

Schleifen for-schleife for i := 1 to 10 do... // Befehlsfolge, die öfters ausgeführt werden soll while-schleife for i:=10 downto 1 do... repeat-until-schleife while x<>y do... // Befehlsfolge, die öfters ausgeführt werden soll repeat... // Befehlsfolge, die öfters ausgeführt werden soll until x=y; for-in-schleife for element in collection do statement; var stringarr: array of String; s: String; for s in stringarr do ShowMessage(s);

Verzweigungen if-verzweigung if then ; if then else ; if x>0 then... else if x<0 then... else...; var eingabe: integer;... if eingabe=1 then eingabe := 0; ausgabe := 'Sie haben eine 1 eingegeben'; end //kein Strichpunkt! else if eingabe=2 then eingabe := 0; ausgabe := 'Sie haben eine 2 eingegeben'; end else eingabe := 0; ausgabe := 'Sie haben eine andere Zahl als 1 oder 2 eingegeben'; case-verzweigung case eingabe of 1: ausgabe := 'Sie haben 1 eingegeben'; 2: ausgabe := 'Sie haben 2 eingegeben'; 3: ausgabe := 'Sie haben 3 eingegeben'; else ausgabe := 'Sie haben nicht 1, 2 oder 3 eingegeben'; case eingabe of 1,3,5,7,9: ausgabe := 'Sie haben eine ungerade Zahl kleiner als 10 eingegeben'; 2,4,6,8,0: ausgabe := 'Sie haben eine gerade Zahl kleiner als 10 eingegeben'; 10..20: ausgabe := 'Sie haben eine Zahl zwischen 10 und 20 eingegeben';

Operatoren and, or, not, xor (x>0) and (x<10) ((x>0) and (x<10)) or ((y>0) and (y<10)) if ((x>0) and (x<10)) or ((y>0) and (y<10)) then... if <Bedingung1> and <Bedingung2>

Prozeduren und Funktionen Prozeduren procedure <Name>(<Parameter>); <Variablen- und Konstanten> <Anweisungen> procedure Toene(Anzahl: integer); var i: integer; for i := 1 to Anzahl do beep; Toene(5); Funktion function <Name>(<Parameter>): <Rückgabetyp>; <Variablen- und Konstanten> <Anweisungen> function SummeAusDrei(zahl1, zahl2, zahl3: integer): integer; result := zahl1 + zahl2 + zahl3; ergebnis:=summeausdrei(3,5,9);

Programaufbau program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. program Project2; {$APPTYPE CONSOLE} uses sysutils; // Hier Anwender-Code end. unit ; package ; requires contains end. interface uses ; implementation uses initialization finalization unit Unit1; interface function Brutto(netto: real): real; implementation function Brutto(netto: real): real; result := netto * 1.16; end. end.

Klasse Objektorientierung Klassen stellen den "Bauplan" eines Objekts dar. Sie definieren: Eigenschaften/Attribute Methoden Klassennamen nen in Delphi üblicherweise mit einem großen T (Type). Instanzen Dabei handelt es sich um eine Vereinbarung, nicht um eine Regel. Soll Programmcode weitergegeben werden, so sollte man sich an diesen Standard halten! Instanzen sind nun "lebendige" Objekte, die nach dem Bauplan einer Klasse erstellt wurden. Objekte, Methoden, Eigenschaften type TAuto = class private FFarbe: string; FBaujahr: integer; procedure SetFarbe(Farbe: string); public property Farbe: string read FFarbe write SetFarbe; var MeinAuto: TAuto; Konstruktor, Destruktor Objektreferenz := Klasse.Create; MeinAuto := TAuto.Create; Sie belegen bei der Programmausführung Arbeitsspeicher und können Daten aufnehmen. Von jeder Klasse kann es beliebig viele Instanzen geben, die alle gleich aufgebaut sind, aber unterschiedliche Daten enthalten können Objekt wird synonym mit Instanz benutzt, Methoden sind Funktionen und Prozeduren einer Klasse, Eigenschaften oder Properties bestimmen Merkmale von Klassen vgl. unten. type TForm1 = class(tform) Button1: TButton; procedure Button1Click(Sender: TObject); private public //Ende der Klasse TForm1 TAuto = class private FFarbe: string; FBaujahr: integer; procedure SetFarbe(Farbe: string); public property Farbe: string read FFarbe write SetFarbe; //Ende der Klasse TAuto

Zugriff auf Objekte type TAuto = class private FFarbe: string; FBaujahr: integer; procedure SetFarbe(Farbe: string); public property Farbe: string read FFarbe write SetFarbe; var MeinAuto: TAuto; var MeinAuto: TAuto; MeinAuto := TAuto.Create; MeinAuto.SetFarbe('rot'); MeinAuto.Farbe := 'rot'; MeinAuto.FFarbe := 'rot'; MeinAuto.FBaujahr := '1980'; property Farbe: string read FFarbe write SetFarbe; procedure TAuto.SetFarbe(Farbe: string); if (farbe = 'rot') or (farbe = 'blau') or (farbe = 'gruen') then FFarbe := Farbe; Zugriffsrechte private Ein private-element kann nur innerhalb der gleichen Unit verwendet werden. Aus anderen Units ist ein Zugriff nicht möglich. protected Ein protected-element ist wie ein private- Element innerhalb der gleichen Unit verwendbar. Darüberhinaus haben alle abgeleiteten Klassen darauf Zugriff, unabhängig davon, in welcher Unit sie sich befinden. public public-elemente unterliegen keinen Zugriffsbeschränkungen. published published-elemente haben dieselbe Sichtbarkeit wie public-elemente. Zusätzlich werden diese Element im Objektinspektor angezeigt, weshalb nicht alle Typen als published-element eingesetzt werden können. automated automated ist nur noch aus Gründen der Abwärtskompatibilität vorhanden. Der Einsatz erfolgte in Zusammenhang mit OLE- Automatisierungsobjekten und nur in Klassen, die von TAutoObject (Unit OleAuto) abgeleitet waren. Für TAutoObject aus der Unit ComObj wird automated nicht mehr verwendet.