{"id":55000038,"date":"2016-06-01T00:00:00","date_gmt":"2020-03-27T19:20:06","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=38"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Objektorientierte_Programmierung_Interfaces","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Objektorientierte_Programmierung_Interfaces\/","title":{"rendered":"Objektorientierte Programmierung: Interfaces"},"content":{"rendered":"<p><b>Interfaces beziehungsweise Schnittstellen bezeichnen in der Computerwelt eine Menge verschiedener Dinge. Es gibt eine Benutzerschnittstelle, Softwareschnittstellen, Maschinenschnittstellen und mehr. Uns interessiert das Interface, wie es in der objekt-orientierten Programmierung genutzt wird. Schnittstellen dienen dort als zuverl&auml;ssige Definition der verf&uuml;gbaren Methoden, Eigenschaften oder Ereignisse f&uuml;r eine oder mehrere Klassen, welche diese tats&auml;chlich definieren.<\/b><\/p>\n<p>Auf diese Weise kann man sich beim Programmieren &#8220;gegen&#8221; eine Schnittstelle darauf verlassen, dass die Klasse, welche die Schnittstelle implementiert, auch die dort definierten Methoden, Eigenschaften, Ereignisse und Indexer enth&auml;lt (Indexer haben Sie im Rahmen dieses Magazins noch nicht kennen gelernt, daher gehen wir in diesem Artikel nicht auf diese Elemente ein).<\/p>\n<p>Wozu aber sollte man &uuml;berhaupt verschiedene Klassen programmieren, die alle die gleichen Methoden, Eigenschaften oder Ereignisse enthalten und somit die Schnittstelle implementieren Ein Grund ist, dass Sie nur einmal lernen m&ouml;chten, wie etwas funktioniert (die in der Schnittstelle definierten Elemente), die Implementierung jedoch je nach Anwendungsfall variieren kann.<\/p>\n<h2>Aus dem Leben gegriffen<\/h2>\n<p>Stellen Sie sich das Anziehen oder L&ouml;sen einer Schraube vor: Sie verwenden den f&uuml;r die Schraube passenden Schraubendreher, zum Beispiel einen Kreuzschlitz- oder einen L&auml;ngsschlitz-Schraubendreher. Nun haben beide Schraubendreher vielleicht unterschiedliche Griffe, wodurch Sie jeweils anders greifen m&uuml;ssen. Nun stellen Sie sich einen Schraubendreher mit austauschbaren Bits vor: Die (Benutzer-)Schnittstelle ist der Griff, mit dem Sie den Schraubendreher nach links oder rechts drehen k&ouml;nnen, aber je nach Schraube verwenden Sie ein anderes Bit, um diese anzuziehen oder zu l&ouml;sen. Sie kennen also die beiden Methoden der Schnittstelle, also nach links und nach rechts drehen, und k&ouml;nnen verschiedene Implementierungen nutzen &#8211; also etwa ein Bit f&uuml;r Kreuzschlitz- und ein anderes f&uuml;r L&auml;ngsschlitz-Schrauben. Genau genommen ist auch die Schnittstelle zwischen dem Schraubendreher und dem Bit ein Interface &#8211; wir haben also gleich ein doppeltes Beispiel f&uuml;r ein Interface.<\/p>\n<h2>Beispiel: E-Mail versenden<\/h2>\n<p>Genau das Gleiche kann in der Software-Welt geschehen: Sie m&ouml;chten beispielsweise eine E-Mail verschicken und dazu einem Objekt den Empf&auml;nger, den Betreff und den Inhalt &uuml;bergeben (die Eigenschaften) und die Mail dann mit der <b>Senden<\/b>-Methode abschicken. Welcher Mechanismus dahinter steckt, soll f&uuml;r den Aufruf uninteressant sein &#8211; es k&ouml;nnte sich um die Programmierung von Outlook handeln, um die Mail mit diesem Programm zu versenden, aber vielleicht verwendet eine andere Implementierung nicht Outlook, sondern eine speziell f&uuml;r den Versand von E-Mails vorgesehene SMTP-Schnittstelle.<\/p>\n<h2>Beispiel: Daten abrufen<\/h2>\n<p>Oder, was in diesem Magazin auch bereits das eine oder andere Mal beschrieben wurde: Sie m&ouml;chten ein Objekt mit Daten f&uuml;llen, also etwa ein Kunden-Objekt mit den Eigenschaften <b>KundeID<\/b>, <b>Vorname <\/b>und <b>Nachname<\/b>. Wenn Sie mit der Programmierung beginnen, sollen die Daten aus einer Access-Datenbank kommen. Aber vielleicht wechseln Sie demn&auml;chst zu einer SQL Server-Datenbank Oder lesen die Daten aus einer XML-Datei ein Dann ben&ouml;tigen Sie in jedem Fall unterschiedliche Implementierungen der Methoden, da der Zugriff auf die Daten ja nicht auf die gleiche Art erfolgt.<\/p>\n<h2>Verschiedene Methoden oder verschiedene Implementierungen<\/h2>\n<p>Nat&uuml;rlich k&ouml;nnten Sie, um beim Beispiel des Abrufs von Daten aus verschiedenartigen Datenquellen zu bleiben, f&uuml;r jeden Zugriff eine andere Methode implementieren &#8211; also beispielsweise <b>HoleKundeAccess<\/b>, <b>HoleKundeSQLServer <\/b>oder <b>HoleKundeXML<\/b>. Dann m&uuml;ssten Sie allerdings auch irgendwo eine Bedingung unterbringen, die pr&uuml;ft, welche der Methoden zum Abrufen eines Kunden-Objekts aus einer der verschiedenen Datenquellen zum Einsatz kommen soll.<\/p>\n<p>In der Objektorientierung soll dies jedoch anders ablaufen. Hier definieren Sie jeweils eine Klasse mit Methoden f&uuml;r den Zugriff auf die Daten der verschiedenen Datenquellen, also etwa Access, SQL Server oder XML. Dort sollen nat&uuml;rlich f&uuml;r jede Datenquellenart noch weitere Eigenschaften, Methoden oder auch Ereignisse definiert werden. W&uuml;rden Sie diese alle in einer Klasse unterbringen, h&auml;tten Sie erstens eine recht un&uuml;bersichtliche Anh&auml;ufung von Elementen. Au&szlig;erdem g&auml;be es keine Pr&uuml;fung, ob tats&auml;chlich alle Methoden, Eigenschaften und Ereignisse f&uuml;r die verschiedenen Datenquellen definiert wurden.<\/p>\n<p>Wenn Sie hingegen eine Schnittstelle beziehungsweise ein Interface definieren und f&uuml;r jede Datenquellenart eine eigene Klasse erstellen, welche die in der Interface-Klasse definierten Methoden, Eigenschaften und Ereignisse implementiert, erhalten Sie automatisch eine Pr&uuml;fung, ob alle ben&ouml;tigten Elemente vorliegen. Dazu m&uuml;ssen Sie beim Programmieren der Klasse nur angeben, welche Schnittstelle diese implementiert.<\/p>\n<h2>Interfaces zur Einschr&auml;nkung<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000038\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000038?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000038\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"915fccc12f\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Interfaces beziehungsweise Schnittstellen bezeichnen in der Computerwelt eine Menge verschiedener Dinge. Es gibt eine Benutzerschnittstelle, Softwareschnittstellen, Maschinenschnittstellen und mehr. Uns interessiert das Interface, wie es in der objekt-orientierten Programmierung genutzt wird. Schnittstellen dienen dort als zuverl&auml;ssige Definition der verf&uuml;gbaren Methoden, Eigenschaften oder Ereignisse f&uuml;r eine oder mehrere Klassen, welche diese tats&auml;chlich definieren.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662016,66032016,44000009,44000027],"tags":[],"yst_prominent_words":[],"class_list":["post-55000038","post","type-post","status-publish","format-standard","hentry","category-662016","category-66032016","category-CProgrammiertechnik","category-Excel_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000038","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000038"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000038\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000038"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000038"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000038"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000038"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}