Archivo Explosivo: Programmierung

FIAE – Grundlagen der Programmierung – Mehrdimensionale Arrays – Rating

#include <stdio.h>
#include <stdlib.h>

int main(void) 
{ 
        setbuf(stdout, NULL);
        system("cls");

        int arr[11][3] = { 
                {1, 800000, 900000},
                {2, 1258900, 2500000},
                {3, 720000, 750000},
                {4, 550000, 600000},
                {5, 1200500, 80000},
                {6, 500000, 480000},
                {7, 300000, 320000},
                {8, 150000, 3000000},
                {9, 700000, 450000},
                {10, 1200000, 900000},
                {11, 300000, 330000}
         };

        printf("\n\n");

        for (int zeile = 0; zeile < 11; zeile++)
        {
                int planumsatz = 0;
                float steigerung = .0;
                float steigerung_prozent = .0;
                float minderung = .0;
                float minderung_prozent = .0;
                char rating;

                if(arr[zeile][2] > arr[zeile][1])
                {
                        planumsatz = 1;
                        steigerung = ( arr[zeile][2] - arr[zeile][1] );
                        steigerung_prozent = steigerung / arr[zeile][1] * 100;
                        rating = 'B';

                        if(arr[zeile][2] >= 500000)
                        {
                                rating = 'A';
                        }
                }
                else
                {
                        minderung = ( arr[zeile][1] - arr[zeile][2] );
                        minderung_prozent = minderung / arr[zeile][1] * 100;
                        rating = 'C';
                }

                if(planumsatz == 1)
                {
                        printf(" Rating %c - Produkt No. %d - Plan: %d EUR - Ist: %d EUR - Der Planumsatz wurde uebertroffen -> +%.2lf EUR (+%.2lf%%)!\n", rating, arr[zeile][0], arr[zeile][1], arr[zeile][2], steigerung, steigerung_prozent);
                }
                else if(arr[zeile][2] == arr[zeile][1])
                {
                        printf(" Rating %c - Produkt No. %d - Plan: %d EUR - Ist: %d EUR - Der Planumsatz wurde genau erreicht!\n", rating, arr[zeile][0], arr[zeile][1], arr[zeile][2]);
                }
                else
                {
                        printf(" Rating %c - Produkt No. %d - Plan: %d EUR - Ist: %d EUR - Der Planumsatz wurde verfehlt -> -%.2lf EUR (-%.2lf%%)!\n", rating, arr[zeile][0], arr[zeile][1], arr[zeile][2], minderung, minderung_prozent);
                }

        }

        printf("\n\n");

        return EXIT_SUCCESS;
}

FIAE – Grundlagen der Programmierung – Arrays

# include <stdio.h>
# include <stdlib.h>

int main(void)
{
        system("cls");

        int quadratZahlen[10];

        printf("\n\n");

        for (int i = 0; i < 10; i++) {
                quadratZahlen[i] = (i + 1) * (i + 1);
                printf("\t\t( %d * %d ) = %d\n",(i + 1), (i + 1), quadratZahlen[i]);
        }

        printf("\n\n");

        return EXIT_SUCCESS;
}

FIAE – Grundlagen der Programmierung – Strings

# include <stdio.h>
# include <stdlib.h>

int main(void)
{
        system("cls");

        printf("\n\n");

        printf("\n\t\tHALLO WELT als Stringkonstante!\n\t\t");

        char stringArray[11];
        stringArray[0] = 'H';
        stringArray[1] = 'A';
        stringArray[2] = 'L';
        stringArray[3] = 'L';
        stringArray[4] = 'O';
        stringArray[5] = ' ';
        stringArray[6] = 'W';
        stringArray[7] = 'E';
        stringArray[8] = 'L';
        stringArray[9] = 'T';
        stringArray[10] = '\0';

        for (int i = 0; i < 11; i++)
        {
                printf("%c", stringArray[i]);
        }

        printf("\n\t\t");

        char halloWelt[] = {'H','A','L','L','O',' ','W','E','L','T','\0'};

        printf("%s", halloWelt);

        printf("\n\t\t");

        char hW[] = {"HALLO WELT\0"};
        printf("%s", hW);

        printf("\n\n");

        return EXIT_SUCCESS;
}

FIAE – Grundlagen der Programmierung – Mehrdimensionale Arrays

# include <stdio.h>
# include <stdlib.h>

int main( void )
{
        system("cls");
        setbuf(stdout, NULL);

        // Deklaration eines leeren mehrdimensionalen - 2-Dimensional - Arrays
        int regal[4][5];

        // Felder werden mit Werten initialisiert, ...
        regal[0][0] = 3;
        regal[0][1] = 4;
        regal[0][2] = 5;
        regal[0][3] = 6;
        regal[0][4] = 7;

        regal[1][0] = 30;
        regal[1][1] = 40;
        regal[1][2] = 50;
        regal[1][3] = 60;
        regal[1][4] = 70;

        // Deklaration und Initialisierung eines mehrdimensionalen - 2 Dimensionen - Arrays
        int matrix[4][5] = 
        {
                {10,20,30,40,50},
                {15,25,35,45,55},
                {20,30,40,50,60},
                {25,35,45,55,65}
        };

        return EXIT_SUCCESS;
}

FIAE – Grundlagen der Programmierung – Arrays – C-Beispielprogramm

# include <stdio.h>
# include <stdlib.h>

int main( void )
{
        int anzahl = 0;

        printf("\n\n\t\tWie gross soll das Array werden?\n\n\t\t--> ");
        scanf("%d", &anzahl);

        int zahlenarray[anzahl];

        for( int i = 0; i < anzahl; i++ )
        {
                zahlenarray[i] = i + ( i * i );
        }

        for( int i = 0; i < anzahl; i++ )
        {
                if((i + 1) <= 9)
                {
                        printf("\n\t\tZahl Nr. 0%d: %d", (i + 1), zahlenarray[i]);
                }
                else
                {
                        printf("\n\t\tZahl Nr. %d: %d", (i + 1), zahlenarray[i]);
                }
        }

        printf("\n\n\t\tFertig!\n\n");

        return EXIT_SUCCESS;
}

Robo – Modern Taskrunner for PHP

Eine PHP-Variante von Gulp und Grunt für PHP:

Robo is a task runner you always have been looking for. It allows you to write fully customizable tasks in common OOP PHP style. Robo has comprehensive list of built-in common tasks for development, testing, and deployment.

robo.li

FIAE – Objektorientierte Programmierung – Einführung

Was ist Objektorientierte Programmierung?
Laut ISO/IEC 2382:
„Ein Programmier-Stil, der Objekte, Klassen und Vererbung einsetzt.“
Nach Allen Kay (Erfinder von SmallTalk):
„Alles ist ein Objekt. Objekte kommunizieren duch das Senden und Empfangen von Nachrichten – diese Nachrichten sind wiederum Objekte. Objekte haben Ihren eigenen Speicher, jedes Objekt ist die Instanz einer Klasse (die auch wiederum ein Objekt ist). Eine Klasse beinhaltet das Verhalten aller Ihrer Instanzen (Objekte in einer Programmliste). Für das Ausführen einer Programmliste, wird die Ausführungskontrolle dem ersten Objekt gegeben und das verbleibende als dessen Nachricht behandelt“.
In 2003 revidierte Kay seine Aussage und definierte Objektorientierung folgendermaßen:
„OOP bedeutet für mich nur Messaging, lokales Beibehalten und Schützen und Verbergen des Prozesszustands sowie spätestmögliche Bindung aller Dinge.“

Als Anmerkung sei gesagt: Es existieren auch klassenlose objektorientierte Programmiersprachen (Prototypen basierend – zum Beispiel Javascript) und der Vererbung wird heutzutage weniger Bedeutung zugesprochen, als noch in den 1990ern. Deswegen gilt der erstgenannte Ansatz der ISO/IEC als veraltet.

Die Schlagworte objektorientierter Programmierung
Abstraktion: Entweder in Form von Klassen, oder in Form von Prototypen.
Klassen: Die Datenstruktur eines Objekts wird durch die Attribute einer Klassendefinition festgelegt.
Prototypen: Objekte werden durch das Klonen bereits existierender Objekte erzeugt und können als Prototypen dienen.
Datenkapselung: Die eigentlichen Implementierungsdetails bleiben bei der Ausführung verborgen. Zugriff über Schnittstellen.
Feedback: Kommunikation über einen Nachrichten-Antwort-Mechanismus. Führt zu Veränderung von Objekten.
Persistenz: Objektvariablen existieren, solange die Objekte vorhanden sind und verfallen nicht automatisch nach Abarbeitung einer Methode.
Polymorphie: Unterschiedliche Datentypen können angenommen und verarbeitet werden.
Vererbung: Eine abgeleitete Klasse „erbt“ die Methoden und Attribute der Basisklasse.

Als absolute Basis objektorientierter Programmiersprachen gelten:
Vererbungsmechanismen
Datenkapselung
Polymorphie

FIAE – OOP – Objektorientierte Programmierung – Prototypenbasierte Programmierung

Prototypenbasierte Programmierung beschreibt klassenloses objektorientiertes Programmieren. Die Vererbung wird über das Dekorieren von Objekten erreicht – Prototypen. Dieses Modell wird als klassenlose/prototyporientierte/prototypenbasierte/instanzorientierte Programmierung bezeichnet.

Prototypenbasierte Programmierung am Beispiel Javascript

<script>

// Prototyp Auto wird erstellt  
function Auto(Marke) 
{
    this.Marke = Marke;
}

// Funktion für Prototyp wird erstellt
Auto.prototype.sagHallo = function()
{
    console.log('Hallo, ich bin ein ' + this.Marke + '!');
};

// Instanziierung des Prototypen Auto als Auto1 und Auto2
var Auto1 = new Auto('Hyundai');
var Auto2 = new Auto('Fiat');

// Funktionsaufruf durch die Instanzen
Auto1.sagHallo(); // Ausgabe: Hallo, ich bin ein Hyundai!
Auto2.sagHallo(); // Ausgabe: Hallo, ich bin ein Fiat!

// Vererbung des Prototypen Auto als neuer Prototyp Kleinwagen
function Kleinwagen(Marke)
{
    // Eigenschaften Vererbung
    Auto.call(this, Marke);
};

// Erstellung eines neuen Objekts Kleinwagen anhand des Prototypen Auto
Kleinwagen.prototype = Object.create(Auto.prototype);

// Instanziierung des Prototypen Kleinwagen
Kleinwagen.prototype.constructor = Kleinwagen;

// Ersetzen der Funktion sagHallo des Prototypen Auto
Kleinwagen.prototype.sagHallo = function(){
    console.log('Hallo, ich bin ein Kleinwagen ' + this.Marke + '!');
};

// Instanziierung des Prototypen Kleinwagen als Kleinwagen1
var Kleinwagen1 = new Kleinwagen('Fiat 500');

// Funktionsaufruf der neuen Funktion sagHallo
Kleinwagen1.sagHallo(); // Ausgabe: Hallo ich bin ein Kleinwagen Fiat 500!

// Der instanceof-Operator prüft die Anwesenheit des constructor.prototype in der Prototypenkette eines Objekts (Kleinwagen1 und Auto).
console.log(Kleinwagen1 instanceof Auto);

</script>

Eine gute Anlaufstelle für Javascript ist das Mozilla Developer Network (developer.mozilla.org/de/docs/Web/JavaScript) und die entsprechende ECMA-Script-Sprachdefinition (ecma-international.org/ecma-262/7.0/index.html

FIAE – OOP – Objektorientierte Programmierung – Polymorphie

Polymorphie ist ein wesentliches Verfahren der objektorientierten Programmierung. Polymorphismus bezieht sich auf die Objektmethoden. Polymorphie in der objektorientierten Programmierung ist eine Eigenschaft, die immer im Zusammenhang mit Vererbung und Schnittstellen (Interfaces) auftritt.

Im Allgemeinen gibt es drei Typen der Polymorphie:
– Der ad-hoc Polymorphismus (Überladung – overloading)
– Der parametrische Polymorphismus (Datenvorlage – template)
– Der Vererbungspolymorphismus (Neudefinition – overriding)

Ad-hoc Polymorphismus
Der ad-hoc Polymorphismus erlaubt gleichnamige Funktionen in unterschiedlichen Klassen – Beispiel: Es können zum Beispiel eine Basisklasse und eine Ableitungsklasse je eine Funktion „sagHallo()“ haben.

Parametrischer Polymorphismus
Der parametrische Polymorphismus, auch Datenvorlage genannt, erlaubt die Definition mehrere gleichnamiger Funktionen – mit unterschiedlichen Parametern (in der Anzahl und/oder im Typ). Der parametrische Polymorphismus erlaubt somit die automatische Wahl der anzuwendeden Methode gemäß der übergebenen Parameter oder Datentyps.
Beispiele:
– int addition(int, int)
– float addition(float, float)
– char addition(char, char)

Vererbungspolymorphismus
Die Möglichkeit eine Methode (Funktion) in Kind-Klassen (Child) neu zu definieren, die von einer Basisklasse (Parent) erben.

FIAE – OOP – Objektorientierte Programmierung – Persistenz

Persistenz (nicht unkontrolliert veränderlich) bedeutet, dass Daten auch nach Beenden eines Programms vorhanden (gespeichert) bleiben, und bei erneutem Aufruf des Programms wieder rekonstruiert und angezeigt werden können. (Im Gegensatz dazu: flüchtige Daten – transient) Persistente Objekte besitzen eine potentiell unendliche Lebensdauer und können nur durch expliziten Aufruf einer speziellen Methode (Destruktor) gelöscht werden. Sie werden in permanenten Speichersystemen z.B. objektorientierten Datenbanksystemen verwaltet.

In diesem Zusammenhang taucht oft ein Pattern auf: Data Access Object ist zum Beispiel ein Entwurfsmuster (Pattern) das den Zugriff auf unterschiedliche Datenquellen (Datenbanken, Dateisystem) so kapselt, dass die angesprochene Datenquelle ausgetauscht werden kann, ohne dass der aufrufende Code geändert werden muss. Dadurch soll die eigentliche Programmlogik von technischen Details der Datenspeicherung befreit werden und flexibler einsetzbar sein.

In PHP wäre so ein Persistenz-Layer MySQL, PDO (PHP Data Objects) oder das Doctrine Project (ORM, DBAL).

1 2 3 7