programmierung solid prinzipien
<p>mit der zeit konnte ich zwei teile von <a href="http://en.wikipedia.org/wiki/solid\_%28object-oriented\_design%29"> solid </a> - das "s" und "o" verstehen.</p><p>"o" - ich habe das open closed-prinzip mit hilfe des vererbungs- und strategiemusters gelernt.</p><p>"s" - ich habe beim erlernen von orm das prinzip der einzelverantwortung gelernt (die persistenzlogik wird von domänenobjekten entfernt).</p><p>was sind in ähnlicher weise die besten regionen/aufgaben, um andere teile von solid (das „l“, „i“ und „d“) zu lernen?</p><p>verweise</p><ol> <li> <a href="http://msdn.microsoft.com/en-us/magazine/dn683797.aspx">msdn - gefahren von verstößen solid prinzipien in c #</a> </li> <li> <a href="http://channel9.msdn.com/events/teched/northamerica/2014/dev-b315#fbid=">channel9 - anwenden von s.o.l.i.d.-prinzipien in .net/c #</a> </li> <li> <a href="http://code.msdn.microsoft.com/windowsapps/oops-principles-solid-7a4e69bf">oops-prinzipien (solid-prinzipien)</a> </li> </ol>
<p>ich war vor ein paar monaten in ihren schuhen, bis ich einen sehr hilfreichen artikel fand.</p><p>jedes prinzip lässt sich anhand realer situationen erklären, mit denen jeder softwareentwickler in seinen projekten konfrontiert sein kann. ich schneide hier ab und zeige auf die referenz - <a href="http://www.code-magazine.com/article.aspx?quickid=1001061&amp;page=3">s.o.l.i.d. softwareentwicklung, schritt für schritt</a> .</p><p>wie in den kommentaren erwähnt, gibt es eine weitere sehr gute pdf-lesung - <a href="http://lostechies.com/wp-content/uploads/2011/03/pablos\_solid\_ebook.pdf">pablos solid software development</a> .</p><p>darüber hinaus gibt es einige gute bücher, in denen solid prinzipien ausführlicher beschrieben werden - <a href="http://forums.asp.net/t/1622480.aspx/1">good book on solid software development</a> .</p><p><strong> bearbeitung und kommentar einer kurzen zusammenfassung für jedes prinzip: </strong></p><ul> <li> <p>"s" - das prinzip der einzelverantwortung wird von den anforderungen des unternehmens bestimmt, um änderungen zu ermöglichen. „ein einziger grund zur änderung“ hilft ihnen zu verstehen, welche logisch getrennten konzepte zusammengefasst werden sollten, indem sie das geschäftskonzept und den kontext anstelle des technischen konzepts allein berücksichtigen. <code>in another words</code>, ich habe gelernt, dass <strong> jede klasse </strong> eine einzige verantwortung haben sollte. die verantwortung besteht darin, nur die zugewiesene aufgabe zu erfüllen</p> </li> <li> <p>"o" - ich lernte das open closed-prinzip und begann, "komposition gegenüber vererbung zu bevorzugen" und als solche klassen zu bevorzugen, die keine virtuellen methoden haben und möglicherweise versiegelt sind, deren erweiterung jedoch von abstraktionen abhängt.</p> </li> <li> <p>"l" - ich habe das liskov-substitutionsprinzip mithilfe des repository-musters für die verwaltung des datenzugriffs gelernt.</p> </li> <li>"ich" - ich habe das prinzip der schnittstellentrennung kennengelernt, indem ich gelernt habe, dass clients nicht gezwungen werden sollten, schnittstellen zu implementieren, die sie nicht verwenden (wie im membership provider in asp.net 2.0). die schnittstelle sollte also nicht „viele verantwortlichkeiten“ haben.</li> <li>"d" - ich habe das prinzip der abhängigkeitsinversion kennengelernt und <strong> angefangen, code zu ändern, der leicht zu ändern ist </strong>. einfacher zu ändern bedeutet niedrigere gesamtbetriebskosten und höhere wartbarkeit.</li> </ul><p>da eine nützliche ressource von codeplex in kommentaren erwähnt wurde, wird auf <a href="http://solidexamples.codeplex.com/">solid am beispiel</a> verwiesen</p><p> <a href="https://i.stack.imgur.com/z4uo8.jpg">(<img src="https://i.stack.imgur.com/z4uo8.jpg" alt="enter image description here"></a> </p>
Es lohnt sich, einen Blick auf diesen [`Blog Post`](http://lostechies.com/jimmybogard/2012/07/20/choosing-an-orm-strategy/) werfen, aber letztendlich werden die Kriterien von Ihnen festgelegt. Sie müssen entscheiden, ob 

* schnelle Entwicklung
* Performance
* Code-zuerst
* DB zuerst

 oder was auch immer Sie suchen und priorisieren Sie die Liste basierend auf, was noch wichtiger ist. Dann verwenden Sie diese Liste, um Ihre Forschung zusammenzustellen. Wenn es etwas mehr sein darf, dann finde ich "Design Thinking" oder auch "Design Sprints" sehr passend. Das ist allerdings beides nichts, was man mal eben in ein kurzes Meeting einbindet, sondern eine komplette Methodik in der es in beiden Fällen auch darauf ankommt, dass man ein möglichst interdisziplinäres Team zusammenstellt, um von den verschiedenen Sichtweisen zu partizipieren und dann in einem strukturierten Prozess zuerst einmal daran arbeitet, eine sinnvolle / lösenswerte Problemstellung zu erarbeiten. Im weiteren Verlauf werden konkrete Lösungsideen erarbeitet, ein Prototyp entwickelt, der dann an echten Kunden verprobt wird. 

Zum Start der Zusammenarbeit eines neuen Teams, bzw. beim Projekt-/Produktentwicklungsstart finde ich das super passend.

Nähere Infos dazu gibt's im Teamprove Blog: [Design Thinking](https://www.teamprove.de/blog/design-thinking-1-innovation-mit-methode?highlight=WyJkZXNpZ24iLCJ0aGlua2luZyIsImRlc2lnbiB0aGlua2luZyJd) oder [Design Sprint](https://www.teamprove.de/blog/design-sprint-mach-s-wie-google?highlight=WyJkZXNpZ24iLCJ0aGlua2luZyIsImRlc2lnbiB0aGlua2luZyJd)

Innerhalb dieser Methoden wird dann durchaus auf andere Elemente wie z.B. verschiedene Brainstorming Techniken gesetzt. Entweder durch 4 Regeln, wie von GF123 beschrieben, oder als Formel über:  

"Formel zur Ermittlung der zu formatierenden Zellen verwenden" und dann als Formel, für z.B. die Zelle A1:  

=ODER($A$1="a";$A$1="d";$A$1="g";$A$1="j")  

Klappt es? <p>ja, es ist einfach eine wiederkehrende phrase im titel mehrerer artikel, beginnend mit einem paar in den 70er jahren, in dem sussman und steele die verwendung der lambda-rechnung für die programmierung anhand eines minimalistischen lisp-dialekts mit dem namen " <a href="http://en.wikipedia.org/wiki/scheme\_%28programming\_language%29">schema" demonstrieren</a> "sie haben für diesen zweck entwickelt. sie finden <a href="http://library.readscheme.org/page1.html">die papiere selbst hier</a> ; sie sind interessant und überraschend relevant.</p><p>ich bin mir nicht sicher, ob dies jemals explizit angegeben wird, aber es ist klar (aus dem kontext, nachdem ich die artikel gelesen habe und den allgemeinen hintergrund und die forschungsinteressen der autoren kenne), dass der satz einfach ein eingängiger slogan für ihre behauptung ist, dass lambda-abstraktionen sind als rechnerisches grundelement nicht nur universell im formalen sinne (in der lage zu sein, ein programm auf irgendeine weise zu codieren, wie umständlich es auch sein mag), sondern universell in einem <em> praktischen </em> spüren, dass jedes in anderen sprachen vorhandene konstrukt, auch solche, die von grund auf eingebrannt wurden, in einer sprache auf lambda-basis auf eine weise implementiert werden kann, die sowohl effektiv als auch natürlich zu verwenden ist.</p><p>der wiederholte satz führt zu der offensichtlichen verallgemeinerten form "für alle x ist lambda das ultimative x", was der sinn ist, den ich allgemein als "lambda the ultimate" als blognamen verstanden habe, wobei ich feststelle, dass sich ltu mit der programmiersprache befasst design und theorie. ironischerweise wäre ltu wahrscheinlich auch einer der besten orte, um jemanden zu finden, der ihnen etwas erzählen könnte, für das lambda <em> nicht </em> die ultimative implementierung ist. :]</p><p>beachten sie auch, dass sussman einer der autoren von <a href="http://mitpress.mit.edu/sicp/"> sicp </a> ist, einem sehr einflussreichen lehrbuch, das auch die schemasprache verwendet und viel zeit damit verbringt, lambda-abstraktionen als einzuführen ein konzept.</p> Ich fand das Buch <http://www.amazon.de/HTML-mit-CSS-XHTML-Kopf/dp/3897214539/> sehr anschaulich und auch unterhaltsam geschrieben. Auf jeden Fall Anfänger geeignet.  

Eine VHS Kurs halte ich dafür nicht für so sinnvoll. Einfach weil es so schwierig nicht ist, dass man da ständig jemanden zum nachfragen bräuchte. Ich hab letztens mein Realabschluss gemacht bzw. letztes Jahr im Juni :D Ich hatte als Projekt das Thema : illegale Drogen. Ist wirklich sehr interessant. Du kannst z.B. darueber berichten, wieso illegale Drogen illegal sind, welches es gibt, was die schlimmste ist (ich glaub Crystal Meth), Auswirkungen von Drogen, Bilder zeigen, wie die aussehen (ich hab z.B. fuer LSD kleine Brausetabletten mitgebracht, kannst aber auch Karamellbonbons nehmen oder so, fuer Koks Puderzucker oder die guenstigere Alternative : Mehl XD). Ja, also halt Geschichte von illegalen Drogen (z.B. Herkunft, wie sind sie entstanden?, Welche es gibt? warum illiegale Dorgen illegal sind, Preise...) kannst du alles bei wikipedia nachlesen oder woanders. Ich fand das Thema ganz gut. Hab auch ne 2+ fuer den Vortrag bekommen, aber es kommt ja auf die Person an, die es vorstellt haha :D Liebe/r Dave209, wenn du bei einer Englischarbeit einen Text lesen musst, dann musst du ihn gaaanz sorgfältig (!) lesen. Überspringe AUF KEINEN FALL einen Absatz nur weil du schneller fertig werden willst. Du musst versuchen, dir die Texte im Kopf zu übersetzen, damit du den Inhalt besser verstehst. Viele Lehrer (Das kam beim mir auch schon öfters vor) Stellen eine Frage, die mit "right" or "wrong" beantwortet werden musst, wovon du denkst, das es stimmt und diese Frage vorkam. Aber: Sie bauen oft kleine Fehler ein, z.b. fragen sie, ob Tina am **montag** angeln war, und du denkst:Ja!, dabei stand im Text, dass Tina am **Dienstag** angeln war. Verstehst du was ich meine? Sie bauen Fehler ein, die einem nicht gleich klar sind. Lies dir also auch die **Fragen** genauestens durch. Wenn ihr einen Text auf CD anhört, hör gut hin, und frag später deine/n Lehrer/in ob sie/er es nochmals abspielt. Viel Glück, toi,toi,toi!!! a) Setze bei der ersten und letzten der drei Zeilen der Definition x=2 ein und kontrolliere, ob dasselbe rauskommt. In diesem Fall gibt es ein solches c. 


ln(1) + 4 - 3 = 1


sin(π/2) = 1


Also kann man c=1 nehmen. 


b) Gibt es lim\_(x->0) sin(1/x) ? Falls dieser Grenzwert existiert, gibt es ein d , sonst nicht. <p>wenn dies meine entwurfsentscheidung wäre, würde ich wahrscheinlich eher eine option c (modifizierte option a) wählen.</p><h3>erstens, warum nicht 'option b':</h3><p>zum einen gefällt mir die klarheit, dass jedes produkt seinen eigenen tisch hat. wenn es sich nur um eine große tabelle mit einem feld zur bestimmung des typs handelt, ist die beziehung nicht so klar.</p><p>zum anderen würde die indizierungsstrategie immer erfordern, dass dieses typfeld aufgelistet wird. da es sich nur um 4 typen handelt, ist die indexkardinalität extrem niedrig (<code>select * from product\_table where type='x'</code> führt im grunde sowieso einen vollständigen tabellenscan durch)</p><h3>option c.</h3><ul> <li>erstellen sie eine übergeordnete tabelle, die nur die spalten enthält, die alle typen gemeinsam nutzen</li> <li>erstellen sie jeden produkttyp als eigene tabelle mit ihren einzelnen spalten, mit einem zusätzlichen: ein link zur übergeordneten tabelle</li> <li>erstellen sie jede 'link'-tabelle: product\_option, model\_option usw. mit links zu den jeweiligen schlüsseln.</li> <li>für diejenigen mit wechselseitigen links (model\_option, option\_model) erstellen sie auch diese tabellen. dies erhöht die klarheit ihrer joins für alle, die sich das ansehen.</li> </ul><p>der nachteil ist die komplexität, sicherzustellen, dass waisen vermieden werden, wenn dinge aktualisiert/gelöscht werden, und zunächst die abfragen zu entwerfen, die diese tabellen verwenden.</p> was du suchst nennt sich „block based programming“. gibts für arduino auch:

<https://learn.sparkfun.com/tutorials/alternative-arduino-interfaces/all>