Zum Inhalt springen

Benutzer:Dirk Huenniger/prog

Aus Wikibooks

Die Programmiersprache C hat sehr weite Verbreitung gefunden. Ich habe jedoch durch die Beschäftigung mit anderen Sprachen gesehen, dass es in C viele Dinge gibt die einem das Leben nicht gerade leichter machen und für die es bessere Lösungen gibt. Ich möchte versuchen die Vor und Nachteile von C sowie existierende alternativen zusammenzustellen. Hierbei möchte ich auch auf Nachfolger von C wie Java und C++ eingehen.

Prozedurare Programmierung

[Bearbeiten]

C ist eine prozedurale Programiersprache. Es scheint dass sich prozedurale Programmierung besonders leicht lernen lässt oder Menschen sehr gerne die Motivation aufbringen Prozedurale Programmierung zu erlernen. Auch die Tatsache das die selbe Variable im Verlauf einer Prozedur unterschiedliche Werte annimmt scheint leicht verständlich zu sein.

Pointer

[Bearbeiten]

In C können Pointer beliebige Werte annehmen. Insbesondere auch solche die mit großer Sicherheit nicht in der Absicht der Programmierers lagen. Dies kann dazu führen dass das Programm ab dem Zeitpunkt des Zugriffs auf einen solchen in nicht vorhergesehener weise witerläuft. Dieses Problem ist auch in C++ in gleicher weise vorhaden. In Java gibt es hier lediglich den null pointer. Versucht man diesen zu dereferenzieren kommt es zu einem Laufzeitfehler. Das Programm läuft hierbei nicht in unvorhergesehener Weise weiter sondern wird sofort beendet. Wünschenswert wäre hier dass auch der Nullpointer nicht mehr zulässig ist.

Typensystem

[Bearbeiten]

Das Typensystem von C ist nicht geschickt aufgebaut. Die Mehrfachvererbung in C++ war auch keine Gute Idee. Die Interfacemehrfachvererbung in Java war eine gute Idee. Ob virtuelle Fuktionen ein tolle Idee waren weis ich nocht nicht. Gleichso für AdHoc Polymorphismus. Was ist eigentlich mit Casts. Soll man Casts überhaupt zulassen:

class A {};
class B extends A {};

class E {
	void p(A a) {
    	System.out.println("A");
	}
};

class F extends E {
	void p(B b) {
    	System.out.println("B");
	}
};
	
public class a {
	public static void main(String[] args) {
		F f = new F();
		B b = new B();
		A a = b;
		f.p(a);
		f.p(b);
	}

}
 /** 
  * Ausgabe:
  * A
  * B
  * 
  * 
  * */