• Nie Znaleziono Wyników

Part I: Motivation and Concept

N/A
N/A
Protected

Academic year: 2021

Share "Part I: Motivation and Concept"

Copied!
39
0
0

Pełen tekst

(1)

Design Patterns

John Vlissides

IBM T.J. Watson Research

vlis@watson.ibm.com

Text c 1994-1999 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.

Diagrams c 1995 by Addison-Wesley Publishing Company. All rights reserved. Diagrams taken from Design Patterns: Elements of Reusable Object-Oriented Software may not be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior written permission of the publisher.

1

Overview

Part I: Motivation and Concept

 the issue

 what design patterns are

 what they're good for

 how we develop and categorize them

(2)

Overview (cont'd)

Part II: Application

 use patterns to design a document editor

 demonstrate usage and bene ts Part III: Wrap-Up

 observations, caveats, and conclusion

3

Part I: Motivation and Concept

OOD methods emphasize design notations

Fine for speci cation, documentation

But OOD is more than just drawing diagrams

Good draftsmen 6= good designers

Good OO designers rely on lots of experience

At least as important as syntax

Most powerful reuse is design reuse

Match problem to design experience

(3)

OO systems exploit recurring design structures that promote

 abstraction

 exibility

 modularity

 elegance

Therein lies valuable design knowledge

Problem: capturing, communicating, and applying this knowledge

5

A Design Pattern

 abstracts a recurring design structure

 comprises class and/or object

{

dependencies

{

structures

{

interactions

{

conventions

 names & speci es the design structure explicitly distills design experience

(4)

A Design Pattern has 4 basic parts:

1. Name 2. Problem 3. Solution

4. Consequences and trade-o s of application

Language- and implementation-independent A \micro-architecture"

Adjunct to existing methodologies (UML/P, Fusion, etc.)

7

Example: Observer

observers

a = 50%

b = 30%

c = 20%

subject

change notification requests, modifications

window

a b

c

window

a b c

x y z

30 10 50 30 20 60

80 10 10

window

a b c

(5)

Goals

Codify good design

Distill and disseminate experience Aid to novices and experts alike Abstract how to think about design

Give design structures explicit names

Common vocabulary Reduced complexity Greater expressiveness

Capture and preserve design information

Articulate design decisions succinctly Improve documentation

Facilitate restructuring/refactoring

Patterns are interrelated Additional exibility

9

Design Pattern Space

ClassObject

Creational Structural Behavioral

Factory Method Adapter (class)

Adapter (object) Bridge

Composite Decorator Flyweight Facade Proxy

Chain of Responsibility Command

Iterator Mediator Memento Observer State Strategy Visitor Interpreter Template Method

Purpose

Scope

Abstract Factory Builder

Prototype Singleton

(6)

Design Pattern Template ( rst half)

Name scope purpose

Intent

short description of pattern and its purpose

Also Known As

other names that people have for the pattern

Motivation

motivating scenario demonstrating pattern's use

Applicability

circumstances in which pattern applies

Structure

graphical representation of the pattern using modi ed OMT notation

Participants

participating classes and/or objects and their responsibilities

...

11

Design Pattern Template (second half)

...Collaborations

how participants cooperate to carry out their responsibilities

Consequences

the results of application, bene ts, liabilities

Implementation

implementation pitfalls, hints, or techniques, plus any language-dependent issues

Sample Code

sample implementations in C++ or Smalltalk

Known Uses

examples drawn from existing systems

Related Patterns

discussion of other patterns that relate to this one

(7)

Modi ed OMT Notation

one many AbstractClass

ConcreteSubclass2 ConcreteSubclass1

object reference aggregation creates

instanceVariable

ConcreteClass

implementation pseudo−code abstractOperation()

operation()

13

Observer object behavioral

Intent

de ne a one-to-many dependency between objects so that when one object changes state, all its dependents are noti ed and updated automatically

Applicability

 when an abstraction has two aspects, one dependent on the other

 when a change to one object requires changing others, and you don't knowhow many objects need to be changed

 when an object should notify other objects without making assumptionsabout who these objects are

Structure

observers

Subject Observer

attach(Observer) detach(Observer) notify()

update() for all o in observers {

o.update()

(8)

Observer (cont'd) object behavioral

Consequences

+ modularity: subject and observers may vary independently + extensibility: can de ne and add any number of observers

+ customizability: di erent observers provide di erent views of subject

, unexpected updates: observers don't know about each other

, update overhead: might need hints

Implementation

 subject-observer mapping

 dangling references

 avoiding observer-speci c update protocols: the push and pull models

 registering modi cations of interest explicitly

Known Uses

Smalltalk Model-View-Controller (MVC) InterViews (Subjects and Views)

Andrew (Data Objects and Views)

15

Bene ts

 design reuse

 uniform design vocabulary

 enhance understanding, restructuring

 basis for automation

(9)

Part II: Application

7 Design Problems:

 document structure

 formatting

 embellishment

 multiple look & feels

 multiple window systems

 user operations

 spelling checking &hyphenation

17

Document Structure

Goals:

 present document's visual aspects

 drawing, hit detection, alignment

 support physical structure (e.g., lines, columns) Constraints:

 treat text and graphics uniformly no distinction between one and many

(10)

Document Structure (cont'd)

Solution: Recursive composition

space image

G g

characters

composite (column)

composite (row)

19

Document Structure (cont'd)

Object structure

composite

space

G

composite

g

composite (column)

(row) (row)

(11)

Document Structure (cont'd)

Glyph

: base class for composable graphical objects Basic interface:

Task Operations

appearance void draw(Window)

hit detection boolean intersects(Coord, Coord)

structure void insert(Glyph) void remove(Glyph) Glyph child(int) Glyph parent()

Subclasses: Character, Image, Space, Row, Column

21

Document Structure (cont'd)

Glyph Hierarchy

Row Character Rectangle Polygon children

char c Coord l, b

Coord r, t

Column children

Glyph

...

draw(Window) intersects(Coord, Coord) insert(Glyph, int)

draw(...) draw(...) draw(...) draw(...) draw(...)

intersects(...) insert(...)

intersects(...) intersects(...) intersects(...) intersects(...) insert(...) Coord x[]

Coord y[]

(12)

Document Structure (cont'd)

Composite object structural

Intent

treat individual objects and multiple, recursively-composed objects uniformly

Applicability

objects must be composed recursively,

and there should be no distinction between individual and composed elements,

and objects in the structure can be treated uniformly

Structure

children Composite

Leaf

Component operation() add(Component) remove(Component) getChild(int)

operation() operation()

add(Component) remove(Component) getChild(int)

forall g in children g.operation();

23

Document Structure (cont'd)

Composite (cont'd) object structural

Consequences

+ uniformity: treat components the same regardless of complexity + extensibility: new Component subclasses work wherever old ones do

, overhead: might need prohibitive numbers of objects

Implementation

 do Components know their parents?

 uniform interface for both leaves and composites?

 don't allocate storage for children in Component base class

 responsibility for deleting children

Known Uses

ET++ VObjects

InterViews Glyphs, Styles

Unidraw Components, MacroCommands

(13)

Questions

What does the pattern let you vary?

Where have you applied this pattern in your designs?

What are the

 objects

 interfaces

 classes

 interactions etc.?

25

Formatting

Goals:

 automatic linebreaking, justi cation Constraints:

 support multiple linebreaking algorithms

 don't mix up with document structure

(14)

Formatting (cont'd)

Solution: Encapsulate linebreaking strategy

Compositor

 base class abstracts linebreaking algorithm

 subclasses for specialized algorithms, e.g.,

TeXCompositor SimpleCompositor

,

Composition

 composite glyph

 supplied a compositor and leaf glyphs

 creates row-column structure as directed by compositor

27

Formatting (cont'd)

New object structure

space

G g

composition

compositor

row row

column

glyphs generated composition−

(15)

Formatting (cont'd)

Strategy object behavioral

Intent

de ne a family of algorithms, encapsulate each one, and make them interchangeable to let clients and algorithms vary independently

Applicability

when an object should be con gurable with one of several algorithms,

and all algorithms can be encapsulated,

and one interface covers all encapsulations

Structure

Strategy

ConcreteStrategyA ConcreteStrategyB ConcreteStrategyC

Context (Composition) (Compositor)

contextInterface() algorithmInterface()

algorithmInterface() algorithmInterface() algorithmInterface()

29

Formatting (cont'd)

Strategy (cont'd) object behavioral

Consequences

+ greater exibility, reuse

+ can change algorithms dynamically

, strategy creation & communication overhead

, in exible Strategy interface

Implementation

 exchanging information between a Strategy and its context

 static strategy selection via templates

Known Uses

InterViews text formatting

RTL register allocation & scheduling strategies

(16)

Embellishment

Goals:

 add a frame around text composition

 add scrolling capability Constraints:

 embellishments should be reusable without subclassing

 should go unnoticed by clients

31

Embellishment (cont'd)

Solution: \Transparent" enclosure

MonoGlyph

 base class for glyphs having

one

child

 operations on MonoGlyph pass through to child MonoGlyph subclasses:



Frame

: adds a border of speci ed width



Scroller

: scrolls/clips child, adds scrollbars

(17)

Embellishment (cont'd)

Glyph

Frame

component MonoGlyph Character Row

Scroller

draw(Window) draw(Window) draw(Window)

draw(Window) draw(Window)

draw(Window)

void MonoGlyph.draw (Window w) { component.draw(w);

}

void Frame.draw (Window w) { super.draw(w);

drawFrame(w);

}

33

Embellishment (cont'd)

New object structure

composition

row row

column frame

scroller

(18)

Embellishment (cont'd)

Decorator object structural

Intent

augment objects with new responsibilities

Applicability

 when extension by subclassing is impractical

 for responsibilities that can be withdrawn

Structure

component ConcreteComponent Decorator

ConcreteDecoratorA

component−>Operation()

ConcreteDecoratorB

addedState

(MonoGlyph) Component (Glyph)

operation()

operation() operation()

operation() operation()

component.operation()

addedBehavior()

super.operation() addedBehavior()

35

Embellishment (cont'd)

Decorator (cont'd) object structural

Consequences

+ responsibilities can be added/removed at run-time + avoids subclass explosion

+ recursive nesting allows multiple responsibilities

, interface occlusion

, identity crisis

Implementation

 interface conformance

 use a lightweight, abstract base class for Decorator

 heavyweight base classes make Strategy more attractive

Known Uses

embellishment objects from most OO-GUI toolkits ParcPlace PassivityWrapper

InterViews DebuggingGlyph

(19)

Multiple Look & Feels

Goals:

 support multiple look and feel standards

 generic, Motif, PM, Macintosh, Windows, ...

 extensible for future standards Constraints:

 don't recode existing widgets or clients

 switch look and feel without recompiling

37

Multiple Look & Feels (cont'd)

Solution:

Abstract the process of creating objects Instead of

Scrollbar sb = new MotifScrollbar();

use

Scrollbar sb = factory.createScrollbar();

where factory is an instance of

MotifFactory

(20)

Multiple Look & Feels (cont'd)

Factory

interface

 de nes \manufacturing interface"

 subclasses produce speci c products

 subclass instance chosen at run-time

interface Factory {

Scrollbar createScrollbar();

Menu createMenu();

} ...

39

Multiple Look & Feels (cont'd)

Factory

MotifFactory PMFactory

PMScrollbar MotifScrollbar Glyph

Character createScrollbar()

createMenu()

createScrollbar() createMenu()

createScrollbar() createMenu()

draw(Window) draw(Window) Scrollbar

draw(Window) draw(Window)

draw(Window)

Scrollbar MotifFactory.createScrollBar () { return new MotifScrollbar();

}

Scrollbar PMFactory.createScrollBar () {

(21)

Multiple Look & Feels (cont'd)

Abstract Factory object creational

Intent

create families of related objects without specifying class names

Applicability

when clients cannot anticipate groups of classes to instantiate

Structure

AbstractFactory

ConcreteFactory1 ConcreteFactory2

AbstractProductA

AbstractProductB

Client

ProductA2 ProductA1

ProductB2 ProductB1 createProductA()

createProductB()

createProductA() createProductB()

createProductA() createProductB()

41

Multiple Look & Feels (cont'd)

Abstract Factory (cont'd) object creational

Consequences

+ exibility: removes type dependencies from clients + abstraction: hides product's composition

, hard to extend factory interface to create new products

Implementation

 parameterization as a way of controlling interface size

 con guration with Prototypes

Known Uses

InterViews Kits

ET++ WindowSystem

(22)

Multiple Window Systems

Goals:

 make composition appear in a window

 support multiple window systems Constraints:

 minimize window system dependencies

43

Multiple Window Systems (cont'd)

Solution: Encapsulate implementation dependencies

Window

 user-level window abstraction

 displays a glyph (structure)

 window system-independent

 task-related subclasses (e.g., IconWindow, PopupWindow)

(23)

Multiple Window Systems (cont'd)

Window interface

interface Window {

...void iconify(); // window-management void raise();

...void drawLine(...); // device-independent void drawText(...); // graphics interface } ...

45

Multiple Window Systems (cont'd)

Window uses a

WindowRep

 abstract implementation interface

 encapsulates window system dependencies

 window systems-speci c subclasses(e.g., XWindowRep, SunWindowRep)

An Abstract Factory can produce the right WindowRep!

(24)

Multiple Window Systems (cont'd)

Window

XWindowRep SunWindowRep WindowRep

rep

IconWindow PopupWindow

Character

contents Glyph

drawLine() drawText()

deviceText()

deviceText()

deviceText()

draw(Window)

draw(Window)

void Character.draw (Window w) { w.drawText(...);

}

void Window.drawText (...) { rep.deviceText(...);

}

void XWindowRep.deviceText (...) { XText(...);

}

47

Multiple Window Systems (cont'd)

New object structure

window

window

window_rep

composition

row row

column frame

renders

scroller

(25)

Multiple Window Systems (cont'd)

Bridge object structural

Intent

separate an abstraction from its implementation

Applicability

 when interface and implementation should vary independently

 require a uniform interface to interchangeable class hierarchies

Structure

Abstraction imp

Implementor

RefinedAbstraction Client

ConcreteImplementorA ConcreteImplementorB

(Window) (WindowRep)

operation() operationImp()

operationImp() operationImp()

imp.operationImp()

49

Multiple Window Systems (cont'd)

Bridge (cont'd) object structural

Consequences

+ abstraction and implementation are independent + implementations may vary dynamically

, one-size- ts-all Abstraction and Implementor interfaces

Implementation

 sharing Implementors

 creating the right implementor

Known Uses

ET++ Window/WindowPort

libg++ Set/fLinkedList,HashTableg

(26)

User Operations

Goals:

 support execution of user operations

 support unlimited-level undo Constraints:

 scattered operation implementations

 must store undo state

 not all operations are undoable

51

User Operations (cont'd)

Solution: Encapsulate the request for a service

Command

encapsulates

 an operation (execute())

 an inverse operation (unexecute())

 a operation for testing reversibility (boolean reversible())

 state for (un)doing the operation Command may

 implement the operations itself, or

 delegate them to other object(s)

(27)

User Operations (cont'd)

MenuItem command Command

CopyCommand PasteCommand ACommand Glyph

draw(Window)

clicked() execute()

execute() execute() execute()

void MenuItem.clicked () { command.execute();

}

void PasteCommand.execute () { // do the paste

}

void CopyCommand.execute () { // do the copy

}

53

User Operations (cont'd)

List of commands de nes execution history Undo:

cmd

unexecute() Redo:

cmd execute()

(28)

User Operations (cont'd)

Command object behavioral

Intent

encapsulate the request for a service

Applicability

 to parameterize objects with an action to perform

 to specify, queue, and execute requests at di erent times

 for a history of requests

 for multilevel undo/redo

Structure

state Command

target

ConcreteCommand Target

Client Invoker

execute()

execute() action()

target.action()

55

User Operations (cont'd)

Command (cont'd) object behavioral

Consequences

+ abstracts executor of a service + supports arbitrary-level undo-redo + composition yields macro-commands

, might result in lots of trivial command subclasses

Implementation

 copying a command before putting it on a history list

 handling hysteresis

 supporting transactions

Known Uses

InterViews Actions

MacApp, Unidraw Commands

(29)

Spelling Checking and Hyphenation

Goals:

 analyze text for spelling errors

 introduce potential hyphenation sites Constraints:

 support multiple algorithms

 don't mix up with document structure

57

Spelling Checking and Hyphenation (cont'd)

Solution: Encapsulate traversal

Iterator

 encapsulates a traversal algorithm

 uses Glyph's child enumeration operation

1

2

iterator

(30)

Spelling Checking and Hyphenation (cont'd)

Iterator object behavioral

Intent

access elements of an aggregate sequentially without exposing its representation

Applicability

 require multiple traversal algorithms over an aggregate

 require a uniform traversal interface over di erent aggregates

 when aggregate classes and traversal algorithm must vary independently

Structure

Client Iterator

ConcreteIterator Aggregate

ConcreteAggregate

return new ConcreteIterator(this) (Glyph) createIterator()

createIterator()

next() isDone() currentItem() first()

59

Spelling Checking and Hyphenation (cont'd)

Iterator (cont'd) object behavioral

Consequences

+ exibility: aggregate and traversal are independent + multiple iterators ! multiple traversal algorithms

, additional communication overhead between iterator and aggregate

Implementation

 internal versus external iterators

 violating the object structure's encapsulation

 robust iterators

Known Uses

Penpoint traversal driver/slave InterViews ListItr

Unidraw Iterator

(31)

Spelling Checking and Hyphenation (cont'd)

Visitor

 de nes action(s) at each step of traversal

 avoids wiring action(s) into Glyphs

 iterator calls glyph's accept(Visitor) at each node

 accept calls back on visitor

void Character.accept (Visitor v) { v.visit(this); } interface Visitor {

void visit(Character);

void visit(Rectangle);

void visit(Row);

// etc. for all relevant Glyph subclasses }

61

Spelling Checking and Hyphenation (cont'd)

SpellingCheckerVisitor

 gets character code from each character glyph

Can de ne getCharCode operation just on Character class

 checks words accumulated from character glyphs

 combine with

PreorderIterator

(32)

Spelling Checking and Hyphenation (cont'd)

Accumulating Words

1

2

iterator

4 3

"a"

visitor

"_"

"a_"

Spelling check on each non-alphabetic character

63

Spelling Checking and Hyphenation (cont'd)

Interaction Diagram

checks completed word

aSpellingChecker aCharacter ("a") anotherCharacter ("_")

accept(aSpellingChecker)

accept(aSpellingChecker)

visit(this)

getCharCode()

visit(this)

getCharCode()

(33)

Spelling Checking and Hyphenation (cont'd)

HyphenationVisitor

 gets character code from each character glyph

 examines words accumulated from character glyphs

 at potential hyphenation point, inserts a...

65

Spelling Checking and Hyphenation (cont'd)

Discretionary

glyph

 looks like a hyphen when it falls at the end of a line

 has no appearance otherwise

 Compositor considers its presence when determining linebreaks

"a" "l" discretionary "l" "o" "y"

(34)

Spelling Checking and Hyphenation (cont'd)

Visitor object behavioral

Intent

centralize operations on an object structure so that they can vary independently but still behave polymorphically

Applicability

 when classes de ne many unrelated operations

 class relationships of objects in the structure rarely change, but theoperations on them change often

 algorithms over the structure maintain state that's updated during traversal

Structure

ConcreteVisitor

ObjectStructure

ConcreteElement1 ConcreteElement2 Client

Visitor

Element

visitConcreteElement1(ConcreteElement1) visitConcreteElement2(ConcreteElement2)

visitConcreteElement1(ConcreteElement1) visitConcreteElement2(ConcreteElement2)

accept(Visitor)

accept(Visitor v) accept(Visitor v)

v.visitConcreteElement1(this) v.visitConcreteElement2(this)

67

Spelling Checking and Hyphenation (cont'd)

Visitor (cont'd) object behavioral

Consequences

+ exibility: visitor and object structure are independent + localized functionality

, circular dependency between Visitor and Element interfaces

, Visitor brittle to new ConcreteElement classes

Implementation

 double dispatch

 overloading visit operations

 catch-all operation

 general interface to elements of object structure

Known Uses

ProgramNodeEnumerator in Smalltalk-80 compiler IRIS Inventor scene rendering

(35)

Part III: Wrap-Up Observations

Applicable in all stages of the OO lifecycle

Design & reviews

Realization & documentation Reuse & refactoring

Permit design at a more abstract level

Treat many class/object interactions as a unit Often bene cial after initial design

Targets for class refactorings

Variation-oriented design

Consider what design aspects are variable Identify applicable pattern(s)

Vary patterns to evaluate tradeo s Repeat

69

But...

Resist branding everything a pattern

Articulate speci c bene ts Demonstrate wide applicability Find at least two existing examples

Don't apply them blindly

Added indirection ! increased complexity, cost

Pattern design even harder than OOD!

(36)

Conclusion

Design patterns promote

 design reuse

 uniform design vocabulary

 understanding, restructuring

 automation

 a new way of thinking about design

71

(Design) Pattern References

The Timeless Way of Building, Alexander; Oxford, 1979;

ISBN 0-19-502402-8

A Pattern Language, Alexander; Oxford, 1977; ISBN 0-19-501-919-9 Design Patterns, Gamma, et al.; Addison-Wesley, 1995;

ISBN 0-201-63361-2; CD version ISBN 0-201-63498-8

Pattern-Oriented Software Architecture, Buschmann, et al.; Wiley, 1996; ISBN 0-471-95869-7

Analysis Patterns, Fowler; Addison-Wesley, 1996; ISBN 0-201-89542-0 Smalltalk Best Practice Patterns, Beck; Prentice Hall, 1997;

ISBN 0-13-476904-X

The Design Patterns Smalltalk Companion, Alpert, et al.;

Addison-Wesley, 1998; ISBN 0-201-18462-1

(37)

More Books:

Pattern Languages of Program Design (Addison-Wesley) Vol. 1, Coplien, et al., eds.; 1995; ISBN 0-201-60734-4 Vol. 2, Vlissides, et al., eds.; 1996; ISBN 0-201-89527-7 Vol. 3, Martin, et al., eds.; 1998; ISBN 0-201-31011-2 Vol. 4, Harrison, et al., eds.; 2000; ISBN 0-201-43304-4

Concurrent Programming in Java, Lea; Addison-Wesley, 1997;

ISBN 0-201-69581-2

Applying UML and Patterns, Larman; Prentice Hall, 1997;

ISBN 0-13-748880-7

Pattern Hatching: Design Patterns Applied, Vlissides;

Addison-Wesley, 1998; ISBN 0-201-43293-5

Future Books:

The Pattern Almanac, Rising; Addison-Wesley, 2000;

ISBN 0-201-61567-3

73

Early Papers:

\Object-Oriented Patterns," P. Coad; Comm. of the ACM, 9/92

\Documenting Frameworks using Patterns," R. Johnson;

OOPSLA '92

\Design Patterns: Abstraction and Reuse of Object-Oriented Design," Gamma, Helm, Johnson, Vlissides, ECOOP '93.

Columns:

C++ Report, Dr. Dobbs Sourcebook, JOOP, ROAD

(38)

Conferences:

PLoP 2000: Pattern Languages of Programs

September 2000, Monticello, Illinois, USA

EuroPLoP 2000

July 2000, Kloster Irsee, Germany

ChiliPLoP 2000

March 2000, Wickenburg, Arizona, USA

KoalaPLoP 2000

May 2000, Melbourne, Australia

See http://hillside.net/patterns/conferences for up-to-the-minute information.

75

Mailing Lists:

patterns@cs.uiuc.edu: present and re ne patterns

patterns-discussion@cs.uiuc.edu: general discussion on patterns

gang-of-4-patterns@cs.uiuc.edu: discussion on Design Patterns

siemens-patterns@cs.uiuc.edu: discussion on Pattern-Oriented Software Architecture

ui-patterns@cs.uiuc.edu: discussion on user interface design patterns

business-patterns@cs.uiuc.edu: discussion on patterns for business processes

ipc-patterns@cs.uiuc.edu: discussion on patterns for distributed systems

See http://hillside.net/patterns/Lists.html for an up-to-date list.

(39)

URLs:

General

http://hillside.net/patterns

http://www.research.ibm.com/designpatterns

Conferences

http://hillside.net/patterns/conferences/

Books

http://hillside.net/patterns/books/

Mailing Lists

http://hillside.net/patterns/Lists.html

Portland Patterns Repository

http://c2.com/ppr/index.html

77

Cytaty

Powiązane dokumenty

Even if the pupil functions in an entirely' utilitarian way and intentionally studies only in order to get good grades, this self-serving goal would still put hint or her in a

produktów, ich stworzenie jest zadaniem konkretnych fabryk – najczęściej robi się to definiując factory method dla każdego produktu, co wymaga nowej fabryki dla każdej

O poczuciu podmiotowości można powiedzieć wówczas, gdy pracownik ma świadomość, że jego praca przy- czynia się do realizacji celów, z którymi się utożsamia i rozumie

Najlepszym tego przykładem mogą być Katowice, gdzie 29 stycznia 1945 roku żołnierze Armii Czerwonej podpalili centrum miasta, które nie zostało zniszczone podczas wyzwolenia

Wiele cen- nych informacji odkryją w niej również psycholodzy zajmujący się naukowo twórczością plastyczną, którzy poza zasugerowanymi już problemami, przede

Przy czym muzeum sku­ piło się na rekonstrukcji i translokacji tych obiektów kultury materialnej łęczyckiego, które ilustrują dzieje polskich wsi, co zarazem nie wyklucza

Using structural equation modelling, with gender and mathematics self-concept as predictors, and negative emotions, intrinsic motivation and worries about one’s math skills

To test the e ffect of roads and traffic on the occurrence and foraging habits of bats in forested landscapes in western Poland we compared 53 sites located along local asphalt roads