qt design patterns

50
C++/Qt Design Patterns Ynon Perek [email protected] http://ynonperek.com Sunday, May 5, 13

Upload: ynon-perek

Post on 17-May-2015

2.770 views

Category:

Technology


2 download

DESCRIPTION

Design Patterns help us solve problems in tried and tested ways. Turns out they also help us understand our framework better, for framework developers also use patterns. In these slides you'll see how Design Patterns are implemented by Qt framework, to better both understand patterns and Qt

TRANSCRIPT

Page 1: Qt Design Patterns

C++/Qt Design Patterns

Ynon [email protected]://ynonperek.com

Sunday, May 5, 13

Page 2: Qt Design Patterns

Good Code Bad Code

Sunday, May 5, 13

Page 3: Qt Design Patterns

When OO Goes Wrong

Sunday, May 5, 13

Page 4: Qt Design Patterns

Java Input Validation

• In the past, Java Swing provided only JTextField for input texts

• JNumericTextField quickly appeared by the community

Sunday, May 5, 13

Page 5: Qt Design Patterns

Java Input Validation

Sunday, May 5, 13

Page 6: Qt Design Patterns

OO Fail

• Too many classes

• Hard to maintain

• Frustrated Developers

Sunday, May 5, 13

Page 7: Qt Design Patterns

Enter Design Patterns

• Reusable and tested solutions

• Sustainable for the long run

Sunday, May 5, 13

Page 8: Qt Design Patterns

Enter Design Patterns

• Started by Christopher Alexander in 1977

• And he was an Architect

Sunday, May 5, 13

Page 9: Qt Design Patterns

Example: Street Caffe“The street cafe provides a unique setting, special to cities: a place where people can sit lazily, legitimately, be on view, and watch the world go by...”

Sunday, May 5, 13

Page 10: Qt Design Patterns

Patterns Are Not

• Not a detailed solution

• Not a guide to help you build it

Sunday, May 5, 13

Page 11: Qt Design Patterns

Patterns Are

• Describing existing and working solutions

• Your job: Apply to your world

Sunday, May 5, 13

Page 12: Qt Design Patterns

Patterns In Software

• Defined by GoF

• Categorized:

• Creational

• Behavioral

• Structural

Sunday, May 5, 13

Page 13: Qt Design Patterns

Using Patterns

• Understand

• Memorize

• Apply Repeatedly

Sunday, May 5, 13

Page 14: Qt Design Patterns

Patterns In Qt

• Plenty !

• We’ll show 2:

• Strategy

• Proxy

Sunday, May 5, 13

Page 15: Qt Design Patterns

Strategy Pattern

Sunday, May 5, 13

Page 16: Qt Design Patterns

The Problem

• An input text provides different validation techniques

• Only one is used at any given time

Sunday, May 5, 13

Page 17: Qt Design Patterns

Approach #1

Sunday, May 5, 13

Page 18: Qt Design Patterns

Why Is It Bad

• Class Explosion

• Hard to reuse validation code

Sunday, May 5, 13

Page 19: Qt Design Patterns

The Better Way

Sunday, May 5, 13

Page 20: Qt Design Patterns

Why Is It Awesome

• Can reuse validators code

• Reduce class explosion

Sunday, May 5, 13

Page 21: Qt Design Patterns

The Pattern

• A validator encapsulates the validation algorithm

• The general pattern is called Strategy

Sunday, May 5, 13

Page 22: Qt Design Patterns

Intent

• Define a family of algorithms, encapsulate each one, and make them interchangeable.

Sunday, May 5, 13

Page 23: Qt Design Patterns

Motivation

• Client code is simpler if the algorithm is external to it

• No need to support an algorithm we don’t use

• We need to make it easy to add new algorithms

Sunday, May 5, 13

Page 24: Qt Design Patterns

Applicability

• Configure a class with one of many behaviors

• Use different variants of an algorithm

• Eliminate Switch blocks

Sunday, May 5, 13

Page 25: Qt Design Patterns

Structure

Sunday, May 5, 13

Page 26: Qt Design Patterns

Participants

• Strategy

• ConcreteStrategy

• Context

Sunday, May 5, 13

Page 27: Qt Design Patterns

Collaborations

• Strategy + Context = Algorithm

• Context forwards requests to Strategy

Sunday, May 5, 13

Page 28: Qt Design Patterns

Consequences• Families of related algorithms

• Eliminate switch blocks

• Allow different implementations

• Strategy and Context interface can get complicated

• Increased number of objects

Sunday, May 5, 13

Page 29: Qt Design Patterns

More Examples

• Layout management

• QAbstractNetworkCache

Sunday, May 5, 13

Page 30: Qt Design Patterns

Keep In Mind

• A Default Strategy will make everyone happy

• Allow clients to create their own strategies and pass as parameters

Sunday, May 5, 13

Page 31: Qt Design Patterns

Demo

Sunday, May 5, 13

Page 32: Qt Design Patterns

Q & A

Sunday, May 5, 13

Page 33: Qt Design Patterns

Proxy Pattern

Sunday, May 5, 13

Page 34: Qt Design Patterns

______________ < Let's do COW > -------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||

Sunday, May 5, 13

Page 35: Qt Design Patterns

Example Code

QString s1 = getText();QString s2 = getText();QString s3 = s1;

// "Hello World" is kept in memory only once

s1.append(" And now it's copied");

Sunday, May 5, 13

Page 36: Qt Design Patterns

The Proxy Way

• A QString is just a proxy to the data

• Implicitly shared

Sunday, May 5, 13

Page 37: Qt Design Patterns

class MyCow {public:

MyCow &operator=(const MyCow &other) { m_data = other.m_data; } void write() { m_data = new Data( m_data ); m_data.write(); }

private: Data *m_data;};

The Proxy Way

Sunday, May 5, 13

Page 38: Qt Design Patterns

Proxy Types

• Virtual Proxy

• Protection Proxy

• Remote Proxy

Sunday, May 5, 13

Page 39: Qt Design Patterns

Proxy: Pattern Details

Sunday, May 5, 13

Page 40: Qt Design Patterns

Intent

• Provide a surrogate or placeholder for another object

Sunday, May 5, 13

Page 41: Qt Design Patterns

Motivation

• Save time by lazy loading heavy resources

• Easy Cows

Sunday, May 5, 13

Page 42: Qt Design Patterns

Applicability

• Access remote resources

• Create resources on demand

• Enforce per-object access control

Sunday, May 5, 13

Page 43: Qt Design Patterns

Structure

Sunday, May 5, 13

Page 44: Qt Design Patterns

Participants

• Proxy

• Subject

• Real Subject

Sunday, May 5, 13

Page 45: Qt Design Patterns

Collaborations

• Proxy forwards requests to Real Subject

Sunday, May 5, 13

Page 46: Qt Design Patterns

Consequences

• Hide the fact that an object is remote

• Optimize load times (virtual proxy)

• Can use for Copy-On-Write

Sunday, May 5, 13

Page 47: Qt Design Patterns

Qt Cow

• Not really “By The Book”

• QString has a Data struct

• Does all work by itself

Sunday, May 5, 13

Page 48: Qt Design Patterns

Qt Patterns

• Patterns are part of any framework (Qt Included)

• Understanding patterns helps us better understand the framework

Sunday, May 5, 13

Page 49: Qt Design Patterns

Thanks For Listening !

Slides at: http://ynonperek.com

Questions / Comments:[email protected]

Stock Photos from:http://123rf.com

Sunday, May 5, 13

Page 50: Qt Design Patterns

Thanks For Listening

Sunday, May 5, 13