Grundlagen: Fachbegriffe

    • Allgemein

    Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Trade.

      Grundlagen: Fachbegriffe

      Vorbemerkung
      Fachbegriffe sind leider oft unumgänglich, will man präzise Anleitung geben, deren Befolgung nicht in einem frustrierenden Dickicht endlos-mühsamer Fehlversuche steckenbleibt.
      Obwohl die hier angesprochenen Begriffe sprachübergreifend allgemeingültig sind, illustriere ich sie der Einfachheit halber nur mit Vb.Net-Samples - wenn überhaupt.
      Meine Definitionen sind ungenau - ich kann keinen Abriss objektorientierter Programmierung leisten.
      Sie sind für Anfänger gedacht, denen man evtl. ausgezeichnete Erklärungen gegeben hat - die dann aber doch nur "Bahnhof" verstehen, weil sie mit zB "Konstruktor" nix anfangen können 8| .
      Die Liste ist unvollständig - wer Ergänzungen weiß, bitte per PM. Allerdings sag ich euch gleich, dass ich letztendlich nach Gutdünken entscheide, was noch dazukommt.


      Links
      (Online-)BuchTipps und anderes
      Vb.Net-SchlüsselWorte
      Skizze für eine Art "konzentrierten Selbst-Bildungsweg" (viele Links)

      (Klassen-)Member
      Sammelbegriff aller Elemente, die in einer Klasse vorhanden sein können - es sind genau diese: Methoden, Properties, Events, Felder

      Feld
      Variable auf Klassenebene

      Deklaration
      Eine Deklaration bestimmt, dass es etwas gibt. Genau: Eine Deklaration erstellt einen Code-Namen, und weiterer Code kann diesen Namen benutzen. Und der Compiler weiß, was damit gemeint ist.
      Bei Variablen, Properties, Methoden-Argumenten und -Rückgabewerten legt die Deklaration auch den Datentyp fest, (meist) mittels As - Klausel.
      Vier Beispiel-Deklarationen (beim Feld ist nach der As-Klausel noch eine Initialisierung angehängt):

      VB.NET-Quellcode

      1. Public Class Car 'Klassen-Deklaration (keine As - Klausel)
      2. Private _MaxSpeed As Double = 180 'Feld-Deklaration mit Initialisierung
      3. Public Property Speed As Double 'Property-Deklaration
      4. Public Sub SpeedUp(ByVal betrag As Double) 'Methode mit Argument, aber ohne Rückgabewert
      5. Public Function TrySpeedUp(ByVal betrag As Double) As Boolean 'Methode mit Argument und Rückgabewert


      Schlüsselwort
      Die Programmiersprache besteht im Kern nur aus Schlüsselworten und Operatoren. Alles weitere wurde letztlich durch Deklarationen hinzugefügt.
      ZB obiges Snippet enthält die Schlüsselworte: Public, Class, Private, As, Property, Function - sind im VS-Editor auch farblich gekennzeichnet - hier zB in blau.
      Eine vollständige Dokumentation findet sich hier: Vb.Net-SchlüsselWorte - sehr empfehlenswert, die Erklärungen und Beispiele sind meist ausgezeichnet (verständlich und vollständig), und selbst Kenner finden oft noch unbekanntes.

      Anweisung / Statement (/ bedeutet: "ist dasselbe")
      Kleinste zusammenhängende Einheit von Code, die der Compiler akzeptiert. Üblicherweise eine Codezeile, aber man kann auch mehrere Anweisungen in eine Zeile stopfen.

      zugreifen / addressieren
      Sammelbegriff, anwendbar auf Member, also auf Methoden, Properties, Feldern, Events
      Methoden tut man aufrufen, und übergibt dabei ggfs. Argumente.
      Properties kann man abrufen oder auch setzen/zuweisen.
      Auch Felder kann man abrufen oder zuweisen.
      Events tut man entweder auslösen/feuern oder abonnieren/behandeln.

      Methode / Prozedur
      Sammelbegriff für Function (mit Rückgabewert) und Sub (ohne Rückgabewert)

      Argument / Parameter
      einer Methode kann kein bis viele Argumente übergeben werden. In der Deklaration der Methode werden diese innerhalb der Klammer aufgeführt

      VB.NET-Quellcode

      1. Private Function MyDemoFunction(text As String, zahl As Integer) As Double
      Diese Methode hat 2 Parameter, nämlich einen String und ein Integer, und der Rückgabewert ist vom Typ Double
      Und so könnte man das aufrufen, und die Argumente "aText" und 42 übergeben - und bekommt etwas zurück:

      VB.NET-Quellcode

      1. Dim result = MyDemoFunction("aText", 42)


      Signatur
      "Signatur einer Methode" bezeichnet die Eindeutigkeit von Anzahl, Reihenfolge und Datentyp ihrer Parameter, sowie ihren Rückgabe-Typ

      VB.NET-Quellcode

      1. Public Function AnotherDemo(s As String, i As Integer) As Double
      2. Public Function AnotherDemo2(s As Integer, i As Integer) As Double
      Die Methoden AnotherDemo() und MyDemoFunction() (oberes Listing) haben dieselbe Signatur. Obwohl alle Namen verschieden, ist die Abfolge der auftretenden Datentypen exakt identisch: String, Integer, Double - also dieselbe Signatur.
      Hingegen AnotherDemo2() verwendet (fast) dieselben Namen wie AnotherDemo(), hat aber dennoch eine annere Signatur, (schau genau! ;) )
      Unterschiedliche Signaturen ermöglichen Überladung - gleiche Signaturen ermöglichen Events, denn eine Methode kann nur dann ein Event empfangen, wenn ihre Signatur auf die Event-Signatur passt.

      Überladung
      Eine Überladung ist einfach eine Methode (oder Property) mit demselben Namen, aber mit anderer Signatur.
      Hier 2 weitere Überladungen von AnotherDemo(), welches nun also insgesamt 3-fach überladen ist:

      VB.NET-Quellcode

      1. Public Function AnotherDemo(s As Single, i As Int64) As Double
      2. Public Function AnotherDemo(s As Single, i As Integer) As Double


      Event auslösen/feuern
      Das geht nur innerhalb der Klasse, wo das Event deklariert ist. Schlüsselwort RaiseEvent. Einsteiger brauchen das erstmal nicht. Aber bei Interesse studiere dieses annähernd vollständige Tut: Alles über Events

      Event abonnieren/empfangen
      bedeutet, mittm AddHandler-Schlüsselwort oder mitte Handles-Klausel ein Objekt zu veranlassen, sein Event an eine bestimmte (geeignete) Methode zu senden. Dazu gibts inzwischen sogar Video: A ü E - Video-Post

      Datentyp (und Objekte)
      'Datentyp' ist der Oberbegriff für alles, was in einer Deklaration mit dem As-Schlüsselwort bezeichnet werden kann. Es gibt 3 Grund-typen: Klasse, Struktur, Interface
      Der Datentyp sagt aus, was ein Objekt kann, etwa Integer kann man addieren, String kann man verketten
      Ein Datentyp ist die Art des Objekts (quasi der Bauplan), er ist aber kein Objekt.
      Ein Objekt entsteht erst, wenn man den Konstruktor (Sub New) des Datentyps aufruft - dann entsteht ein Objekt dieses Datentyps - und das kann was tun:

      VB.NET-Quellcode

      1. Car.SpeedUp(22) ' Blödsinn: Der 'Bauplan' eines Autos kann nicht beschleunigen
      2. dim myCar As New Car()
      3. myCar.SpeedUp(22) ' so gehts!


      Ausdruck
      Etwas, was einen Wert erzeugt. Ein Wert hat immer einen Datentyp
      ZB ein atomarer Ausdruck ist 5 - das erzeugt den Wert 5, Datentyp Integer.
      Code verknüpft nun (Teil-)Ausdrücke miteinander, und bildet so neue Audrücke:
      2 + 3 - erzeugt auch den Wert 5, Integer.
      Ausdrücke können Konstanten, Variablen, Schlüsselworte, Operatoren, Properties und Methoden enthalten, und können beliebig kompliziert werden: 2 + 3 - Math.Pow(Math.Sin(45 / 2), Application.StartupPath.Length) - erzeugt einen Wert, den ich nicht weiß - aber der Datentyp ist Double (das weiss ich, weil ich den Datentyp kenne, den die Function Math.Pow() zurückgibt).

      Variable
      Ein Dingens, dem man einen Ausdruck zuweisen kann, um den Wert zu speichern. Der Datentyp der Variable muss dem des Ausdrucks entsprechen, also zumindest kompatibel sein.

      Konstruktor / Sub New()
      Klassen und Strukturen können Konstruktoren haben (auch mehrere Überladungen). Eine Sub New() wird ausgeführt, wenn mit dem Schlüsselwort New ein neues Objekt des Datentyps erstellt wird.

      VB.NET-Quellcode

      1. Dim s = New String(" "c, 10) ' der String-Konstruktor mit 2 Parametern wird
      2. 'aufgerufen und erstellt einen String mit 10 Spaces


      Objekt / Instanz / Objekt-Instanz und instanzieren / erstellen
      Wie gesagt: ein Objekt erstellt man, indem man den Konstruktor eines Datentyps mit dem Schlüsselwort New aufruft. Diesen Ausdruck weist man meist einer Variablen dieses Datentyps zu.
      Das Objekt hat dann den Datentyp, und ist gewissermaßen in der Variable drinne.

      Owner
      Innerhalb eines Objektes können weitere Objekte enthalten sein - etwa in Variablen gespeichert. Das äussere Objekt dieser Verschachtelung ist der Owner, das innere könnte man als "Child-Objekt" bezeichnen. Der Owner hat nun über die Variable direkten Zugriff auf das Child-Objekt, aber das Child-Objekt hat keinen Zugriff auf den Owner - Beispiel:

      VB.NET-Quellcode

      1. Public Class Car
      2. Private _MaxSpeed As Double = 180
      3. Public Property Speed As Double
      4. Public ReadOnly Property Motor As Motor ' Car "kennt" seinen Motor, aber Motor weiss nicht, in welchem Car es "eingebaut" ist
      5. Public Sub New()
      6. Motor = New Motor With {.Power = 100} ' Ein Motor mit mw. 100 KW wird initialisiert
      7. End Sub
      8. End Class
      9. Public Class Motor
      10. Public Property Power As Double
      11. '...
      12. End Class

      (In Ausnahmefällen hat ein Child-Objekt doch Zugriff auf den Owner (zB TreeNode.Parent, Control.Parent, ...), aber diese Fälle sind Ausnahmen mit besonderer, dafür vorgesehener Implementierung - normalerweise ist solch ein schlechtes Code-Design - zu enge Kopplung)

      Initialisierung
      Die erste Zuweisung eines Wertes an eine Variable oder Property
      Deklaration und Initialisierung geschieht praktischerweise (nicht zwingend) meist in derselben Zeile

      VB.NET-Quellcode

      1. Public s As New String(" "c, 10)
      Uninitialisierte Variablen der Grundtypen Interface und Class enthalten (logisch!) nichts - Nothing. Uninitialisierte Structure-Vars enthalten einen Default-Wert (etwa bei Integer: 0)

      Auflistung
      Oberbegriff für Variablen, die mehrere Objekte enthalten können. Es gibt viele Auflistungs-Datentypen - mit je spezifischen zusätzlichen Eigenheiten: Array, TreenodeCollection, IntegerCollection, DataRowCollection, List(Of T), Dictionary(Of TKey, TValue), BindingSource, Stack(Of T), IEnumerable(Of T), IList(Of T), ...

      Array
      Array ist die primitivste aller Auflistungen, aber auch die schnellste. Array-Objekte als solche gibt es gar nicht, denn ein Array hat immer auch einen Datentyp für seine Elemente. Es heisst also nicht "Array", sondern String-Array, oder Integer-Array, und notiert wird es mit angehängten Klammern: String(), Integer(). Anfänger haben oft Schwierigkeiten, Arrays zu erkennen, und verwechseln sie leicht mit dem einzelnen Array-Element - aber ein Integer ist kein Integer()!!!
      Zumal es hier viele Möglichkeiten der Deklaration und Initialisierung gibt - Beispiele für Integer():

      VB.NET-Quellcode

      1. Dim ints As Integer() ' uninitialisiert
      2. Dim ints() As Integer ' uninitialisiert
      3. Dim ints(3) As Integer ' initialisiert mit vier 0-en (Integer-Default)
      4. Dim ints() As Integer = New Integer() {0, 1, 2, 3} ' init mit Werten
      5. Dim ints As Integer() = {0, 1, 2, 3}
      6. Dim ints = New Integer() {0, 1, 2, 3}
      7. Dim ints = {0, 1, 2, 3} ' bei eingeschalteter Type-Inference erkennt der Compiler den Datentyp auch ohne ausdrückliche Angabe - einfach anhand der Initialisierung
      (Mehrdimensionale Arrays und Auflistungen lasse ich jetzt mal weg :P )

      Datensatz
      Oft verarbeitet man Daten in Form von Datensätzen. Ein Datensatz ist einfach eine Zusammenfassung mehrerer verschiedener, zusammengehöriger Werte.
      Hierfür erschafft man sich Datensatz-Klassen, also Klassen mit mehreren Variablen (oder Properties), für jeden Wert des Datensatzes eine Property, und die Properties haben natürlich verschiedene Datentypen.
      Etwa eine Person-Klasse könnte die Werte Name As String, und GeburtsTag As Date aufweisen.

      Datenmodell
      Eine Datensatz-Klasse kann als Wert-Datentyp natürlich auch andere Datensatz-Klassen enthalten (auch Listen davon).
      Etwa eine KarnevalsVerein-Datensatz-Klasse könnte die Werte VereinName As String und Mitglieder As List(Of Person) aufweisen.
      So können beliebig komplexe, zusammenhängende DatensatzKlassen-Systeme entstehen, sowas ist dann ein Datenmodell.
      Ein Datenmodell ist also ein System aus Datensatz-Klassen, und das modelliert tatsächlich etwas, also bildet es nach!
      Genannte KarnevalsVerein-Klasse bildet ganz genau die Tatsache nach, dass in einem Karnevalsverein viele Personen sind. Und die List(Of Person).Add/.Remove-Methoden bilden sogar nach, einem KarnevalsVerein beizutreten oder ihn zu verlassen 8| .
      Die Bedeutung des Begriffs "DatenModell" ist also ganz wörtlich zu verstehen, und ein Datenmodell stimmt entweder mit der Realität überein, oder es ist unbrauchbar.

      Typisiertes Dataset und EntityFramework
      Um mit Datenmodellen umzugehen, existieren zwei unterschiedliche Unterstützungs-Technologien - beide sehr mächtig: 1) typisiertes Dataset, 2) EntityFramework (EF).
      Beide stellen Assistenten und Designer bereit, um auch sehr komplexe Datenmodelle zu gestalten, und generieren dann das entsprechende System von Datensatzklassen. Das Datensatzklassen-System besteht dann aus für Datenverarbeitung optimierten Klassen und Auflistungen, die vielerlei Standard-Funktionalität gleich mit eingebaut haben (laden, speichern, sortieren, filtern, Databinding, relationale Bezüge ...).
      Aber man kann sein Datenmodell auch händisch selbst codieren, wenn man mit stark eingeschränkter Funktionalität auskommt.
      Also im engeren Sinne des Begriffs "Datenmodell" gibt es 3 Arten: 1) typDataset 2) EF-Klassen 3) Eigenbau.

      Interface
      Ein Interface legt nur fest, dass ein Objekt eine bestimmte Methode (oder Property, oder Event) hat. Die Methode selbst ist nicht enthalten, sondern die muss in der Klasse ausprogrammiert sein, die das Interface implementiert. Interfaces entsprechen Verträgen, die eine Klasse einhalten muss, wenn sie das Interface implementiert.
      Interfaces haben keinen Konstruktor, und das Schlüsselwort New ist nicht anwendbar.
      Interface-Datentypen erkennt man am I-Prefix, zb: IList(Of T)

      implementieren
      bedeutet im allgemeinen, Code zu schreiben, der Funktionalität bewirkt ("Funktionalität implementieren")
      Speziell ein Interface implementieren bedeutet in einer Klasse die durchs Interface vorgeschriebenen Member auch tatsächlich auszuprogrammieren. Schlüsselwort: Implements

      Schlüsselworte Interface und Implements bitte unbedingt nachlesen auf Vb.Net-SchlüsselWorte (Die Site ist englisch, aber die deutsche Entsprechung entblödet sich, auch die Schlüsselworte selbst zu verdeutschen).

      Lokal
      Es gibt 3 Gültigkeits-Ebenen: Namespace-Ebene, Klassen-Ebene und Lokal-Ebene. Lokal bedeutet, dass der deklarierte CodeName nur innerhalb der Methode oder Property gilt. Genau genommen ist lokal sogar noch lokaler, nämlich es gilt nur innerhalb des direkt umgebenden Code-Blocks (entspricht den Einrückungen).
      Typisches Schlüsselwort lokaler Deklarationen: Dim - paar Beispiele:

      VB.NET-Quellcode

      1. Private _ClassNumbs As Integer() = {-2, 0, 2, 5} ' klassen-Ebene
      2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' klassen-Ebene
      3. Dim numbs = {1, 2, 3, 4, 5, 6} ' numbs: methoden-lokal
      4. For Each numb In numbs ' numb: block-lokal - nur im ForEach
      5. Dim localFor = numb / 2 ' localFor: block-lokal - nur im ForEach
      6. MessageBox.Show(localFor.ToString())
      7. Next
      8. For i = 0 To numbs.Length - 1 ' i: block-lokal - nur im For
      9. MessageBox.Show(numbs(i).ToString())
      10. Next
      11. Dim index As Integer ' index: methoden-lokal
      12. For index = 0 To numbs.Length - 1
      13. If _ClassNumbs(index) > 2 Then Exit For
      14. Next
      15. MessageBox.Show(_ClassNumbs(index).ToString())
      16. End Sub


      Gültigkeitsbereich / Scope
      Die eigentlich simple Geschichte mit den 3 Gültigkeits-Ebenen verkompliziert sich erheblich durch Vererbung und weitere OOP-Features.
      Nämlich zu den 3 Grund-Deklaratoren Public, Private, Dim treten weitere hinzu, wie: Friend, Shared, Protected, Overloades, Shadows, Overrides, MustOverride, NotInheritable - auf die ich alle nicht eingehe - ich wollte nur den Fachbegriff Gültigkeitsbereich / Scope kundtun :P .

      Modifizierer
      In Vb sind Modifizierer die Schlüsselworte einer Deklaration, die vor dem Codenamen stehen. Im Gegensatz zum Datentyp, der ggfs. hinter dem Codenamen zu notieren ist.
      Es gibt die Scope-Modifizierer: Public, Protected, Private, Friend, aber es gibt auch Modifizierer, die das Vererbungs-Verhalten steuern, wie: Overloads, Shadows, Overrides, Overridable, MustOverride, MustInherit, ..., und es gibt noch Modifier mit noch anderen Aufgaben, wie: Async, Shared,...
      Vollständige Liste der Vb.net-Modifier

      Global
      global zugreifbare Objekte gibt es eigentlich nicht. Einzig Namespaces können global sein, alles andere befindet sich innerhalb von Klassen, die sich wiederum innerhalb von Namespaces befinden. Meist wird "global" gesagt, wenn man eigentlich das Schlüsselwort Public meint.
      (Allerdings kann man ein Objekt Public Shared deklarieren, dann ist es immerhin global zugreifbar, indem man seinen vollständigen Namen addressiert (Aber wer solche Feinheiten kennt, der braucht nicht dieses Tut ;) ))

      Einbinden
      Code kann man nicht einbinden. Einbinden kann man nur Dateien. Auf Projekt-Ebene kann man alle möglichen Dateien einbinden, auch - ja - Code-Dateien.
      Auf Solution-Ebene kann man Projekte einbinden (proj-Dateien)
      Bibliotheken kann man auch nicht einbinden (ausser sie liegen als Datei vor) - auf Bibliotheken tut man verweisen, um sie zu nutzen.
      Auch auf eingebundene Projekte muss man verweisen, denn das Zusammenbinden mehrerer Projekte in einer Solution allein bewirkt noch keine Interaktion der Projekte untereinander.
      Verweise tut man setzen, nicht einbinden.

      Credits
      Dank auch an @Trade und @ThePlexian :thumbsup:

      Dieser Beitrag wurde bereits 70 mal editiert, zuletzt von „ErfinderDesRades“ ()

      Moin,

      ErfinderDesRades schrieb:

      Events tut man abonnieren.

      ... und feuern, nicht zu vergessen.

      Ich habe mir mal erlaubt noch gewisse Sachen in C# zu übersetzen, ist ja allgemein hier:

      Methode / Prozedur

      In C# steht für Sub das Schlüsselwort ​void. Rückgabewerte werden direkt angegeben.
      In VB sieht's ja so aus :

      Visual Basic-Quellcode

      1. ​Public Function Duplicate(number As Integer) As Integer


      das Äquivalent in C-Sharp wäre:

      C#-Quellcode

      1. public int Duplicate(int number)


      Der Typ wird also direkt angegeben, in diesem Fall ​int bzw. ​Integer.

      Argument / Parameter

      Siehe drüber. Die Syntax ist anders: ​int number oder z. B. ​string text, was auch immer.

      Event abonnieren

      In C# gibt es kein ​Handles-Schlüsselwort. Man muss immer die Handler mit dieser Syntax (entspricht ​AddHandler in VB) setzen:

      C#-Quellcode

      1. ​instanceVariable.MyEvent += MyHandler;


      Also immer mit ​+=.

      Datentyp

      Sind halt in C# andere. ​int für ​Integer, ​string für ​String etc.
      msdn.microsoft.com/de-de/library/ms228360(v=vs.90).aspx

      Konstruktor

      Ist in C# kein ​Sub New, sondern halt der Klassenname.
      ​public MyClass() statt ​Public Sub New

      Kann nat. auch Überladungen haben (den Begriff solltest Du noch dazunehmen).

      implementieren

      Syntaxunterschied.

      VB.NET:

      Visual Basic-Quellcode

      1. ​Public Class MyClass Implements MyInterface


      C#:

      C#-Quellcode

      1. ​public class MyClass : MyInterface


      Vererben und Implementieren wird beides mit dem Doppelpunkt vorgenommen.

      Global

      Public ist ​public und Shared ist in C# halt ​static

      So viel dazu. Ich erwähne hier, was noch rein kann, denn wenn ich das schon schreibe, ist eine PN unnötig.
      Wenn Du "global" ansprichst, dann schon alle Zugriffsmodifizierer.

      Dann noch Vererbung, Überladungen, Instanziierung (explizit). Mehr weiß ich jetzt spontan nicht.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: