{"id":4596,"date":"2022-09-17T14:10:05","date_gmt":"2022-09-17T12:10:05","guid":{"rendered":"https:\/\/launix.de\/launix\/?p=4596"},"modified":"2023-07-11T07:33:40","modified_gmt":"2023-07-11T05:33:40","slug":"ein-feature-basiertes-modell-fuer-softwareentwicklung","status":"publish","type":"post","link":"https:\/\/launix.de\/launix\/ein-feature-basiertes-modell-fuer-softwareentwicklung\/","title":{"rendered":"Ein Feature-basiertes Modell f\u00fcr Softwareentwicklung"},"content":{"rendered":"\n<p>Es ist der heilige Gral der Softwareentwicklung: Das <strong>Featureorientierte Programmieren<\/strong>.<\/p>\n\n\n\n<div><!--more--><\/div>\n\n\n\n<p>Vom Prinzip her stellt sich jeder Hochschul-Professor den idealen FOP-Ansatz so vor, dass man eine Software mit einem einfachen Editor erstellen kann, indem man einfach ein paar Features miteinander kombiniert. Diese Vision erz\u00e4hlt der Professor dann seinen Studierenden und l\u00e4sst damit die n\u00e4chste Generation an Softwareentwicklern gr\u00fcbeln, wie man die Welt verbessern kann.<\/p>\n\n\n\n<p>Der Wirkmechanismus dahinter ist ebenfalls bekannt: Es muss irgendein <strong>Modell<\/strong> geben, mit dem man Software beschreiben kann &#8211; und dann einen <strong>Compiler<\/strong>, der aus dem Modell die Software generiert.<\/p>\n\n\n\n<p>Die einzige Schwierigkeit ist, ein passendes Modell zu finden, mit dem man Software <em>gut<\/em> beschreiben kann. Um das zu verdeutlichen, mal ein paar Eigenschaften, die dieses Modell erf\u00fcllen muss:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Mit dem Modell muss man jede erdenkliche Software beschreiben k\u00f6nnen, die existiert oder existieren k\u00f6nnte<\/li><li>Das Modell muss einfach zu erlernen sein, damit man auch gen\u00fcgend Entwickler findet, die so programmieren wollen<\/li><li>Das Modell muss einfach zu ver\u00e4ndern und zu bearbeiten sein, wenn man eine Software mal verbessern m\u00f6chte<\/li><li>Das Modell muss optimal sein in der Form, dass man einfach zu erkl\u00e4rende Software auch mit m\u00f6glichst wenig &#8220;Code&#8221; (Modell-Komplexit\u00e4t) erstellen kann<\/li><\/ul>\n\n\n\n<p>Hier ein paar bereits existierende Programmiermodelle, die bei gr\u00f6\u00dferer Software immer wieder scheitern:<\/p>\n\n\n\n<ul class=\"is-style-crossed wp-block-list\"><li><strong>Imperative Programmierung<\/strong><br>Hier beschreibt man eine Software mit ein paar IF, THEN, ELSE, WHILE, UNTIL und GOTO-Befehlen. Das Modell ist einfach zu erlernen, erzeugt aber sehr umfangreiche Programme, in die man sich schlecht hereinfindet<\/li><li><strong>Prozedurale Programmierung<\/strong><br>Hier kann man imperative Programme in Funktionen und Prozeduren kapseln. Der GOTO-Befehl f\u00e4llt weg. Die Software wird \u00fcbersichtlicher, die Komplexit\u00e4t steigt aber trotzdem linear bis quadratisch.<\/li><li><strong>Objektorientierte Programmierung<\/strong><br>Hier kann man wiederkehrende Programmteile in Klassen einsortieren und verkn\u00fcpft die Datenstrukturen (Klassen) mit den Methoden (Prozeduren) &#8211; Software wird \u00fcbersichtliche und modularer. Trotzdem kann man Software noch nicht beliebig zusammensetzen.<\/li><li><strong>Funktionale Programmierung<\/strong><br>Hier beschreibt man alle Programmfunktionen als berechenbare mathematische Ausdr\u00fccke. Die Modularit\u00e4t verbessert sich gegen\u00fcber der Imperativen Programmierung. Trotzdem wird Software sehr komplex.<\/li><\/ul>\n\n\n\n<p>Was macht ein gutes FOP-Modell jetzt also aus?<\/p>\n\n\n\n<p>Was ein gutes FOP-Modell eigentlich ausmacht, steckt schon im Namen: &#8220;Featureorientiertes Programmieren&#8221; &#8211; es muss die M\u00f6glichkeit geben, komplette <strong>Features<\/strong> in der Software beschreiben und wiederverwenden zu k\u00f6nnen.<\/p>\n\n\n\n<p>Dabei sollten Features im Gegensatz zu &#8220;Klassen&#8221; aus der Objektorientierten Programmierung nicht nur auf eine bestimmte Datenstruktur (sprich: Klasse) passen, sondern sich einer beliebigen Datenstruktur anpassen k\u00f6nnen, f\u00fcr die das Feature Sinn macht.<\/p>\n\n\n\n<p>Ein <strong>Beispiel<\/strong>: Das Feature &#8220;revisionssichere Datenablage&#8221; soll daf\u00fcr sorgen, dass Dokumente nicht mehr gel\u00f6scht werden k\u00f6nnen, sondern alle \u00c4nderungen nachvollziehbar abgerufen werden k\u00f6nnen. In objektoriengierter Software muss man hier sehr viel improvisieren und mit viel Handarbeit programmieren. In einer FOP-Software entwickelt man seine Basis-Komponente und gibt ihr anschlie\u00dfend noch das Feature &#8220;Revisionssicher&#8221; dazu.<\/p>\n\n\n\n<p>Wir bei Launix haben eine solche <strong>FOP-Programmiersprache<\/strong> entwickelt, den Compiler daf\u00fcr gebaut und entwerfen damit ERP-Systeme, aber auch Kundenportale und sonstige datenbanklastige Tools f\u00fcr Jedermann.<\/p>\n\n\n\n<p>Unsere Sprache basiert auf einer <strong>Beschreibungslogik<\/strong>, die man jederzeit um neue Begriffe &#8211; sogenannte <em>Features<\/em> &#8211; erweitern kann. Eine Software erstellt man dann, indem man die Features miteinander kombiniert. Ein Feature kann vom &#8220;Neues Eingabe-Feld in einem Formular&#8221; bis hin zu &#8220;Ein komplettes Rechnungsprogramm&#8221; alles darstellen, das man in seiner Software integrieren kann.<\/p>\n\n\n\n<p>Parallel zum textuellen Programmieren gibt es dann noch den Editor, mit dem man eine grafische Ansicht (UML-Komponentendiagramm) seiner Software hat. Jede \u00c4nderung am Diagramm manipuliert sofort den Quelltext, das hei\u00dft, in einem Team k\u00f6nnen grafische und textuelle Programmierer zusammenarbeiten.<\/p>\n\n\n\n<p>Mehr Infos dazu gibt es zum Beispiel im Beitrag \u00fcber das <a href=\"https:\/\/launix.de\/launix\/was-bedeutet-das-fop-logo-in-software\/\" target=\"_blank\" aria-label=\"FOP-Siegel  (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">FOP-Siegel <\/a>oder \u00fcber die <a href=\"https:\/\/launix.de\/fop\" target=\"_blank\" aria-label=\"FOP FAQ (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">FOP FAQ<\/a>.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es ist der heilige Gral der Softwareentwicklung: Das Featureorientierte Programmieren.<\/p>\n","protected":false},"author":2,"featured_media":4545,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","footnotes":""},"categories":[128],"tags":[],"class_list":["post-4596","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming","single-item"],"featured_image_urls_v2":{"full":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920.jpg",1920,1077,false],"thumbnail":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-150x150.jpg",150,150,true],"medium":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-300x168.jpg",300,168,true],"medium_large":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-768x431.jpg",751,421,true],"large":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-1024x574.jpg",751,421,true],"1536x1536":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-1536x862.jpg",1536,862,true],"2048x2048":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920.jpg",1920,1077,false],"trp-custom-language-flag":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920.jpg",18,10,false],"xs-thumb":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-64x64.jpg",64,64,true],"appku-shop-single":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920.jpg",620,348,false]},"post_excerpt_stackable_v2":"<p>Es ist der heilige Gral der Softwareentwicklung: Das Featureorientierte Programmieren. Vom Prinzip her stellt sich jeder Hochschul-Professor den idealen FOP-Ansatz so vor, dass man eine Software mit einem einfachen Editor erstellen kann, indem man einfach ein paar Features miteinander kombiniert. Diese Vision erz\u00e4hlt der Professor dann seinen Studierenden und l\u00e4sst damit die n\u00e4chste Generation an Softwareentwicklern gr\u00fcbeln, wie man die Welt verbessern kann. Der Wirkmechanismus dahinter ist ebenfalls bekannt: Es muss irgendein Modell geben, mit dem man Software beschreiben kann &#8211; und dann einen Compiler, der aus dem Modell die Software generiert. Die einzige Schwierigkeit ist, ein passendes Modell zu&hellip;<\/p>\n","category_list_v2":"<a href=\"https:\/\/launix.de\/launix\/category\/programming\/\" rel=\"category tag\">Programming<\/a>","author_info_v2":{"name":"Carl-Philip H\u00e4nsch","url":"https:\/\/launix.de\/launix\/author\/carli\/"},"comments_num_v2":"0 comments","uagb_featured_image_src":{"full":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920.jpg",1920,1077,false],"thumbnail":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-150x150.jpg",150,150,true],"medium":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-300x168.jpg",300,168,true],"medium_large":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-768x431.jpg",751,421,true],"large":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-1024x574.jpg",751,421,true],"1536x1536":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-1536x862.jpg",1536,862,true],"2048x2048":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920.jpg",1920,1077,false],"trp-custom-language-flag":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920.jpg",18,10,false],"xs-thumb":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920-64x64.jpg",64,64,true],"appku-shop-single":["https:\/\/launix.de\/launix\/wp-content\/uploads\/2022\/06\/geometry-1023846_1920.jpg",620,348,false]},"uagb_author_info":{"display_name":"Carl-Philip H\u00e4nsch","author_link":"https:\/\/launix.de\/launix\/author\/carli\/"},"uagb_comment_info":0,"uagb_excerpt":"Es ist der heilige Gral der Softwareentwicklung: Das Featureorientierte Programmieren.","_links":{"self":[{"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/posts\/4596","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/comments?post=4596"}],"version-history":[{"count":1,"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/posts\/4596\/revisions"}],"predecessor-version":[{"id":4598,"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/posts\/4596\/revisions\/4598"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/media\/4545"}],"wp:attachment":[{"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/media?parent=4596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/categories?post=4596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/launix.de\/launix\/wp-json\/wp\/v2\/tags?post=4596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}