SlideShare a Scribd company logo
1 of 95
Download to read offline
Object? You keep
using that word...
@KevlinHenney
/ WordFriday
Agglutination is a process in linguistic morphology
derivation in which complex words are formed by
stringing together morphemes, each with a single
grammatical or semantic meaning. Languages that
use agglutination widely are called agglutinative
languages.
http://en.wikipedia.org/wiki/Agglutination
pneumonoultramicroscopicsilicovolcanoconiosis
Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz
fylkestrafikksikkerhetsutvalgssekretariatslederfunksjonene
muvaffakiyetsizleştiricileştiriveremeyebileceklerimizdenmişsinizcesine
hippopotomonstrosesquipedaliophobia
http://www.bonkersworld.net/object-world/
http://www.bonkersworld.net/object-world/
OBJECT-ORIENTED
VenetianBlind Door
Television
Picture
Glass
Sofa
TelevisionRemoteControl
Peephole
People will be using the
words you choose in their
conversation for the next 20
years. You want to be sure
you do it right.
Unfortunately, many people
get all formal [...]. Just calling
it what it is isn't enough.
They have to tack on a
flowery, computer science-y,
impressive sounding, but
ultimately meaningless word,
like Object, Thing,
Component, Part, Manager,
Entity, or Item.
http://classnamer.com/
http://methodnamer.com/
public interface BookEntity ...
public interface BookEntityFactory ...
public interface ISBNValidator ...
public interface CatalogueRepository ...
public interface CatalogueRepositoryProvider ...
public abstract class AbstractBookEntity
implements BookEntity
public class BookEntityImpl
extends AbstractBookEntity ...
public class BookEntityFactoryImpl
implements BookEntityFactory ...
public class ISBNValidatorImpl
implements ISBNValidator ...
public class CatalogueRepositoryImpl
implements CatalogueRepository ...
public class CatalogueRepositoryProviderImpl
implements CatalogueRepositoryProvider ...
public interface Book ...
public final class ISBN ...
public interface Catalogue ...
public class DescriptionOfCatalogueImplementation
implements Catalogue ...
managerialism, noun
 belief in or reliance on the use of professional
managers in administering or planning an activity
 application of managerial techniques of businesses
to the running of other organisations, such as the
civil service or local authorities
 belief in the importance of tightly managed
organisations, as opposed to individuals, or
groups that do not resemble an organisation
Concise Oxford English Dictionary ∙ Dictionary.com ∙ Wikipedia
One way to name classes is to
give each a unique name,
indicative of its purpose. Unique
names give you the opportunity
to convey a lot of information
without creating names that are
long and unwieldy.
This is exactly the right thing to do
if the names are in common use.
LoanMember BookCopy
LoanIMember IBookCopy
Member BookCopy
Loan
Member BookCopy
role, noun
 an actor's part in a play, film, etc.
 a person or thing's function in a particular
situation
 a function, part or expected behaviour
performed in a particular operation or process
Concise Oxford English Dictionary ∙ Merriam-Webster's Collegiate Dictionary
LoanBorrower LoanItem
Member BookCopy
interface
TreeBuilderParser
TreeBuilderParser
BuilderImpl
TreeParserListenerParser
Builder
Tree
ParserListenerParser
Builder
You can communicate how the new
class is the same by naming some
superclass. It need not be the
immediate superclass, if some distant
ancestor communicates more
clearly.
You can communicate how the new
class is different by finding a word
that accurately highlights the reason
the new class isn't just the superclass.
Connection
Connection
Factory
Connection
Impl
Connection
Connection
Pool
Pooled
Connection
public Connection createConnection(Provider provider)
throws ConnectionFailureException
...
public Connection connectTo(Provider ofUpdates)
throws ConnectionFailure
...
OOP to me means only messaging,
local retention and protection and
hiding of state-process, and
extreme late-binding of all things.
It can be done in Smalltalk and in
LISP. There are possibly other
systems in which this is possible,
but I'm not aware of them.
Alan Kay
William Cook, "On Understanding Data Abstraction, Revisited"
Ignorance
Apathy
Selfishness
Identity
State
Behaviour
Stack
Stack
{push, pop, depth, top}
Stack[T]
{
push(T),
pop(),
depth() : Integer,
top() : T
}
An interface is a contract to deliver
a certain amount of service.
Clients of the interface depend on
the contract, which is usually
documented in the interface
specification.
Butler W Lampson
"Hints for Computer System Design"
Stack[T]
{
push(T item),
pop(),
depth() : Integer,
top() : T
}
given:
before = depth()
postcondition:
depth() = before + 1 ∧ top() = item
precondition:
depth() > 0
given:
before = depth()
precondition:
before > 0
postcondition:
depth() = before – 1
given:
result = depth()
postcondition:
result ≥ 0
alphabet(Stack) =
{push, pop, depth, top}
trace(Stack) =
{⟨ ⟩,
⟨push⟩, ⟨depth⟩,
⟨push, pop⟩, ⟨push, top⟩,
⟨push, depth⟩, ⟨push, push⟩,
⟨depth, push⟩, ⟨depth, depth⟩,
⟨push, push, pop⟩,
...}
Non-EmptyEmpty
depth depth
top
push
pop [depth > 1]
push
pop [depth = 1]
public class Stack_spec
{
public static class A_new_stack
{
@Test
public void has_no_depth() 
@Test()
public void has_no_top() 
}
public static class An_empty_stack
{
@Test()
public void throws_when_popped() 
@Test
public void acquires_depth_by_retaining_a_pushed_item_as_its_top() 
}
public static class A_non_empty_stack
{
@Test
public void becomes_deeper_by_retaining_a_pushed_item_as_its_top() 
@Test
public void on_popping_reveals_tops_in_reverse_order_of_pushing() 
}
}
public class
Stack_spec
{
public static class
A_new_stack
{
@Test
public void has_no_depth() 
@Test()
public void has_no_top() 
}
public static class
An_empty_stack
{
@Test()
public void throws_when_popped() 
@Test
public void acquires_depth_by_retaining_a_pushed_item_as_its_top() 
}
public static class
A_non_empty_stack
{
@Test
public void becomes_deeper_by_retaining_a_pushed_item_as_its_top() 
@Test
public void on_popping_reveals_tops_in_reverse_order_of_pushing() 
}
}
public class
Stack_spec
{
public static class
A_new_stack
{
@Test
public void has_no_depth() 
@Test()
public void has_no_top() 
}
public static class
An_empty_stack
{
@Test()
public void throws_when_popped() 
@Test
public void acquires_depth_by_retaining_a_pushed_item_as_its_top() 
}
public static class
A_non_empty_stack
{
@Test
public void becomes_deeper_by_retaining_a_pushed_item_as_its_top() 
@Test
public void on_popping_reveals_tops_in_reverse_order_of_pushing() 
}
}
Many objects have no conceptual
identity. These objects describe
some characteristic of a thing.
When you care only about the
attributes of an element of the
model, classify it as a value
object. Make it express the
meaning of the attributes it
conveys and give it related
functionality. Treat the value
object as immutable. Don't give it
any identity and avoid the design
complexities necessary to
maintain entities.
Identity
State
Behaviour
Identity
State
Behaviour
Encapsulation
Inheritance
Polymorphism
Encapsulation
Polymorphism
Inheritance
Encapsulation
Polymorphism
Inheritance
encapsulate, verb
 enclose (something) in or as if in a capsule.
 express the essential feature of (someone or
something) succinctly.
 provide an interface for (a piece of software or
hardware) to allow or simplify access for the user.
The New Oxford Dictionary of English
In many object-oriented programming languages the concept of
inheritance is present, which provides a mechanism for sharing code
among several classes of objects. Many people even regard inheritance
as the hallmark of object-orientedness in programming languages. We
do not agree with this view, and argue that the essence of object-
oriented programming is the encapsulation of data and operations in
objects and the protection of individual objects against each other.
Pierre America
"A Behavioural Approach to Subtyping in Object-Oriented Programming Languages"
In many object-oriented programming languages the concept of
inheritance is present, which provides a mechanism for sharing code
among several classes of objects. Many people even regard inheritance
as the hallmark of object-orientedness in programming languages. We
do not agree with this view, and argue that the essence of object-
oriented programming is the encapsulation of data and operations in
objects and the protection of individual objects against each other.
The author considers this principle of protection of objects against each
other as the basic and essential characteristic of object-oriented
programming. It is a refinement of the technique of abstract data types,
because it does not only protect one type of objects against all other
types, but one object against all other ones. As a programmer we can
consider ourselves at any moment to be sitting in exactly one object and
looking at all the other objects from outside.
Pierre America
"A Behavioural Approach to Subtyping in Object-Oriented Programming Languages"
Object-oriented programming does not
have an exclusive claim to all these good
properties. Systems may be modeled by
other paradigms.
Resilience can be achieved just as well
by organizing programs around abstract
data types, independently of taxonomies;
in fact, data abstraction alone is
sometimes taken as the essence of object
orientation.
abstraction, n. (Logic)
 the process of formulating a generalized concept of
a common property by disregarding the differences
between a number of particular instances. On such
an account, we acquired the concept of red by
recognizing it as common to, and so abstracting it
from the other properties of, those individual
objects we were originally taught to call red.
 an operator that forms a class name or predicate
from any given expression.
E J Borowski and J M Borwein
Dictionary of Mathematics
 T   RecentlyUsedList 
{
new : RecentlyUsedList[T],
isEmpty : RecentlyUsedList[T]  Boolean,
size : RecentlyUsedList[T]  Integer,
add : RecentlyUsedList[T]  T  RecentlyUsedList[T],
get : RecentlyUsedList[T]  Integer  T,
equals : RecentlyUsedList[T]  RecentlyUsedList[T]  Boolean
}
public class RecentlyUsedList
{
private …
public boolean isEmpty() …
public int size() …
public void add(String toAdd) …
public String get(int index) …
public boolean equals(RecentlyUsedList other) …
}
public class RecentlyUsedList
{
private …
public boolean isEmpty() …
public int size() …
public void add(String toAdd) …
public String get(int index) …
public boolean equals(RecentlyUsedList other) …
public boolean equals(Object other) …
}
public class RecentlyUsedList
{
private List<String> items = new ArrayList<String>();
public boolean isEmpty()
{
return items.isEmpty();
}
public int size()
{
return items.size();
}
public void add(String toAdd)
{
items.remove(toAdd);
items.add(toAdd);
}
public String get(int index)
{
return items.get(size() – index – 1);
}
public boolean equals(RecentlyUsedList other)
{
return other != null && items.equals(other.items);
}
public boolean equals(Object other)
{
return
other instanceof RecentlyUsedList &&
equals((RecentlyUsedList) other);
}
}
typedef struct RecentlyUsedList RecentlyUsedList;
RecentlyUsedList * create();
void destroy(RecentlyUsedList *);
bool isEmpty(const RecentlyUsedList *);
int size(const RecentlyUsedList *);
void add(RecentlyUsedList *, int toAdd);
int get(const RecentlyUsedList *, int index);
bool equals(const RecentlyUsedList *, const RecentlyUsedList *);
struct RecentlyUsedList
{
int * items;
int length;
};
RecentlyUsedList * create()
{
RecentlyUsedList * result = (RecentlyUsedList *) malloc(sizeof(RecentlyUsedList));
result->items = 0;
result->length = 0;
return result;
}
void destroy(RecentlyUsedList * self)
{
free(self->items);
free(self);
}
bool isEmpty(const RecentlyUsedList * self)
{
return self->length == 0;
}
int size(const RecentlyUsedList * self)
{
return self->length;
}
static int indexOf(const RecentlyUsedList * self, int toFind)
{
int result = -1;
for(int index = 0; result == -1 && index != self->length; ++index)
if(self->items[index] == toFind)
result = index;
return result;
}
static void removeAt(RecentlyUsedList * self, int index)
{
memmove(&self->items[index], &self->items[index + 1], (self->length - index - 1) * sizeof(int));
--self->length;
}
void add(RecentlyUsedList * self, int toAdd)
{
int found = indexOf(self, toAdd);
if(found != -1)
removeAt(self, found);
self->items = (int *) realloc(self->items, (self->length + 1) * sizeof(int));
self->items[self->length] = toAdd;
++self->length;
}
int get(const RecentlyUsedList * self, int index)
{
return self->items[self->length - index - 1];
}
bool equals(const RecentlyUsedList * lhs, const RecentlyUsedList * rhs)
{
return lhs->length == rhs->length && memcmp(lhs->items, rhs->items, lhs->length * sizeof(int)) == 0;
}
struct RecentlyUsedList
{
std::vector<int> items;
};
extern "C"
{
RecentlyUsedList * create()
{
return new RecentlyUsedList;
}
void destroy(RecentlyUsedList * self)
{
delete self;
}
bool isEmpty(const RecentlyUsedList * self)
{
return self->items.empty();
}
int size(const RecentlyUsedList * self)
{
return self->items.size();
}
void add(RecentlyUsedList * self, int toAdd)
{
std::vector<int>::iterator found =
std::find(self->items.begin(), self->items.end(), toAdd);
if(found != self->items.end())
self->items.erase(found);
self->items.push_back(toAdd);
}
int get(const RecentlyUsedList * self, int index)
{
return self->items[self->items.size() - index - 1];
}
bool equals(const RecentlyUsedList * lhs, const RecentlyUsedList * rhs)
{
return lhs->items == rhs->items;
}
}
OO ≡ ADT?
OO ≡ ADT/
William Cook, "On Understanding Data Abstraction, Revisited"
public class RecentlyUsedList
{
...
public boolean equals(RecentlyUsedList other)
{
return other != null && items.equals(other.items);
}
public boolean equals(Object other)
{
return
other instanceof RecentlyUsedList &&
equals((RecentlyUsedList) other);
}
}
bool equals(const RecentlyUsedList * lhs, const RecentlyUsedList * rhs)
{
return
lhs->length == rhs->length &&
memcmp(lhs->items, rhs->items, lhs->length * sizeof(int)) == 0;
}
extern "C"
{
...
bool equals(const RecentlyUsedList * lhs, const RecentlyUsedList * rhs)
{
return lhs->items == rhs->items;
}
}
bool equals(
const RecentlyUsedList * lhs, const RecentlyUsedList * rhs)
{
bool result = size(lhs) == size(rhs);
for(int index = 0; result && index != size(lhs); ++index)
result = get(lhs, index) == get(rhs, index);
return result;
}
extern "C" bool equals(
const RecentlyUsedList * lhs, const RecentlyUsedList * rhs)
{
bool result = size(lhs) == size(rhs);
for(int index = 0; result && index != size(lhs); ++index)
result = get(lhs, index) == get(rhs, index);
return result;
}
public class RecentlyUsedList
{
...
public boolean equals(RecentlyUsedList other)
{
boolean result = other != null && size() == other.size();
for(int index = 0; result && index != size(); ++index)
result = get(index).equals(other.get(index));
return result;
}
public boolean equals(Object other)
{
return
other instanceof RecentlyUsedList &&
equals((RecentlyUsedList) other);
}
}
One of the most pure object-oriented
programming models yet defined is the
Component Object Model (COM). It
enforces all of these principles rigorously.
Programming in COM is very flexible and
powerful as a result. There is no built-in notion
of equality. There is no way to determine if
an object is an instance of a given class.
William Cook
"On Understanding Data Abstraction, Revisited"
public class RecentlyUsedList
{
...
public boolean equals(RecentlyUsedList other)
{
boolean result = other != null && size() == other.size();
for(int index = 0; result && index != size(); ++index)
result = get(index).equals(other.get(index));
return result;
}
public boolean equals(Object other)
{
return
other instanceof RecentlyUsedList &&
equals((RecentlyUsedList) other);
}
}
public class RecentlyUsedList
{
...
public boolean equals(RecentlyUsedList other)
{
boolean result = other != null && size() == other.size();
for(int index = 0; result && index != size(); ++index)
result = get(index).equals(other.get(index));
return result;
}
}
In a purist view of object-oriented
methodology, dynamic dispatch is the only
mechanism for taking advantage of attributes
that have been forgotten by subsumption.
This position is often taken on abstraction
grounds: no knowledge should be obtainable
about objects except by invoking their
methods. In the purist approach,
subsumption provides a simple and effective
mechanism for hiding private attributes.
William Cook, "On Understanding Data Abstraction, Revisited"
public interface RecentlyUsedList
{
boolean isEmpty();
int size();
void add(String toAdd);
String get(int index);
boolean equals(RecentlyUsedList other);
}
public class RecentlyUsedListImpl
implements RecentlyUsedList
{
private List<String> items = …;
public boolean isEmpty() …
public int size() …
public void add(String toAdd) …
public String get(int index) …
public boolean equals(RecentlyUsedList other) …
public boolean equals(Object other) …
}
public class ArrayListBasedRecentlyUsedList
implements RecentlyUsedList
{
private List<String> items = …;
public boolean isEmpty() …
public int size() …
public void add(String toAdd) …
public String get(int index) …
public boolean equals(RecentlyUsedList other) …
public boolean equals(Object other) …
}
public class RandomAccessRecentlyUsedList
implements RecentlyUsedList
{
private List<String> items = …;
public boolean isEmpty() …
public int size() …
public void add(String toAdd) …
public String get(int index) …
public boolean equals(RecentlyUsedList other) …
public boolean equals(Object other) …
}
RecentlyUsedList list =
new RandomAccessRecentlyUsedList();
William Cook, "On Understanding Data Abstraction, Revisited"
Object? You Keep Using that Word
Object? You Keep Using that Word

More Related Content

What's hot

CLASS OBJECT AND INHERITANCE IN PYTHON
CLASS OBJECT AND INHERITANCE IN PYTHONCLASS OBJECT AND INHERITANCE IN PYTHON
CLASS OBJECT AND INHERITANCE IN PYTHONLalitkumar_98
 
Contexts 4 quantification (CommonSense2013)
Contexts 4 quantification (CommonSense2013)Contexts 4 quantification (CommonSense2013)
Contexts 4 quantification (CommonSense2013)Valeria de Paiva
 
Artificial intelligence Prolog Language
Artificial intelligence Prolog LanguageArtificial intelligence Prolog Language
Artificial intelligence Prolog LanguageREHMAT ULLAH
 
Object oriented programming
Object oriented programmingObject oriented programming
Object oriented programmingmustafa sarac
 
Polymorphism in Python
Polymorphism in Python Polymorphism in Python
Polymorphism in Python Home
 
Lean Logic for Lean Times: Entailment and Contradiction Revisited
Lean Logic for Lean Times: Entailment and Contradiction RevisitedLean Logic for Lean Times: Entailment and Contradiction Revisited
Lean Logic for Lean Times: Entailment and Contradiction RevisitedValeria de Paiva
 
Object Oriented Programming in Python
Object Oriented Programming in PythonObject Oriented Programming in Python
Object Oriented Programming in PythonSujith Kumar
 
Class, object and inheritance in python
Class, object and inheritance in pythonClass, object and inheritance in python
Class, object and inheritance in pythonSantosh Verma
 
Top 20 c# interview Question and answers
Top 20 c# interview Question and answersTop 20 c# interview Question and answers
Top 20 c# interview Question and answersw3asp dotnet
 
Architecture logicielle #3 : object oriented design
Architecture logicielle #3 : object oriented designArchitecture logicielle #3 : object oriented design
Architecture logicielle #3 : object oriented designJean Michel
 
Benchmarking Linear Logic Proofs
Benchmarking Linear Logic ProofsBenchmarking Linear Logic Proofs
Benchmarking Linear Logic ProofsValeria de Paiva
 
Adapt OWL as a Modular Ontology Language
Adapt OWL as a Modular Ontology LanguageAdapt OWL as a Modular Ontology Language
Adapt OWL as a Modular Ontology LanguageJie Bao
 

What's hot (20)

Using uml for ontology construction a case study in agriculture
Using uml for ontology construction a case study in agricultureUsing uml for ontology construction a case study in agriculture
Using uml for ontology construction a case study in agriculture
 
CLASS OBJECT AND INHERITANCE IN PYTHON
CLASS OBJECT AND INHERITANCE IN PYTHONCLASS OBJECT AND INHERITANCE IN PYTHON
CLASS OBJECT AND INHERITANCE IN PYTHON
 
Contexts 4 quantification (CommonSense2013)
Contexts 4 quantification (CommonSense2013)Contexts 4 quantification (CommonSense2013)
Contexts 4 quantification (CommonSense2013)
 
Artificial intelligence Prolog Language
Artificial intelligence Prolog LanguageArtificial intelligence Prolog Language
Artificial intelligence Prolog Language
 
Python OOPs
Python OOPsPython OOPs
Python OOPs
 
C# interview
C# interviewC# interview
C# interview
 
C#
C#C#
C#
 
Object oriented programming
Object oriented programmingObject oriented programming
Object oriented programming
 
Polymorphism in Python
Polymorphism in Python Polymorphism in Python
Polymorphism in Python
 
ITU - MDD - XText
ITU - MDD - XTextITU - MDD - XText
ITU - MDD - XText
 
Lean Logic for Lean Times: Entailment and Contradiction Revisited
Lean Logic for Lean Times: Entailment and Contradiction RevisitedLean Logic for Lean Times: Entailment and Contradiction Revisited
Lean Logic for Lean Times: Entailment and Contradiction Revisited
 
Object Oriented Programming in Python
Object Oriented Programming in PythonObject Oriented Programming in Python
Object Oriented Programming in Python
 
C# interview quesions
C# interview quesionsC# interview quesions
C# interview quesions
 
Class, object and inheritance in python
Class, object and inheritance in pythonClass, object and inheritance in python
Class, object and inheritance in python
 
Top 20 c# interview Question and answers
Top 20 c# interview Question and answersTop 20 c# interview Question and answers
Top 20 c# interview Question and answers
 
Architecture logicielle #3 : object oriented design
Architecture logicielle #3 : object oriented designArchitecture logicielle #3 : object oriented design
Architecture logicielle #3 : object oriented design
 
Monad Fact #6
Monad Fact #6Monad Fact #6
Monad Fact #6
 
Benchmarking Linear Logic Proofs
Benchmarking Linear Logic ProofsBenchmarking Linear Logic Proofs
Benchmarking Linear Logic Proofs
 
Js: master prototypes
Js: master prototypesJs: master prototypes
Js: master prototypes
 
Adapt OWL as a Modular Ontology Language
Adapt OWL as a Modular Ontology LanguageAdapt OWL as a Modular Ontology Language
Adapt OWL as a Modular Ontology Language
 

Viewers also liked

Declarative Thinking, Declarative Practice
Declarative Thinking, Declarative PracticeDeclarative Thinking, Declarative Practice
Declarative Thinking, Declarative PracticeKevlin Henney
 
The Error of Our Ways
The Error of Our WaysThe Error of Our Ways
The Error of Our WaysKevlin Henney
 
Seven Ineffective Coding Habits of Many Programmers
Seven Ineffective Coding Habits of Many ProgrammersSeven Ineffective Coding Habits of Many Programmers
Seven Ineffective Coding Habits of Many ProgrammersKevlin Henney
 
Python Advanced – Building on the foundation
Python Advanced – Building on the foundationPython Advanced – Building on the foundation
Python Advanced – Building on the foundationKevlin Henney
 
Object Oriented Css For High Performance Websites And Applications
Object Oriented Css For High Performance Websites And ApplicationsObject Oriented Css For High Performance Websites And Applications
Object Oriented Css For High Performance Websites And ApplicationsPerconaPerformance
 
Object-Oriented Design Heuristics
Object-Oriented Design HeuristicsObject-Oriented Design Heuristics
Object-Oriented Design Heuristicskim.mens
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Kevlin Henney
 
RED Y NET (Cordara y Beltran)
RED Y NET (Cordara y Beltran)RED Y NET (Cordara y Beltran)
RED Y NET (Cordara y Beltran)Sele Cordara
 
Quick installation with an existing router or modern router
Quick installation with an existing router or modern routerQuick installation with an existing router or modern router
Quick installation with an existing router or modern routerIT Tech
 
Piotr Wilam - Product Development Days - Raise the bar high
Piotr Wilam - Product Development Days - Raise the bar highPiotr Wilam - Product Development Days - Raise the bar high
Piotr Wilam - Product Development Days - Raise the bar highInnovation Nest VC
 
05042 0-16-131 benjamin mauricio rivera fernandez
05042 0-16-131 benjamin mauricio rivera fernandez05042 0-16-131 benjamin mauricio rivera fernandez
05042 0-16-131 benjamin mauricio rivera fernandezmauricio benitez
 
2016 October Tools for Change CGI Newsletter
2016 October Tools for Change CGI Newsletter2016 October Tools for Change CGI Newsletter
2016 October Tools for Change CGI NewsletterDr. Chris Stout
 

Viewers also liked (20)

Declarative Thinking, Declarative Practice
Declarative Thinking, Declarative PracticeDeclarative Thinking, Declarative Practice
Declarative Thinking, Declarative Practice
 
The Error of Our Ways
The Error of Our WaysThe Error of Our Ways
The Error of Our Ways
 
Seven Ineffective Coding Habits of Many Programmers
Seven Ineffective Coding Habits of Many ProgrammersSeven Ineffective Coding Habits of Many Programmers
Seven Ineffective Coding Habits of Many Programmers
 
Python Advanced – Building on the foundation
Python Advanced – Building on the foundationPython Advanced – Building on the foundation
Python Advanced – Building on the foundation
 
Game of Sprints
Game of SprintsGame of Sprints
Game of Sprints
 
Object Oriented Css For High Performance Websites And Applications
Object Oriented Css For High Performance Websites And ApplicationsObject Oriented Css For High Performance Websites And Applications
Object Oriented Css For High Performance Websites And Applications
 
Salt Lake City 2013 - Presentation
Salt Lake City 2013 - PresentationSalt Lake City 2013 - Presentation
Salt Lake City 2013 - Presentation
 
Object-Oriented Design Heuristics
Object-Oriented Design HeuristicsObject-Oriented Design Heuristics
Object-Oriented Design Heuristics
 
FizzBuzz Trek
FizzBuzz TrekFizzBuzz Trek
FizzBuzz Trek
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
 
The Rule of Three
The Rule of ThreeThe Rule of Three
The Rule of Three
 
RED Y NET (Cordara y Beltran)
RED Y NET (Cordara y Beltran)RED Y NET (Cordara y Beltran)
RED Y NET (Cordara y Beltran)
 
Quick installation with an existing router or modern router
Quick installation with an existing router or modern routerQuick installation with an existing router or modern router
Quick installation with an existing router or modern router
 
Domek
DomekDomek
Domek
 
Fundraising and the next gen 3.10.11
Fundraising and the next gen 3.10.11Fundraising and the next gen 3.10.11
Fundraising and the next gen 3.10.11
 
Piotr Wilam - Product Development Days - Raise the bar high
Piotr Wilam - Product Development Days - Raise the bar highPiotr Wilam - Product Development Days - Raise the bar high
Piotr Wilam - Product Development Days - Raise the bar high
 
05042 0-16-131 benjamin mauricio rivera fernandez
05042 0-16-131 benjamin mauricio rivera fernandez05042 0-16-131 benjamin mauricio rivera fernandez
05042 0-16-131 benjamin mauricio rivera fernandez
 
2016 October Tools for Change CGI Newsletter
2016 October Tools for Change CGI Newsletter2016 October Tools for Change CGI Newsletter
2016 October Tools for Change CGI Newsletter
 
Nature Thrill
Nature ThrillNature Thrill
Nature Thrill
 
Equity Scholarship Provision in Australian Universities: Insights and Directions
Equity Scholarship Provision in Australian Universities: Insights and DirectionsEquity Scholarship Provision in Australian Universities: Insights and Directions
Equity Scholarship Provision in Australian Universities: Insights and Directions
 

Similar to Object? You Keep Using that Word

Java OOPs Concepts.docx
Java OOPs Concepts.docxJava OOPs Concepts.docx
Java OOPs Concepts.docxFredWauyo
 
Semantic IoT Semantic Inter-Operability Practices - Part 1
Semantic IoT Semantic Inter-Operability Practices - Part 1Semantic IoT Semantic Inter-Operability Practices - Part 1
Semantic IoT Semantic Inter-Operability Practices - Part 1iotest
 
A Survey of Object Oriented Programming LanguagesMaya Hris.docx
A Survey of Object Oriented Programming LanguagesMaya Hris.docxA Survey of Object Oriented Programming LanguagesMaya Hris.docx
A Survey of Object Oriented Programming LanguagesMaya Hris.docxdaniahendric
 
It Is Possible to Do Object-Oriented Programming in Java
It Is Possible to Do Object-Oriented Programming in JavaIt Is Possible to Do Object-Oriented Programming in Java
It Is Possible to Do Object-Oriented Programming in JavaKevlin Henney
 
Oop by edgar lagman jr
Oop by edgar lagman jr Oop by edgar lagman jr
Oop by edgar lagman jr Jun-jun Lagman
 
Oop.concepts
Oop.conceptsOop.concepts
Oop.conceptstahir266
 
Object And Oriented Programing ( Oop ) Languages
Object And Oriented Programing ( Oop ) LanguagesObject And Oriented Programing ( Oop ) Languages
Object And Oriented Programing ( Oop ) LanguagesJessica Deakin
 
SMalL - Semantic Malware Log Based Reporter
SMalL  - Semantic Malware Log Based ReporterSMalL  - Semantic Malware Log Based Reporter
SMalL - Semantic Malware Log Based ReporterStefan Prutianu
 
SELFLESS INHERITANCE
SELFLESS INHERITANCESELFLESS INHERITANCE
SELFLESS INHERITANCEijpla
 
Object Oriented Language
Object Oriented LanguageObject Oriented Language
Object Oriented Languagedheva B
 
NUIG Research Showcase 2014
NUIG Research Showcase 2014NUIG Research Showcase 2014
NUIG Research Showcase 2014Bianca Pereira
 
Object Oriented Principles
Object Oriented PrinciplesObject Oriented Principles
Object Oriented PrinciplesEmprovise
 

Similar to Object? You Keep Using that Word (20)

Java OOPs Concepts.docx
Java OOPs Concepts.docxJava OOPs Concepts.docx
Java OOPs Concepts.docx
 
Introduction to OOP.pptx
Introduction to OOP.pptxIntroduction to OOP.pptx
Introduction to OOP.pptx
 
Semantic IoT Semantic Inter-Operability Practices - Part 1
Semantic IoT Semantic Inter-Operability Practices - Part 1Semantic IoT Semantic Inter-Operability Practices - Part 1
Semantic IoT Semantic Inter-Operability Practices - Part 1
 
01. design pattern
01. design pattern01. design pattern
01. design pattern
 
A Survey of Object Oriented Programming LanguagesMaya Hris.docx
A Survey of Object Oriented Programming LanguagesMaya Hris.docxA Survey of Object Oriented Programming LanguagesMaya Hris.docx
A Survey of Object Oriented Programming LanguagesMaya Hris.docx
 
It Is Possible to Do Object-Oriented Programming in Java
It Is Possible to Do Object-Oriented Programming in JavaIt Is Possible to Do Object-Oriented Programming in Java
It Is Possible to Do Object-Oriented Programming in Java
 
Object
ObjectObject
Object
 
OOP by hrishikesh dhola
OOP by hrishikesh dholaOOP by hrishikesh dhola
OOP by hrishikesh dhola
 
Oop by edgar lagman jr
Oop by edgar lagman jr Oop by edgar lagman jr
Oop by edgar lagman jr
 
Oop.concepts
Oop.conceptsOop.concepts
Oop.concepts
 
SEMINAR
SEMINARSEMINAR
SEMINAR
 
Seminar
SeminarSeminar
Seminar
 
Object And Oriented Programing ( Oop ) Languages
Object And Oriented Programing ( Oop ) LanguagesObject And Oriented Programing ( Oop ) Languages
Object And Oriented Programing ( Oop ) Languages
 
SMalL - Semantic Malware Log Based Reporter
SMalL  - Semantic Malware Log Based ReporterSMalL  - Semantic Malware Log Based Reporter
SMalL - Semantic Malware Log Based Reporter
 
SELFLESS INHERITANCE
SELFLESS INHERITANCESELFLESS INHERITANCE
SELFLESS INHERITANCE
 
OOPS in Java
OOPS in JavaOOPS in Java
OOPS in Java
 
Object Oriented Language
Object Oriented LanguageObject Oriented Language
Object Oriented Language
 
NUIG Research Showcase 2014
NUIG Research Showcase 2014NUIG Research Showcase 2014
NUIG Research Showcase 2014
 
Object Oriented Principles
Object Oriented PrinciplesObject Oriented Principles
Object Oriented Principles
 
Oop
OopOop
Oop
 

More from Kevlin Henney

The Case for Technical Excellence
The Case for Technical ExcellenceThe Case for Technical Excellence
The Case for Technical ExcellenceKevlin Henney
 
Empirical Development
Empirical DevelopmentEmpirical Development
Empirical DevelopmentKevlin Henney
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that LetterKevlin Henney
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that LetterKevlin Henney
 
Procedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayProcedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayKevlin Henney
 
Structure and Interpretation of Test Cases
Structure and Interpretation of Test CasesStructure and Interpretation of Test Cases
Structure and Interpretation of Test CasesKevlin Henney
 
Refactoring to Immutability
Refactoring to ImmutabilityRefactoring to Immutability
Refactoring to ImmutabilityKevlin Henney
 
Turning Development Outside-In
Turning Development Outside-InTurning Development Outside-In
Turning Development Outside-InKevlin Henney
 
Giving Code a Good Name
Giving Code a Good NameGiving Code a Good Name
Giving Code a Good NameKevlin Henney
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Kevlin Henney
 
Thinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation QuadrantThinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation QuadrantKevlin Henney
 

More from Kevlin Henney (20)

Program with GUTs
Program with GUTsProgram with GUTs
Program with GUTs
 
The Case for Technical Excellence
The Case for Technical ExcellenceThe Case for Technical Excellence
The Case for Technical Excellence
 
Empirical Development
Empirical DevelopmentEmpirical Development
Empirical Development
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that Letter
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that Letter
 
Get Kata
Get KataGet Kata
Get Kata
 
Procedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayProcedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went Away
 
Structure and Interpretation of Test Cases
Structure and Interpretation of Test CasesStructure and Interpretation of Test Cases
Structure and Interpretation of Test Cases
 
Agility ≠ Speed
Agility ≠ SpeedAgility ≠ Speed
Agility ≠ Speed
 
Refactoring to Immutability
Refactoring to ImmutabilityRefactoring to Immutability
Refactoring to Immutability
 
Old Is the New New
Old Is the New NewOld Is the New New
Old Is the New New
 
Turning Development Outside-In
Turning Development Outside-InTurning Development Outside-In
Turning Development Outside-In
 
Giving Code a Good Name
Giving Code a Good NameGiving Code a Good Name
Giving Code a Good Name
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
 
Thinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation QuadrantThinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation Quadrant
 
Code as Risk
Code as RiskCode as Risk
Code as Risk
 
Software Is Details
Software Is DetailsSoftware Is Details
Software Is Details
 
Good Code
Good CodeGood Code
Good Code
 
Driven to Tests
Driven to TestsDriven to Tests
Driven to Tests
 
Learning Curve
Learning CurveLearning Curve
Learning Curve
 

Recently uploaded

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 

Recently uploaded (20)

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 

Object? You Keep Using that Word

  • 1. Object? You keep using that word... @KevlinHenney
  • 2.
  • 3.
  • 5. Agglutination is a process in linguistic morphology derivation in which complex words are formed by stringing together morphemes, each with a single grammatical or semantic meaning. Languages that use agglutination widely are called agglutinative languages. http://en.wikipedia.org/wiki/Agglutination
  • 9.
  • 10. People will be using the words you choose in their conversation for the next 20 years. You want to be sure you do it right. Unfortunately, many people get all formal [...]. Just calling it what it is isn't enough.
  • 11. They have to tack on a flowery, computer science-y, impressive sounding, but ultimately meaningless word, like Object, Thing, Component, Part, Manager, Entity, or Item.
  • 14. public interface BookEntity ... public interface BookEntityFactory ... public interface ISBNValidator ... public interface CatalogueRepository ... public interface CatalogueRepositoryProvider ... public abstract class AbstractBookEntity implements BookEntity public class BookEntityImpl extends AbstractBookEntity ... public class BookEntityFactoryImpl implements BookEntityFactory ... public class ISBNValidatorImpl implements ISBNValidator ... public class CatalogueRepositoryImpl implements CatalogueRepository ... public class CatalogueRepositoryProviderImpl implements CatalogueRepositoryProvider ...
  • 15. public interface Book ... public final class ISBN ... public interface Catalogue ... public class DescriptionOfCatalogueImplementation implements Catalogue ...
  • 16. managerialism, noun  belief in or reliance on the use of professional managers in administering or planning an activity  application of managerial techniques of businesses to the running of other organisations, such as the civil service or local authorities  belief in the importance of tightly managed organisations, as opposed to individuals, or groups that do not resemble an organisation Concise Oxford English Dictionary ∙ Dictionary.com ∙ Wikipedia
  • 17. One way to name classes is to give each a unique name, indicative of its purpose. Unique names give you the opportunity to convey a lot of information without creating names that are long and unwieldy. This is exactly the right thing to do if the names are in common use.
  • 21. role, noun  an actor's part in a play, film, etc.  a person or thing's function in a particular situation  a function, part or expected behaviour performed in a particular operation or process Concise Oxford English Dictionary ∙ Merriam-Webster's Collegiate Dictionary
  • 28. You can communicate how the new class is the same by naming some superclass. It need not be the immediate superclass, if some distant ancestor communicates more clearly. You can communicate how the new class is different by finding a word that accurately highlights the reason the new class isn't just the superclass.
  • 31. public Connection createConnection(Provider provider) throws ConnectionFailureException ...
  • 32. public Connection connectTo(Provider ofUpdates) throws ConnectionFailure ...
  • 33. OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I'm not aware of them. Alan Kay
  • 34. William Cook, "On Understanding Data Abstraction, Revisited"
  • 37.
  • 38. Stack
  • 41. An interface is a contract to deliver a certain amount of service. Clients of the interface depend on the contract, which is usually documented in the interface specification. Butler W Lampson "Hints for Computer System Design"
  • 42.
  • 43. Stack[T] { push(T item), pop(), depth() : Integer, top() : T } given: before = depth() postcondition: depth() = before + 1 ∧ top() = item precondition: depth() > 0 given: before = depth() precondition: before > 0 postcondition: depth() = before – 1 given: result = depth() postcondition: result ≥ 0
  • 44.
  • 46. trace(Stack) = {⟨ ⟩, ⟨push⟩, ⟨depth⟩, ⟨push, pop⟩, ⟨push, top⟩, ⟨push, depth⟩, ⟨push, push⟩, ⟨depth, push⟩, ⟨depth, depth⟩, ⟨push, push, pop⟩, ...}
  • 48. public class Stack_spec { public static class A_new_stack { @Test public void has_no_depth()  @Test() public void has_no_top()  } public static class An_empty_stack { @Test() public void throws_when_popped()  @Test public void acquires_depth_by_retaining_a_pushed_item_as_its_top()  } public static class A_non_empty_stack { @Test public void becomes_deeper_by_retaining_a_pushed_item_as_its_top()  @Test public void on_popping_reveals_tops_in_reverse_order_of_pushing()  } }
  • 49. public class Stack_spec { public static class A_new_stack { @Test public void has_no_depth()  @Test() public void has_no_top()  } public static class An_empty_stack { @Test() public void throws_when_popped()  @Test public void acquires_depth_by_retaining_a_pushed_item_as_its_top()  } public static class A_non_empty_stack { @Test public void becomes_deeper_by_retaining_a_pushed_item_as_its_top()  @Test public void on_popping_reveals_tops_in_reverse_order_of_pushing()  } }
  • 50. public class Stack_spec { public static class A_new_stack { @Test public void has_no_depth()  @Test() public void has_no_top()  } public static class An_empty_stack { @Test() public void throws_when_popped()  @Test public void acquires_depth_by_retaining_a_pushed_item_as_its_top()  } public static class A_non_empty_stack { @Test public void becomes_deeper_by_retaining_a_pushed_item_as_its_top()  @Test public void on_popping_reveals_tops_in_reverse_order_of_pushing()  } }
  • 51.
  • 52. Many objects have no conceptual identity. These objects describe some characteristic of a thing.
  • 53. When you care only about the attributes of an element of the model, classify it as a value object. Make it express the meaning of the attributes it conveys and give it related functionality. Treat the value object as immutable. Don't give it any identity and avoid the design complexities necessary to maintain entities.
  • 59. encapsulate, verb  enclose (something) in or as if in a capsule.  express the essential feature of (someone or something) succinctly.  provide an interface for (a piece of software or hardware) to allow or simplify access for the user. The New Oxford Dictionary of English
  • 60. In many object-oriented programming languages the concept of inheritance is present, which provides a mechanism for sharing code among several classes of objects. Many people even regard inheritance as the hallmark of object-orientedness in programming languages. We do not agree with this view, and argue that the essence of object- oriented programming is the encapsulation of data and operations in objects and the protection of individual objects against each other. Pierre America "A Behavioural Approach to Subtyping in Object-Oriented Programming Languages"
  • 61. In many object-oriented programming languages the concept of inheritance is present, which provides a mechanism for sharing code among several classes of objects. Many people even regard inheritance as the hallmark of object-orientedness in programming languages. We do not agree with this view, and argue that the essence of object- oriented programming is the encapsulation of data and operations in objects and the protection of individual objects against each other. The author considers this principle of protection of objects against each other as the basic and essential characteristic of object-oriented programming. It is a refinement of the technique of abstract data types, because it does not only protect one type of objects against all other types, but one object against all other ones. As a programmer we can consider ourselves at any moment to be sitting in exactly one object and looking at all the other objects from outside. Pierre America "A Behavioural Approach to Subtyping in Object-Oriented Programming Languages"
  • 62.
  • 63. Object-oriented programming does not have an exclusive claim to all these good properties. Systems may be modeled by other paradigms. Resilience can be achieved just as well by organizing programs around abstract data types, independently of taxonomies; in fact, data abstraction alone is sometimes taken as the essence of object orientation.
  • 64. abstraction, n. (Logic)  the process of formulating a generalized concept of a common property by disregarding the differences between a number of particular instances. On such an account, we acquired the concept of red by recognizing it as common to, and so abstracting it from the other properties of, those individual objects we were originally taught to call red.  an operator that forms a class name or predicate from any given expression. E J Borowski and J M Borwein Dictionary of Mathematics
  • 65.  T   RecentlyUsedList  { new : RecentlyUsedList[T], isEmpty : RecentlyUsedList[T]  Boolean, size : RecentlyUsedList[T]  Integer, add : RecentlyUsedList[T]  T  RecentlyUsedList[T], get : RecentlyUsedList[T]  Integer  T, equals : RecentlyUsedList[T]  RecentlyUsedList[T]  Boolean }
  • 66. public class RecentlyUsedList { private … public boolean isEmpty() … public int size() … public void add(String toAdd) … public String get(int index) … public boolean equals(RecentlyUsedList other) … }
  • 67. public class RecentlyUsedList { private … public boolean isEmpty() … public int size() … public void add(String toAdd) … public String get(int index) … public boolean equals(RecentlyUsedList other) … public boolean equals(Object other) … }
  • 68. public class RecentlyUsedList { private List<String> items = new ArrayList<String>(); public boolean isEmpty() { return items.isEmpty(); } public int size() { return items.size(); } public void add(String toAdd) { items.remove(toAdd); items.add(toAdd); } public String get(int index) { return items.get(size() – index – 1); } public boolean equals(RecentlyUsedList other) { return other != null && items.equals(other.items); } public boolean equals(Object other) { return other instanceof RecentlyUsedList && equals((RecentlyUsedList) other); } }
  • 69. typedef struct RecentlyUsedList RecentlyUsedList; RecentlyUsedList * create(); void destroy(RecentlyUsedList *); bool isEmpty(const RecentlyUsedList *); int size(const RecentlyUsedList *); void add(RecentlyUsedList *, int toAdd); int get(const RecentlyUsedList *, int index); bool equals(const RecentlyUsedList *, const RecentlyUsedList *);
  • 70. struct RecentlyUsedList { int * items; int length; };
  • 71. RecentlyUsedList * create() { RecentlyUsedList * result = (RecentlyUsedList *) malloc(sizeof(RecentlyUsedList)); result->items = 0; result->length = 0; return result; } void destroy(RecentlyUsedList * self) { free(self->items); free(self); } bool isEmpty(const RecentlyUsedList * self) { return self->length == 0; } int size(const RecentlyUsedList * self) { return self->length; } static int indexOf(const RecentlyUsedList * self, int toFind) { int result = -1; for(int index = 0; result == -1 && index != self->length; ++index) if(self->items[index] == toFind) result = index; return result; } static void removeAt(RecentlyUsedList * self, int index) { memmove(&self->items[index], &self->items[index + 1], (self->length - index - 1) * sizeof(int)); --self->length; } void add(RecentlyUsedList * self, int toAdd) { int found = indexOf(self, toAdd); if(found != -1) removeAt(self, found); self->items = (int *) realloc(self->items, (self->length + 1) * sizeof(int)); self->items[self->length] = toAdd; ++self->length; } int get(const RecentlyUsedList * self, int index) { return self->items[self->length - index - 1]; } bool equals(const RecentlyUsedList * lhs, const RecentlyUsedList * rhs) { return lhs->length == rhs->length && memcmp(lhs->items, rhs->items, lhs->length * sizeof(int)) == 0; }
  • 73. extern "C" { RecentlyUsedList * create() { return new RecentlyUsedList; } void destroy(RecentlyUsedList * self) { delete self; } bool isEmpty(const RecentlyUsedList * self) { return self->items.empty(); } int size(const RecentlyUsedList * self) { return self->items.size(); } void add(RecentlyUsedList * self, int toAdd) { std::vector<int>::iterator found = std::find(self->items.begin(), self->items.end(), toAdd); if(found != self->items.end()) self->items.erase(found); self->items.push_back(toAdd); } int get(const RecentlyUsedList * self, int index) { return self->items[self->items.size() - index - 1]; } bool equals(const RecentlyUsedList * lhs, const RecentlyUsedList * rhs) { return lhs->items == rhs->items; } }
  • 76. William Cook, "On Understanding Data Abstraction, Revisited"
  • 77. public class RecentlyUsedList { ... public boolean equals(RecentlyUsedList other) { return other != null && items.equals(other.items); } public boolean equals(Object other) { return other instanceof RecentlyUsedList && equals((RecentlyUsedList) other); } }
  • 78. bool equals(const RecentlyUsedList * lhs, const RecentlyUsedList * rhs) { return lhs->length == rhs->length && memcmp(lhs->items, rhs->items, lhs->length * sizeof(int)) == 0; }
  • 79. extern "C" { ... bool equals(const RecentlyUsedList * lhs, const RecentlyUsedList * rhs) { return lhs->items == rhs->items; } }
  • 80. bool equals( const RecentlyUsedList * lhs, const RecentlyUsedList * rhs) { bool result = size(lhs) == size(rhs); for(int index = 0; result && index != size(lhs); ++index) result = get(lhs, index) == get(rhs, index); return result; }
  • 81. extern "C" bool equals( const RecentlyUsedList * lhs, const RecentlyUsedList * rhs) { bool result = size(lhs) == size(rhs); for(int index = 0; result && index != size(lhs); ++index) result = get(lhs, index) == get(rhs, index); return result; }
  • 82. public class RecentlyUsedList { ... public boolean equals(RecentlyUsedList other) { boolean result = other != null && size() == other.size(); for(int index = 0; result && index != size(); ++index) result = get(index).equals(other.get(index)); return result; } public boolean equals(Object other) { return other instanceof RecentlyUsedList && equals((RecentlyUsedList) other); } }
  • 83. One of the most pure object-oriented programming models yet defined is the Component Object Model (COM). It enforces all of these principles rigorously. Programming in COM is very flexible and powerful as a result. There is no built-in notion of equality. There is no way to determine if an object is an instance of a given class. William Cook "On Understanding Data Abstraction, Revisited"
  • 84. public class RecentlyUsedList { ... public boolean equals(RecentlyUsedList other) { boolean result = other != null && size() == other.size(); for(int index = 0; result && index != size(); ++index) result = get(index).equals(other.get(index)); return result; } public boolean equals(Object other) { return other instanceof RecentlyUsedList && equals((RecentlyUsedList) other); } }
  • 85. public class RecentlyUsedList { ... public boolean equals(RecentlyUsedList other) { boolean result = other != null && size() == other.size(); for(int index = 0; result && index != size(); ++index) result = get(index).equals(other.get(index)); return result; } }
  • 86. In a purist view of object-oriented methodology, dynamic dispatch is the only mechanism for taking advantage of attributes that have been forgotten by subsumption. This position is often taken on abstraction grounds: no knowledge should be obtainable about objects except by invoking their methods. In the purist approach, subsumption provides a simple and effective mechanism for hiding private attributes.
  • 87. William Cook, "On Understanding Data Abstraction, Revisited"
  • 88. public interface RecentlyUsedList { boolean isEmpty(); int size(); void add(String toAdd); String get(int index); boolean equals(RecentlyUsedList other); }
  • 89. public class RecentlyUsedListImpl implements RecentlyUsedList { private List<String> items = …; public boolean isEmpty() … public int size() … public void add(String toAdd) … public String get(int index) … public boolean equals(RecentlyUsedList other) … public boolean equals(Object other) … }
  • 90. public class ArrayListBasedRecentlyUsedList implements RecentlyUsedList { private List<String> items = …; public boolean isEmpty() … public int size() … public void add(String toAdd) … public String get(int index) … public boolean equals(RecentlyUsedList other) … public boolean equals(Object other) … }
  • 91. public class RandomAccessRecentlyUsedList implements RecentlyUsedList { private List<String> items = …; public boolean isEmpty() … public int size() … public void add(String toAdd) … public String get(int index) … public boolean equals(RecentlyUsedList other) … public boolean equals(Object other) … }
  • 92. RecentlyUsedList list = new RandomAccessRecentlyUsedList();
  • 93. William Cook, "On Understanding Data Abstraction, Revisited"