background preloader

SOLID (object-oriented design)

SOLID (object-oriented design)
In computer programming, SOLID (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion) is a mnemonic acronym introduced by Michael Feathers for the "first five principles" named by Robert C. Martin[1][2] in the early 2000s[3] that stands for five basic principles of object-oriented programming and design. The principles when applied together intend to make it more likely that a programmer will create a system that is easy to maintain and extend over time.[3] The principles of SOLID are guidelines that can be applied while working on software to remove code smells by causing the programmer to refactor the software's source code until it is both legible and extensible. It is part of an overall strategy of agile and adaptive programming.[3]

http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

GRASP (object-oriented design) General Responsibility Assignment Software Patterns (or Principles), abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design. Larman states that "the critical design tool for software development is a mind well educated in design principles. It is not the UML or any other technology." Thus, GRASP is really a mental toolset, a learning aid to help in the design of object-oriented software. The Controller pattern assigns the responsibility of dealing with system events to a non-UI class that represents the overall system or a use case scenario.

Getting to Know Markdown The Web has become enmeshed in all aspects of our lives. And whether we realize it or not, so has HTML, the language that’s used to format Web pages. Even people who aren’t web designers or coders — bloggers, writers, even folks who want to create content for personal web pages — need to know some HTML. Or do they? While basic HTML is fairly easy to learn, there are a lot of people who use that skill only occasionally.

Is Design Dead? For many that come briefly into contact with Extreme Programming, it seems that XP calls for the death of software design. Not just is much design activity ridiculed as "Big Up Front Design", but such design techniques as the UML, flexible frameworks, and even patterns are de-emphasized or downright ignored. In fact XP involves a lot of design, but does it in a different way than established software processes. Lehman's laws of software evolution In Software engineering, the Laws of Software Evolution refer to a series of laws that Lehman and Belady formulated starting in 1974 with respect to Software evolution.[1][2] The laws describe a balance between forces driving new developments on one hand, and forces that slow down progress on the other hand. Context[edit] Observing that most software is subject to change in the course of its existence, the authors set out to determine laws that these changes will typically obey, or must obey in order for the software to survive.

Single responsibility principle In object-oriented programming, the single responsibility principle states that every context (class, function, variable, etc.) should define a single responsibility, and that responsibility should be entirely encapsulated by the context. All its services should be narrowly aligned with that responsibility. Martin defines a responsibility as a reason to change, and concludes that a class or module should have one, and only one, reason to change. As an example, consider a module that compiles and prints a report. Such a module can be changed for two reasons. First, the content of the report can change. Separation of concerns The value of separation of concerns is simplifying development and maintenance of computer programs. When concerns are well-separated, individual sections can be reused, as well as developed and updated independently. Of special value is the ability to later improve or modify one section of code without having to know the details of other sections, and without having to make corresponding changes to those sections.

JPEG, GIF, And PNG: When To Use Each Kind Of Image Generally, when you see an image used on the Internet, it’s a JPEG, GIF, or PNG. If you’re just a viewer of said images, you probably don’t spend too much time thinking about the different file types. For people who make images online, knowing when to use each type is critical. P of EAA This book started after Dave Rice and I gave some talks on J2EE architecture and mulled over how the concepts we had learned in C++, Forte, CORBA, and Smalltalk had been crucial to us developing good designs in Java. With this book I wanted to set many of these patterns down to help developers whatever their platform. These turned out to be very valuable when we started to use .NET in 2002 and Ruby in 2007. The book is a Duplex Book.

GDS design principles GOV.UK is for anyone who has an interest in how UK government policies affect them. Using this style guidance will help us make all GOV.UK information readable and understandable. It has a welcoming and reassuring tone and aims to be a trusted and familiar resource. We take all of the writing for web points into account when we write for GOV.UK. Then we add the following points based on user testing and analysis on our own website. Active voice

7 Patterns to Refactor Fat ActiveRecord Models When teams use Code Climate to improve the quality of their Rails applications, they learn to break the habit of allowing models to get fat. “Fat models” cause maintenance issues in large apps. Only incrementally better than cluttering controllers with domain logic, they usually represent a failure to apply the Single Responsibility Principle (SRP). “Anything related to what a user does” is not a single responsibility.

You ain't gonna need it "You aren't gonna need it"[1][2] (acronym: YAGNI)[3] is a principle of extreme programming (XP) that states a programmer should not add functionality until deemed necessary.[4] Ron Jeffries writes, "Always implement things when you actually need them, never when you just foresee that you need them."[5] The phrase also appears altered as, "You aren't going to need it"[6][7] or sometimes phrased as, "You ain't gonna need it". YAGNI is a principle behind the XP practice of "do the simplest thing that could possibly work" (DTSTTCPW).[2][3] It is meant to be used in combination with several other practices, such as continuous refactoring, continuous automated unit testing and continuous integration. Used without continuous refactoring, it could lead to messy code and massive rework. Continuous refactoring in turn relies on automated unit tests and/or static analysis tools as a safety net and continuous integration to prevent wider integration problems.

Memory Sizes Explained - Gigabytes, Terabytes & Petabytes in Layman's Terms It’s easy to see that 500 gigabytes is more than 100 gigabytes. It’s also easy to see that 1 terabyte is larger than 1 gigabyte and that is larger than 1 megabyte. But these are all abstract terms and names. We can visualize 1 inch or 1 meter or 1 mile, but how can we visualize 1 gigabyte? 1 terabyte? Inversion of Control Containers and the Dependency Injection pattern In the Java community there's been a rush of lightweight containers that help to assemble components from different projects into a cohesive application. Underlying these containers is a common pattern to how they perform the wiring, a concept they refer under the very generic name of "Inversion of Control". In this article I dig into how this pattern works, under the more specific name of "Dependency Injection", and contrast it with the Service Locator alternative. The choice between them is less important than the principle of separating configuration from use. One of the entertaining things about the enterprise Java world is the huge amount of activity in building alternatives to the mainstream J2EE technologies, much of it happening in open source.

PragPub February 2013 What you don’t know can hurt you, especially when you convince yourself that you do know it. Many Agile teams—I believe it’s most Agile teams—get some improvement from applying Agile values, principles, and practices. These teams do a better job of predicting when they’ll be done, and a better job of being done at the time they predict.

Related: