SlideShare a Scribd company logo
I’m	
sensing	a	
pattern	
Tony	Veale	2018
Ssshhhh	
Great	artists	
steal	…	
	
	
	Help!	
	
When	we	refer	to	the	idea	
of	“genre”	or	“style”	or	
“paradigm”	in	Art,	Science	
or	Commercial	Design,	we	
are	referring	to	the	idea	of	
Design	Patterns	…	
	
These	codify	the	unspoken	
norms	of	good	design,	and	
apply	in	many	disciplines.
Rene	Magritte’s	
Design	Patterns	
(1928)
How	should		
I	organize	
my	classes?	
	
	
Be Wise!
Use the
Luke.
Be Wise!
Use the
Luke.
…	and	threaten	it	
with	imminent	
destruction	by		an	
inventive	means.
We	meet	
again,	Mr.	
Bond	…
Compartmentalize	responsibility	
Maximize	coherence	within	
compartments	
Minimize	dependencies	between	
compartments	
Reduce	redundancy	&	inefficiency	
Explicitly	assign	responsibilities		
Orderly	flow	of	information	
Scalability	&	Extensibility
So	
alone
Different	parameterized	
configurations	of	the	same	
class	are	instantiated	to	suit	
different	contexts	and	uses.
Flippin’	
Nora,	that’s	
a	Big	‘Un	…	
	
There	can	
be	only	one	
silverback.
public	interface	Quantifiable	extends	Identifiable	{	
	 public	int	getQuantity();	
	 public	int	addQuantity(int	delta);	
	 public	int	removeQuantity(int	delta);	
}	
Let’s	start	by	defining	an	Interface	type	for	tracking	
the	ingredients	in	our	restaurant’s	pantry	…	
	Clean	
that	
fridge!
public	interface	Manageable	{	
	 public	Quantifiable	lookup(String	identifier);	
	 public	Quantifiable	add(Quantifiable	entry);	
	 public	void	remove(Quantifiable	entry);	
}	
Now	add	an	Interface	type	for	bringing	all	of	this	
stock	together	into	a	Manageable	system	…	
	
Inventory	
Control!
import	java.util.Hashtable;	
public	class	CentralPantry	implements	Manageable	{	
				private	Hashtable<String,	Quantifiable>	store	=	null;	
				private	CentralPantry()	{	
	 	 store	=	new	Hashtable<String,	Quantifiable>();	
				}	
}	
We	can	now	begin	to	implement	our	central	pantry.	
But	why	does	our	class	require	a	private	constructor?
private	static	CentralPantry	cache	=	null;	
				public	static	synchronized	CentralPantry	getPantry()		
				{	
	 	 if	(cache	==	null)	
	 	 	 cache	=	new	CentralPantry();	
	 	 return	cache;	
	 }	
Only	a	class	instance	can	call	a	private	constructor.	
So	provide	a	static	method	to	instantiate	the	class.	
	So	use	the		
static	method,	
and	not	the	
constructor
public	class	CentralPantry	implements	Manageable	{	
	
						public	static	CentralPantry	getPantry()	{		
	 	 return	SingletonCache.ONE;	
}	
	
private	static	class	SingletonCache		{	
	 	 public	static	final	CentralPantry	ONE		
																																											=	new	CentralPantry();	
	 }	 	 	
					private	CentralPantry()	{	…	}		
	
OR:	We	can	exploit	Java’s	lazy	evaluation	of	assignments	
Java	lazily	loads	classes	only	as	they	are	needed	…
static	getInstance()	
singletonOperations()	
getSingletonData()	
static	uniqueInstance	
singletonData	
return	uniqueInstance;	
	Here’s	the	
Singleton	
pattern	in	a	
nutshell.
P1	
P2	
P3	
P4	
P5	 P6	
P8	
P7	
P9	
P0	
P10	
P11
When	a	class	has	a	complicated,	
multi-step	set	up	procedure,	and	a	
diversity	of	configuration	options,	
then	it	makes	sense	to	define	
another	class,	called	a	Builder,	
whose	responsibility	is	the	
construction	of	new	instances		
	 of	the	more	complex	class.	
	
	
Take,	for	
example,	the	
making	of	a	
pizza	…
public	class		Commodity		implements	Quantifiable	{	
	 private	String	identifier	=	null;	
	 private	int	amount	=	1;	
	 	
	 public	Commodity(String	name)	{	
	 	 identifier	=	name;	
	 }	
	 	
	 public	String	getIdentifier()	{	
	 	 return	identifier;	
	 }	
First,	let’s	create	the	most	generic	and	reusable	set	of	
classes	and	interfaces	for	our	our	example	…	
	
Continued	overleaf	…	
	
Pizzas	are	
commodities
public	int	getQuantity()	{	
	 	 return	amount;	
	 }	
	 	
	 public	int	addQuantity(int	delta)	{	
	 	 amount	+=	delta;	
	 	 return	amount;	
	 }	
	 	
	 public	int	removeQuantity(int	delta)	{	
	 	 amount	+=	delta;	 	
	 	 return	amount;	
	 }	
}	
	
Implement	
Quantifiable	
interface
public	interface	Bakeable		{	
	
	 public	void	setDough(Quantifiable	dough);	
	 	
	 public	void	addSauce(Quantifiable	sauce);	
	 	
	 public	void	addTopping(Quantifiable	topping);	
	 	
}	
Before	defining	a	Pizza	class,	generalize	to	the	category	
of		all	bakeable	commodities	…	
	
	
Pizzas	implement	
these	methods
public	class	Pizza	extends	Commodity		
								implements	Bakeable	{	
	
	 private	Quantifiable	dough	=	null,	sauce	=	null;	
	 	
	 Vector<Quantifiable>	toppings		
		 					=	new	Vector<Quantifiable>();	
	 	
	 public	Pizza(String	name)	{	
	 	 super(name);	
	 }	
	 	
	 	
Now	we	define	Pizza	as	the	class	of	bakeable	commodities		
	
Continued	overleaf	…
public	void	setDough(Quantifiable	dough)	{	
	 	 this.dough	=	dough;	
	 }	
	 	
	 public	void	addSauce(Quantifiable	sauce)	{	
	 	 this.sauce	=	sauce;	
	 }	
	 	
	 public	void	addTopping(Quantifiable	topping)	{	
	 	 toppings.add(topping);	
	 }	
}	
Implement	Bakeable	requirements	for	pizza	variations
public	interface	Subcontractable	{	
	 	
	 public	void	buildSequence();	
	 	
public	void	startProduct(String	name);	
	 	
	 public	Commodity	getProduct();	
	
}	
A	subcontractor	is	a	builder	to	which	we	delegate	jobs.	
Each	subcontractor	must	implement	Subcontractable	…	
	
	
Our	pizza	builders	
will	implement	this
public	interface	Contractable	{	
	
	 public	void	setSubcontractor(Subcontractable		
					subcontractor);	
	 	
	 public	Commodity	deliverContract();	
}	
A	Contractor	can	form	a	contract	with	a	subcontractor	to	
deliver	on	a	contract	for	a	commodity	with	a	client	….	
	
	
Think	of	the	link	
between	a	chef		
and	a	sous	chef
abstract	public	class	PizzaBuilder		
		implements	Subcontractable	{	
	 	
	 private	Pizza	pizza	=	null;	
	 	
	 public	void	buildSequence()	{	
	 	 buildDough();	
	 	 buildSauce();	
	 	 buildToppings();	
	 }	
	 	
	 	
	
A	PizzaBuilder	is	a	subcontractable	class	that	combines	
specific	dough,	sauce	and	toppings	to	make	a	pizza	
	
Continued	overleaf	…
public	Commodity	getProduct()	{	
	 	 return	pizza;	
	 }	
public	void	startProduct(String	name)	{	
	 	 pizza	=	new	Pizza(name);	
	 }	
	 abstract	public	void	buildDough();	 	 	
	 abstract	public	void	buildSauce();	
	 abstract	public	void	buildToppings();	
}	
Abstract	methods	must	be	implemented	by	specific	builders
public	class	HawaiianBuilder	extends	PizzaBuilder	{	
	
	 public	void	buildDough()	{		
	 	 startProduct(“Hawaiian”);	
	 	 ((Bakeable)getProduct())	
.setDough(new	Commodity("thin	crust"));		
	 }	
	 	
	 public	void	buildSauce()	{		
	 	 ((Bakeable)getProduct())	
.addSauce(new	Commodity("marinara"));		
	 }	
	 	
	 public	void	buildToppings()	{		
Let’s	look	at	a	specific	builder	for	a	specific	kind	of	pizza	…		
Continued	overleaf	…
public	void	buildToppings()	{		
	 	 ((Bakeable)getProduct())	
.addTopping(new	Commodity("Mozzarella"));		
	 	 	
((Bakeable)getProduct())	
.addTopping	(new	Commodity("ham"));		
	 	 	
((Bakeable)getProduct())	
		 .addTopping	(new	Commodity("pineapple"));		
	 }	
}	
A		specific	builder	applies	specific	elements	to	the	build
public	class	PizzaContractor	implements	Contractable	{	
	 	
	 private	PizzaBuilder	subcontractor	=	null;	
	 	
	 public	void	setSubcontractor(Subcontractable		
			subcontractor)	{	
	 	 this.subcontractor	=	(PizzaBuilder)subcontractor;	
	 }	
	 	
	 public	Commodity	deliverContract()	{	
	 	 subcontractor.buildSequence();	
	 	 return	subcontractor.getProduct();	
	 }	
A	Pizza	Contractor	delivers	on	a	contract	for	a	pizza		
Continued	overleaf	…
public	static	void	main(String[]	args)	{	
	 	 PizzaBuilder	souschef	=	new	HawaiianBuilder();	
	 	 Contractable	chef	=	new	PizzaContractor();	
	 	 chef.setSubcontractor(souschef);	
	 	 Commodity	pizza	=	chef.deliverContract();	
	 	 if	(pizza.getIdentifier()	==	"Hawaiian")	
	 	 	 System.out.println("Aloha!");	
}	 	
}	
At	last	we	create	a	contractor	and	a	subcontractor	for	pizza		
	
ALOHA!
ExpertBuilder	
	
	
+startProduct()	
+getProduct()	
ExpertBuilder	
	
	
+startProduct()	
+getProduct()	
Subcontractor	
	
	
buildSequence()	
Contractor	
	
	
deliverContract()	
Commodity	
ExpertBuilder	
	
	
+startProduct()	
+getProduct()	
for	all	aspects	of	scheme		
					subcontractor	
												.buildSequence();
Exemplar1	
	
	
+startProduct()	
+getProduct()	
Exemplar1	
	
	
+startProduct()	
+getProduct()	
Exemplar1	
	
	
+startProduct()	
+getProduct()	
Exemplar1	
	
	
+startProduct()	
+getProduct()	
Commodity	
	
	
clone()	
Contractor	
prototype	
deliverContract()	
Exemplar1	
	
	
	
clone()	
	
ExemplarN	
	
	
	
clone()	
return	prototype.clone();
public	static	void	main(String[]	args)	{	
	 Pizza	hawaiian	=	new	Pizza("Magnum	P.I.");	
	 hawaiian.setDough(new	Commodity("thin	crust"));	
	 hawaiian.addSauce(new	Commodity("barbecue"));	
	 hawaiian.addTopping(new	Commodity("ham"));	
	 hawaiian.addTopping(new	Commodity("mushroom"));	
hawaiian.addTopping(new	Commodity("pineapple"));	
	 	
Let’s	build	a	Hawaiian	pizza	directly,	with	No	Builder	class
Pizza	sicilian	=	new	Pizza("The	Godfather");	
	 sicilian.setDough(new	Commodity("deep	pan"));	
	 sicilian.addSauce(new	Commodity("spicy"));	
	 sicilian.addTopping(new	Commodity("salami"));	
	 sicilian.addTopping(new	Commodity("pepperoni"));	
sicilian.addTopping(new	Commodity("chilies"));	
sicilian.addTopping(new	Commodity("black	olives"));	
	
	 	
Now	build	another	prototype	pizza,	with	No	Builder	class
public	Commodity	clone()	{	
	 	 try	{	
	 	 	 return	(Commodity)super.clone();	
	 	 	}	catch	(Exception	e)	{	
	 	 	 return	null;	
	 	 }	
	 }	
In	the	Commodity	class	we	define	a	method	to	“clone”	a	
commodity,	catching	any	exceptions	that	are	thrown	…		
	
	
A	“clone”	is	a	copy		
of	an	object	with	the		
same	(==)	field	
values
public	class	CommodityContractor	
	implements	Contractable		{	
	 private	Commodity	style	=	null;	
	 	
	 public	void	setStyle(Commodity	exemplar)	{	
	 	 this.style	=	exemplar;	
	 }	
	 public	void	setSubcontractor(Subcontractable	sub)	{};	
	 	
	 public	Commodity	deliverContract()	{	
	 	 return	style.clone();	
	 }	
}	
We	can	simplify	our	Contractor	classes	greatly	now	…
CommodityContractor	chef	=	new	CommodityContractor();	
chef.setStyle(sicilian);	
Commodity	myPizza	=	chef.deliverContract();	
System.out.println(myPizza.getIdentifier());	
chef.setStyle(hawaiian);	
myPizza	=	chef.deliverContract();	
System.out.println(myPizza.getIdentifier());	
	
Let’s	revisit	our	pizza-making	example	via	our	Prototypes	
	
“Magnum	P.I.”	
	
“The		
Godfather”
Notice	how	the	Singleton,	Builder	
and	Prototype	patterns	alter	the	
way	we	view	class	instantiation.	
Where	possible,	we	delegate	this	
responsilibity	to	experts	who	hide	
(by	encapsulation)	the	true	
complexity	of	object	creation.	
	 	
I	prefer	my	
pizza	to	be	
made	by	an	
expert!
CommodityContractor	chef	=	new	CommodityContractor();	
chef.setStyle(sicilian);	
	
Contractable	chef	=	new	PizzaContractor();	
chef.setSubcontractor(hawaiianChef);	
	
Notice	how	in	both	the	Builder	and	Prototype	
we	use	interfaces	to	minimize	dependencies	
between	contractor	and	subcontractor	…		
We	inject	these	dependencies	late	in	the	game
Some	developers	consider	Dependency	
Injection	to	be	a	design	pattern	in	its	own	
right.	What	is	clear	is	that	it	is	a	key	part	of	
many	other	dependency-reducing	patterns.	
	
	
We	call	this	
strategy	
Dependency	
Injection
When	we	want	a	family	of	related	builders	that	construct	
a	thematically-consistent	family	of	related	commodities
A	factory	of	
GUI	widgets	
for	MAC	OS	
can	replace	
	
A	factory	of	
GUI	widgets	
for	Windows.
Factory_Style1	
	
	
				getPart1(),	…,	
getPartN(),			
Factory_Style1	
	
	
				getPart1(),	…,	
getPartN(),			
Factory_Style1	
	
	
				getPart1(),	…,	
getPartN(),			
Factory	
	
	
					getPart1(),	…,	
getPartN(),							
Consumer	
factory	
useParts()	
Factory_Style_1	
	
	
					getPart1(),	…,	
getPartN(),			
Factory_Style_N	
	
	
				getPart1(),	…,						
				getPartN(),
public	class	PizzaFactory	extends	PizzaContractor	{	
	 	
	 public	Commodity	getPizza()	{	
	 	 return	deliverContract();	
	 }	
	 	
	 public	Commodity	getSandwich()	{	
	 	 Pizza	pie	=	(Pizza)deliverContract();	
	 	 	
	 	 pie.setDough(new	Commodity("crusty	roll"));	
	 	 	
	 	 return	pie;	
	 }	
Let’s	turn	our	Pizza	maker	into	a	Factory	of	Italian	dishes	
	
Continued	overleaf	…
public	Commodity	getCalzone()	{	
	 	 Pizza	pie	=	(Pizza)deliverContract();	
	 	 pie.setDough(new	Commodity("folded	crust"));	
	 	 return	pie;	
	 }	
	 	
	 public	Commodity	getLasagne()	{	
	 	 Pizza	pie	=	(Pizza)deliverContract();	
	 	 pie.setDough(new	Commodity("lasanga	sheets"));	
	 	 return	pie;	
	 }	
}	
	 	
Add	calzones	and	even	lasagnes	for	good	measure	…
public	static	void	main(String[]	args)	{	
	 	 PizzaBuilder	stylist	=	new	HawaiianBuilder();	
	 	 PizzaFactory	factory	=	new	PizzaFactory();	
	 	 factory.setSubcontractor(stylist);	
	 	 Commodity	lunch	=	factory.getSandwich();	
	 	 if	(lunch.getIdentifier()	==	"Hawaiian")	
	 	 	 System.out.println("The	End");	
}	 	
}	
Now	our	pizza	factory	makes	thematically	consistent	dishes	
	
The	End

More Related Content

Similar to Design patterns: An Introduction to Software Design Patterns

Entrepreneurship by Design: The entrepreneur, the designer and the ideal star...
Entrepreneurship by Design: The entrepreneur, the designer and the ideal star...Entrepreneurship by Design: The entrepreneur, the designer and the ideal star...
Entrepreneurship by Design: The entrepreneur, the designer and the ideal star...
Julien Kerlidou
 
Conceptualizing the Maker: Empowering Personal Identity through Creative Appr...
Conceptualizing the Maker: Empowering Personal Identity through Creative Appr...Conceptualizing the Maker: Empowering Personal Identity through Creative Appr...
Conceptualizing the Maker: Empowering Personal Identity through Creative Appr...
Binaebi Akah
 
Technology Enabled Business Transformation
Technology Enabled Business TransformationTechnology Enabled Business Transformation
Technology Enabled Business Transformation
Mikkel Brahm
 
AEI 2009 Rene Jansen day2
AEI 2009 Rene Jansen day2AEI 2009 Rene Jansen day2
AEI 2009 Rene Jansen day2
Rene Jansen
 
Pontis Digest - New Literacy and The Changemaker Generation
Pontis Digest - New Literacy and The Changemaker GenerationPontis Digest - New Literacy and The Changemaker Generation
Pontis Digest - New Literacy and The Changemaker Generation
Sote ICT
 
Attracting, retaining and getting the best from your architects
Attracting, retaining and getting the best from your architectsAttracting, retaining and getting the best from your architects
Attracting, retaining and getting the best from your architects
Tetradian Consulting
 
Welcome to 3rd year
Welcome to 3rd yearWelcome to 3rd year
Welcome to 3rd year
Clint Griffin
 
Idea Generation.pptx
Idea Generation.pptxIdea Generation.pptx
Idea Generation.pptx
Muthu Natarajan
 
Creativity is passé
Creativity is passéCreativity is passé
Creativity is passé
Dries De Roeck
 
idea-design short sabine-fischer
idea-design short sabine-fischeridea-design short sabine-fischer
idea-design short sabine-fischer
Prof. Dr. Sabine Fischer
 
The Future of Innovation
The Future of InnovationThe Future of Innovation
The Future of Innovation
Christian DE NEEF
 
Creative Industry (Commercial Product, Branding and Image Building)
Creative Industry (Commercial Product, Branding and Image Building)Creative Industry (Commercial Product, Branding and Image Building)
Creative Industry (Commercial Product, Branding and Image Building)
Teguh Andoria
 
Andrés Solano, MCH2022, Peru
Andrés Solano, MCH2022, PeruAndrés Solano, MCH2022, Peru
Andrés Solano, MCH2022, Peru
MCH
 
Disintegrated enterprise-architecture?
Disintegrated enterprise-architecture?Disintegrated enterprise-architecture?
Disintegrated enterprise-architecture?
Tetradian Consulting
 
Conventions from real texts
Conventions from real textsConventions from real texts
Conventions from real texts
hammonda
 
Conventions from real texts
Conventions from real textsConventions from real texts
Conventions from real texts
hammonda
 
What is Design Thinking?
What is Design Thinking?What is Design Thinking?
What is Design Thinking?
David Terrar
 
Tell Your Story the Walt Disney World Way: Adding Disney Imagineering to Your...
Tell Your Story the Walt Disney World Way: Adding Disney Imagineering to Your...Tell Your Story the Walt Disney World Way: Adding Disney Imagineering to Your...
Tell Your Story the Walt Disney World Way: Adding Disney Imagineering to Your...
Lou Prosperi
 
Decon graphics lecture
Decon graphics lectureDecon graphics lecture
Decon graphics lecture
Alex Brown
 
AdobeSerie1
AdobeSerie1AdobeSerie1
AdobeSerie1
Neus Lorenzo
 

Similar to Design patterns: An Introduction to Software Design Patterns (20)

Entrepreneurship by Design: The entrepreneur, the designer and the ideal star...
Entrepreneurship by Design: The entrepreneur, the designer and the ideal star...Entrepreneurship by Design: The entrepreneur, the designer and the ideal star...
Entrepreneurship by Design: The entrepreneur, the designer and the ideal star...
 
Conceptualizing the Maker: Empowering Personal Identity through Creative Appr...
Conceptualizing the Maker: Empowering Personal Identity through Creative Appr...Conceptualizing the Maker: Empowering Personal Identity through Creative Appr...
Conceptualizing the Maker: Empowering Personal Identity through Creative Appr...
 
Technology Enabled Business Transformation
Technology Enabled Business TransformationTechnology Enabled Business Transformation
Technology Enabled Business Transformation
 
AEI 2009 Rene Jansen day2
AEI 2009 Rene Jansen day2AEI 2009 Rene Jansen day2
AEI 2009 Rene Jansen day2
 
Pontis Digest - New Literacy and The Changemaker Generation
Pontis Digest - New Literacy and The Changemaker GenerationPontis Digest - New Literacy and The Changemaker Generation
Pontis Digest - New Literacy and The Changemaker Generation
 
Attracting, retaining and getting the best from your architects
Attracting, retaining and getting the best from your architectsAttracting, retaining and getting the best from your architects
Attracting, retaining and getting the best from your architects
 
Welcome to 3rd year
Welcome to 3rd yearWelcome to 3rd year
Welcome to 3rd year
 
Idea Generation.pptx
Idea Generation.pptxIdea Generation.pptx
Idea Generation.pptx
 
Creativity is passé
Creativity is passéCreativity is passé
Creativity is passé
 
idea-design short sabine-fischer
idea-design short sabine-fischeridea-design short sabine-fischer
idea-design short sabine-fischer
 
The Future of Innovation
The Future of InnovationThe Future of Innovation
The Future of Innovation
 
Creative Industry (Commercial Product, Branding and Image Building)
Creative Industry (Commercial Product, Branding and Image Building)Creative Industry (Commercial Product, Branding and Image Building)
Creative Industry (Commercial Product, Branding and Image Building)
 
Andrés Solano, MCH2022, Peru
Andrés Solano, MCH2022, PeruAndrés Solano, MCH2022, Peru
Andrés Solano, MCH2022, Peru
 
Disintegrated enterprise-architecture?
Disintegrated enterprise-architecture?Disintegrated enterprise-architecture?
Disintegrated enterprise-architecture?
 
Conventions from real texts
Conventions from real textsConventions from real texts
Conventions from real texts
 
Conventions from real texts
Conventions from real textsConventions from real texts
Conventions from real texts
 
What is Design Thinking?
What is Design Thinking?What is Design Thinking?
What is Design Thinking?
 
Tell Your Story the Walt Disney World Way: Adding Disney Imagineering to Your...
Tell Your Story the Walt Disney World Way: Adding Disney Imagineering to Your...Tell Your Story the Walt Disney World Way: Adding Disney Imagineering to Your...
Tell Your Story the Walt Disney World Way: Adding Disney Imagineering to Your...
 
Decon graphics lecture
Decon graphics lectureDecon graphics lecture
Decon graphics lecture
 
AdobeSerie1
AdobeSerie1AdobeSerie1
AdobeSerie1
 

More from Tony Veale

Plug and Play for a Transferrable Sense of Humour
Plug and Play for a Transferrable Sense of HumourPlug and Play for a Transferrable Sense of Humour
Plug and Play for a Transferrable Sense of Humour
Tony Veale
 
Appointment in Samarra: Bicameral Story-telling bots
Appointment in Samarra: Bicameral Story-telling botsAppointment in Samarra: Bicameral Story-telling bots
Appointment in Samarra: Bicameral Story-telling bots
Tony Veale
 
A giant sarcastic robot? What a Great Idea!
A giant sarcastic robot? What a Great Idea!A giant sarcastic robot? What a Great Idea!
A giant sarcastic robot? What a Great Idea!
Tony Veale
 
Building a sense of humour: The Robot's guide to Humorous Incongruity
Building a sense of humour: The Robot's guide to Humorous IncongruityBuilding a sense of humour: The Robot's guide to Humorous Incongruity
Building a sense of humour: The Robot's guide to Humorous Incongruity
Tony Veale
 
West of Eden: Building Characters with Personality
West of Eden: Building Characters with PersonalityWest of Eden: Building Characters with Personality
West of Eden: Building Characters with Personality
Tony Veale
 
Fifty shades of orange: Building Bots with Personality
Fifty shades of orange: Building Bots with PersonalityFifty shades of orange: Building Bots with Personality
Fifty shades of orange: Building Bots with Personality
Tony Veale
 
Fifty shades of Dorian Gray: Affective Computing and The Self
Fifty shades of Dorian Gray: Affective Computing and The SelfFifty shades of Dorian Gray: Affective Computing and The Self
Fifty shades of Dorian Gray: Affective Computing and The Self
Tony Veale
 
Pizza maker: A Tutorial on Building Twitterbots
Pizza maker: A Tutorial on Building TwitterbotsPizza maker: A Tutorial on Building Twitterbots
Pizza maker: A Tutorial on Building Twitterbots
Tony Veale
 
Better than the real thing: AI at the Movies
Better than the real thing: AI at the MoviesBetter than the real thing: AI at the Movies
Better than the real thing: AI at the Movies
Tony Veale
 
Divine sparks: Empathic Ethical Machines
Divine sparks: Empathic Ethical MachinesDivine sparks: Empathic Ethical Machines
Divine sparks: Empathic Ethical Machines
Tony Veale
 
Apt pupils: Machine Learning in the Movies
Apt pupils: Machine Learning in the MoviesApt pupils: Machine Learning in the Movies
Apt pupils: Machine Learning in the Movies
Tony Veale
 
Mechanical muses
Mechanical musesMechanical muses
Mechanical muses
Tony Veale
 
Hawking's riddle: An OWL lesson
Hawking's riddle: An OWL lessonHawking's riddle: An OWL lesson
Hawking's riddle: An OWL lesson
Tony Veale
 
Metaphors all the way down
Metaphors all the way downMetaphors all the way down
Metaphors all the way down
Tony Veale
 
Placebo effect
Placebo effectPlacebo effect
Placebo effect
Tony Veale
 
Game of tropes
Game of tropesGame of tropes
Game of tropes
Tony Veale
 
Unweaving the lexical rainbow: Grounding Linguistic Creativity in Perceptual ...
Unweaving the lexical rainbow: Grounding Linguistic Creativity in Perceptual ...Unweaving the lexical rainbow: Grounding Linguistic Creativity in Perceptual ...
Unweaving the lexical rainbow: Grounding Linguistic Creativity in Perceptual ...
Tony Veale
 
Seduced and abandoned in the Chinese Room
Seduced and abandoned in the Chinese RoomSeduced and abandoned in the Chinese Room
Seduced and abandoned in the Chinese Room
Tony Veale
 
Metaphor for NLP (at NAACL 2015)
Metaphor for NLP (at NAACL 2015)Metaphor for NLP (at NAACL 2015)
Metaphor for NLP (at NAACL 2015)
Tony Veale
 
SemEval 2015 Task 11: Sentiment Analysis of Figurative Language in Twitter
SemEval 2015 Task 11: Sentiment Analysis of Figurative Language in TwitterSemEval 2015 Task 11: Sentiment Analysis of Figurative Language in Twitter
SemEval 2015 Task 11: Sentiment Analysis of Figurative Language in Twitter
Tony Veale
 

More from Tony Veale (20)

Plug and Play for a Transferrable Sense of Humour
Plug and Play for a Transferrable Sense of HumourPlug and Play for a Transferrable Sense of Humour
Plug and Play for a Transferrable Sense of Humour
 
Appointment in Samarra: Bicameral Story-telling bots
Appointment in Samarra: Bicameral Story-telling botsAppointment in Samarra: Bicameral Story-telling bots
Appointment in Samarra: Bicameral Story-telling bots
 
A giant sarcastic robot? What a Great Idea!
A giant sarcastic robot? What a Great Idea!A giant sarcastic robot? What a Great Idea!
A giant sarcastic robot? What a Great Idea!
 
Building a sense of humour: The Robot's guide to Humorous Incongruity
Building a sense of humour: The Robot's guide to Humorous IncongruityBuilding a sense of humour: The Robot's guide to Humorous Incongruity
Building a sense of humour: The Robot's guide to Humorous Incongruity
 
West of Eden: Building Characters with Personality
West of Eden: Building Characters with PersonalityWest of Eden: Building Characters with Personality
West of Eden: Building Characters with Personality
 
Fifty shades of orange: Building Bots with Personality
Fifty shades of orange: Building Bots with PersonalityFifty shades of orange: Building Bots with Personality
Fifty shades of orange: Building Bots with Personality
 
Fifty shades of Dorian Gray: Affective Computing and The Self
Fifty shades of Dorian Gray: Affective Computing and The SelfFifty shades of Dorian Gray: Affective Computing and The Self
Fifty shades of Dorian Gray: Affective Computing and The Self
 
Pizza maker: A Tutorial on Building Twitterbots
Pizza maker: A Tutorial on Building TwitterbotsPizza maker: A Tutorial on Building Twitterbots
Pizza maker: A Tutorial on Building Twitterbots
 
Better than the real thing: AI at the Movies
Better than the real thing: AI at the MoviesBetter than the real thing: AI at the Movies
Better than the real thing: AI at the Movies
 
Divine sparks: Empathic Ethical Machines
Divine sparks: Empathic Ethical MachinesDivine sparks: Empathic Ethical Machines
Divine sparks: Empathic Ethical Machines
 
Apt pupils: Machine Learning in the Movies
Apt pupils: Machine Learning in the MoviesApt pupils: Machine Learning in the Movies
Apt pupils: Machine Learning in the Movies
 
Mechanical muses
Mechanical musesMechanical muses
Mechanical muses
 
Hawking's riddle: An OWL lesson
Hawking's riddle: An OWL lessonHawking's riddle: An OWL lesson
Hawking's riddle: An OWL lesson
 
Metaphors all the way down
Metaphors all the way downMetaphors all the way down
Metaphors all the way down
 
Placebo effect
Placebo effectPlacebo effect
Placebo effect
 
Game of tropes
Game of tropesGame of tropes
Game of tropes
 
Unweaving the lexical rainbow: Grounding Linguistic Creativity in Perceptual ...
Unweaving the lexical rainbow: Grounding Linguistic Creativity in Perceptual ...Unweaving the lexical rainbow: Grounding Linguistic Creativity in Perceptual ...
Unweaving the lexical rainbow: Grounding Linguistic Creativity in Perceptual ...
 
Seduced and abandoned in the Chinese Room
Seduced and abandoned in the Chinese RoomSeduced and abandoned in the Chinese Room
Seduced and abandoned in the Chinese Room
 
Metaphor for NLP (at NAACL 2015)
Metaphor for NLP (at NAACL 2015)Metaphor for NLP (at NAACL 2015)
Metaphor for NLP (at NAACL 2015)
 
SemEval 2015 Task 11: Sentiment Analysis of Figurative Language in Twitter
SemEval 2015 Task 11: Sentiment Analysis of Figurative Language in TwitterSemEval 2015 Task 11: Sentiment Analysis of Figurative Language in Twitter
SemEval 2015 Task 11: Sentiment Analysis of Figurative Language in Twitter
 

Recently uploaded

DESIGN AND MANUFACTURE OF CEILING BOARD USING SAWDUST AND WASTE CARTON MATERI...
DESIGN AND MANUFACTURE OF CEILING BOARD USING SAWDUST AND WASTE CARTON MATERI...DESIGN AND MANUFACTURE OF CEILING BOARD USING SAWDUST AND WASTE CARTON MATERI...
DESIGN AND MANUFACTURE OF CEILING BOARD USING SAWDUST AND WASTE CARTON MATERI...
OKORIE1
 
Ericsson LTE Throughput Troubleshooting Techniques.ppt
Ericsson LTE Throughput Troubleshooting Techniques.pptEricsson LTE Throughput Troubleshooting Techniques.ppt
Ericsson LTE Throughput Troubleshooting Techniques.ppt
wafawafa52
 
Introduction to Computer Networks & OSI MODEL.ppt
Introduction to Computer Networks & OSI MODEL.pptIntroduction to Computer Networks & OSI MODEL.ppt
Introduction to Computer Networks & OSI MODEL.ppt
Dwarkadas J Sanghvi College of Engineering
 
Open Channel Flow: fluid flow with a free surface
Open Channel Flow: fluid flow with a free surfaceOpen Channel Flow: fluid flow with a free surface
Open Channel Flow: fluid flow with a free surface
Indrajeet sahu
 
4. Mosca vol I -Fisica-Tipler-5ta-Edicion-Vol-1.pdf
4. Mosca vol I -Fisica-Tipler-5ta-Edicion-Vol-1.pdf4. Mosca vol I -Fisica-Tipler-5ta-Edicion-Vol-1.pdf
4. Mosca vol I -Fisica-Tipler-5ta-Edicion-Vol-1.pdf
Gino153088
 
Transformers design and coooling methods
Transformers design and coooling methodsTransformers design and coooling methods
Transformers design and coooling methods
Roger Rozario
 
AI + Data Community Tour - Build the Next Generation of Apps with the Einstei...
AI + Data Community Tour - Build the Next Generation of Apps with the Einstei...AI + Data Community Tour - Build the Next Generation of Apps with the Einstei...
AI + Data Community Tour - Build the Next Generation of Apps with the Einstei...
Paris Salesforce Developer Group
 
P5 Working Drawings.pdf floor plan, civil
P5 Working Drawings.pdf floor plan, civilP5 Working Drawings.pdf floor plan, civil
P5 Working Drawings.pdf floor plan, civil
AnasAhmadNoor
 
Zener Diode and its V-I Characteristics and Applications
Zener Diode and its V-I Characteristics and ApplicationsZener Diode and its V-I Characteristics and Applications
Zener Diode and its V-I Characteristics and Applications
Shiny Christobel
 
一比一原版(CalArts毕业证)加利福尼亚艺术学院毕业证如何办理
一比一原版(CalArts毕业证)加利福尼亚艺术学院毕业证如何办理一比一原版(CalArts毕业证)加利福尼亚艺术学院毕业证如何办理
一比一原版(CalArts毕业证)加利福尼亚艺术学院毕业证如何办理
ecqow
 
openshift technical overview - Flow of openshift containerisatoin
openshift technical overview - Flow of openshift containerisatoinopenshift technical overview - Flow of openshift containerisatoin
openshift technical overview - Flow of openshift containerisatoin
snaprevwdev
 
SCALING OF MOS CIRCUITS m .pptx
SCALING OF MOS CIRCUITS m                 .pptxSCALING OF MOS CIRCUITS m                 .pptx
SCALING OF MOS CIRCUITS m .pptx
harshapolam10
 
5G Radio Network Througput Problem Analysis HCIA.pdf
5G Radio Network Througput Problem Analysis HCIA.pdf5G Radio Network Througput Problem Analysis HCIA.pdf
5G Radio Network Througput Problem Analysis HCIA.pdf
AlvianRamadhani5
 
Levelised Cost of Hydrogen (LCOH) Calculator Manual
Levelised Cost of Hydrogen  (LCOH) Calculator ManualLevelised Cost of Hydrogen  (LCOH) Calculator Manual
Levelised Cost of Hydrogen (LCOH) Calculator Manual
Massimo Talia
 
OOPS_Lab_Manual - programs using C++ programming language
OOPS_Lab_Manual - programs using C++ programming languageOOPS_Lab_Manual - programs using C++ programming language
OOPS_Lab_Manual - programs using C++ programming language
PreethaV16
 
A high-Speed Communication System is based on the Design of a Bi-NoC Router, ...
A high-Speed Communication System is based on the Design of a Bi-NoC Router, ...A high-Speed Communication System is based on the Design of a Bi-NoC Router, ...
A high-Speed Communication System is based on the Design of a Bi-NoC Router, ...
DharmaBanothu
 
An Introduction to the Compiler Designss
An Introduction to the Compiler DesignssAn Introduction to the Compiler Designss
An Introduction to the Compiler Designss
ElakkiaU
 
Assistant Engineer (Chemical) Interview Questions.pdf
Assistant Engineer (Chemical) Interview Questions.pdfAssistant Engineer (Chemical) Interview Questions.pdf
Assistant Engineer (Chemical) Interview Questions.pdf
Seetal Daas
 
UNIT 4 LINEAR INTEGRATED CIRCUITS-DIGITAL ICS
UNIT 4 LINEAR INTEGRATED CIRCUITS-DIGITAL ICSUNIT 4 LINEAR INTEGRATED CIRCUITS-DIGITAL ICS
UNIT 4 LINEAR INTEGRATED CIRCUITS-DIGITAL ICS
vmspraneeth
 
smart pill dispenser is designed to improve medication adherence and safety f...
smart pill dispenser is designed to improve medication adherence and safety f...smart pill dispenser is designed to improve medication adherence and safety f...
smart pill dispenser is designed to improve medication adherence and safety f...
um7474492
 

Recently uploaded (20)

DESIGN AND MANUFACTURE OF CEILING BOARD USING SAWDUST AND WASTE CARTON MATERI...
DESIGN AND MANUFACTURE OF CEILING BOARD USING SAWDUST AND WASTE CARTON MATERI...DESIGN AND MANUFACTURE OF CEILING BOARD USING SAWDUST AND WASTE CARTON MATERI...
DESIGN AND MANUFACTURE OF CEILING BOARD USING SAWDUST AND WASTE CARTON MATERI...
 
Ericsson LTE Throughput Troubleshooting Techniques.ppt
Ericsson LTE Throughput Troubleshooting Techniques.pptEricsson LTE Throughput Troubleshooting Techniques.ppt
Ericsson LTE Throughput Troubleshooting Techniques.ppt
 
Introduction to Computer Networks & OSI MODEL.ppt
Introduction to Computer Networks & OSI MODEL.pptIntroduction to Computer Networks & OSI MODEL.ppt
Introduction to Computer Networks & OSI MODEL.ppt
 
Open Channel Flow: fluid flow with a free surface
Open Channel Flow: fluid flow with a free surfaceOpen Channel Flow: fluid flow with a free surface
Open Channel Flow: fluid flow with a free surface
 
4. Mosca vol I -Fisica-Tipler-5ta-Edicion-Vol-1.pdf
4. Mosca vol I -Fisica-Tipler-5ta-Edicion-Vol-1.pdf4. Mosca vol I -Fisica-Tipler-5ta-Edicion-Vol-1.pdf
4. Mosca vol I -Fisica-Tipler-5ta-Edicion-Vol-1.pdf
 
Transformers design and coooling methods
Transformers design and coooling methodsTransformers design and coooling methods
Transformers design and coooling methods
 
AI + Data Community Tour - Build the Next Generation of Apps with the Einstei...
AI + Data Community Tour - Build the Next Generation of Apps with the Einstei...AI + Data Community Tour - Build the Next Generation of Apps with the Einstei...
AI + Data Community Tour - Build the Next Generation of Apps with the Einstei...
 
P5 Working Drawings.pdf floor plan, civil
P5 Working Drawings.pdf floor plan, civilP5 Working Drawings.pdf floor plan, civil
P5 Working Drawings.pdf floor plan, civil
 
Zener Diode and its V-I Characteristics and Applications
Zener Diode and its V-I Characteristics and ApplicationsZener Diode and its V-I Characteristics and Applications
Zener Diode and its V-I Characteristics and Applications
 
一比一原版(CalArts毕业证)加利福尼亚艺术学院毕业证如何办理
一比一原版(CalArts毕业证)加利福尼亚艺术学院毕业证如何办理一比一原版(CalArts毕业证)加利福尼亚艺术学院毕业证如何办理
一比一原版(CalArts毕业证)加利福尼亚艺术学院毕业证如何办理
 
openshift technical overview - Flow of openshift containerisatoin
openshift technical overview - Flow of openshift containerisatoinopenshift technical overview - Flow of openshift containerisatoin
openshift technical overview - Flow of openshift containerisatoin
 
SCALING OF MOS CIRCUITS m .pptx
SCALING OF MOS CIRCUITS m                 .pptxSCALING OF MOS CIRCUITS m                 .pptx
SCALING OF MOS CIRCUITS m .pptx
 
5G Radio Network Througput Problem Analysis HCIA.pdf
5G Radio Network Througput Problem Analysis HCIA.pdf5G Radio Network Througput Problem Analysis HCIA.pdf
5G Radio Network Througput Problem Analysis HCIA.pdf
 
Levelised Cost of Hydrogen (LCOH) Calculator Manual
Levelised Cost of Hydrogen  (LCOH) Calculator ManualLevelised Cost of Hydrogen  (LCOH) Calculator Manual
Levelised Cost of Hydrogen (LCOH) Calculator Manual
 
OOPS_Lab_Manual - programs using C++ programming language
OOPS_Lab_Manual - programs using C++ programming languageOOPS_Lab_Manual - programs using C++ programming language
OOPS_Lab_Manual - programs using C++ programming language
 
A high-Speed Communication System is based on the Design of a Bi-NoC Router, ...
A high-Speed Communication System is based on the Design of a Bi-NoC Router, ...A high-Speed Communication System is based on the Design of a Bi-NoC Router, ...
A high-Speed Communication System is based on the Design of a Bi-NoC Router, ...
 
An Introduction to the Compiler Designss
An Introduction to the Compiler DesignssAn Introduction to the Compiler Designss
An Introduction to the Compiler Designss
 
Assistant Engineer (Chemical) Interview Questions.pdf
Assistant Engineer (Chemical) Interview Questions.pdfAssistant Engineer (Chemical) Interview Questions.pdf
Assistant Engineer (Chemical) Interview Questions.pdf
 
UNIT 4 LINEAR INTEGRATED CIRCUITS-DIGITAL ICS
UNIT 4 LINEAR INTEGRATED CIRCUITS-DIGITAL ICSUNIT 4 LINEAR INTEGRATED CIRCUITS-DIGITAL ICS
UNIT 4 LINEAR INTEGRATED CIRCUITS-DIGITAL ICS
 
smart pill dispenser is designed to improve medication adherence and safety f...
smart pill dispenser is designed to improve medication adherence and safety f...smart pill dispenser is designed to improve medication adherence and safety f...
smart pill dispenser is designed to improve medication adherence and safety f...
 

Design patterns: An Introduction to Software Design Patterns