17-708 software product lines: concepts and implementation ...ckaestne/17708/07_frameworks.pdf ·...
TRANSCRIPT
![Page 1: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/1.jpg)
17-708 SOFTWARE PRODUCT LINES:
CONCEPTS AND IMPLEMENTATION
IMPLEMENTATION 2:
FRAMEWORKS, COMPONENTS
CHRISTIAN KAESTNER
CARNEGIE MELLON UNIVERSITY
INSTITUTE FOR SOFTWARE RESEARCH
1
![Page 2: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/2.jpg)
READING
ASSIGNMENT OCT 7
Van Ommering, Rob. "Building product populations with
software components." Proceedings of the 24th international
conference on Software engineering. ACM, 2002.
Bosch, Jan. "From software product lines to software
ecosystems." Proceedings of the 13th International Software
Product Line Conference. 2009.
![Page 3: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/3.jpg)
LEARNING GOALS
Understand how load-time variability can be abstracted using design patterns and framework concepts; explain the role and limitations of inheritance
Choose between components and blackbox/whitebox frameworks and explain the tradeoffs
Understand the challenges of frameworks and how to mitigate them
Understand the expectations and promises of the best-of-breed approach and the practical problems
Compare frameworks and components against other implementation strategies
Explain the difference between frameworks and platforms/ecosystems
Explain modularity and relate modularity concepts against the discussed implementation strategies
![Page 4: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/4.jpg)
MODULARITY
![Page 5: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/5.jpg)
Feature Modularity
![Page 6: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/6.jpg)
MODULARITY
Encapsulation (information hiding): Hiding implementation details behind an interface
Cohesion: Grouping related program constructs in one addressable unit (e.g. package, component)
Enables modular reasoning
Reduces complexity (divide and conquer)
Reuse and compose pieces
6
![Page 7: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/7.jpg)
ENCAPSULATION
7
public class ArrayList<E> { public void add(int index, E element) { if (index > size || index < 0) throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); ensureCapacity(size+1); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = element; size++; } public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null) return i; } else { for (int i = 0; i < size; i++) if (o.equals(elementData[i])) return i; } return -1; } ……. }
public interface List<E> { void add(int index, E element); int indexOf(Object o); …. }
![Page 8: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/8.jpg)
COHEASION AND
COUPLING
8
![Page 9: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/9.jpg)
DECOMPOSITION AND
COMPOSITION
9
![Page 10: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/10.jpg)
class Graph { Vector nv = new Vector(); Vector ev = new Vector(); Edge add(Node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); if (Conf.WEIGHTED) e.weight = new Weight(); return e; } Edge add(Node n, Node m, Weight w) if (!Conf.WEIGHTED) throw RuntimeException(); Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); e.weight = w; return e; } void print() { for(int i = 0; i < ev.size(); i++) { ((Edge)ev.get(i)).print(); } } }
class Node { int id = 0; Color color = new Color(); void print() { if (Conf.COLORED) Color.setDisplayColor(color); System.out.print(id); } }
Code Scattering
class Edge { Node a, b; Color color = new Color(); Weight weight; Edge(Node _a, Node _b) { a = _a; b = _b; } void print() { if (Conf. COLORED) Color.setDisplayColor(color); a.print(); b.print(); if (!Conf.WEIGHTED) weight.print(); } }
class Color { static void setDisplayColor(Color c) { ... } } class Weight { void print() { ... } }
10
![Page 11: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/11.jpg)
class Graph { Vector nv = new Vector(); Vector ev = new Vector(); Edge add(Node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); if (Conf.WEIGHTED) e.weight = new Weight(); return e; } Edge add(Node n, Node m, Weight w) if (!Conf.WEIGHTED) throw RuntimeException(); Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); e.weight = w; return e; } void print() { for(int i = 0; i < ev.size(); i++) { ((Edge)ev.get(i)).print(); } } }
Code Tangling
class Edge { Node a, b; Color color = new Color(); Weight weight; Edge(Node _a, Node _b) { a = _a; b = _b; } void print() { if (Conf. COLORED) Color.setDisplayColor(color); a.print(); b.print(); if (!Conf.WEIGHTED) weight.print(); } }
class Node { int id = 0; Color color = new Color(); void print() { if (Conf.COLORED) Color.setDisplayColor(color); System.out.print(id); } }
class Color { static void setDisplayColor(Color c) { ... } } class Weight { void print() { ... } }
11
![Page 12: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/12.jpg)
class Graph { Vector nv = new Vector(); Vector ev = new Vector(); Edge add(Node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); if (Conf.WEIGHTED) e.weight = new Weight(); return e; } Edge add(Node n, Node m, Weight w) if (!Conf.WEIGHTED) throw RuntimeException(); Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); e.weight = w; return e; } void print() { for(int i = 0; i < ev.size(); i++) { ((Edge)ev.get(i)).print(); } } }
Code Replication class Edge { Node a, b; Color color = new Color(); Weight weight; Edge(Node _a, Node _b) { a = _a; b = _b; } void print() { if (Conf. COLORED) Color.setDisplayColor(color); a.print(); b.print(); if (!Conf.WEIGHTED) weight.print(); } }
class Node { int id = 0; Color color = new Color(); void print() { if (Conf.COLORED) Color.setDisplayColor(color); System.out.print(id); } }
class Color { static void setDisplayColor(Color c) { ... } } class Weight { void print() { ... } }
12
![Page 13: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/13.jpg)
ABSTRACTING
FROM
RUN-TIME
PARAMETERS
![Page 14: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/14.jpg)
OBSERVER PATTERN
14
VIEW
A = 50% B = 30% C = 20%
Obser
vers
Subje
ct
[Quelle: Meyer/Bay]
![Page 15: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/15.jpg)
15
public abstract class BubbleSorter{
protected int length = 0;
protected void sort() {
if (length <= 1) return;
for (int nextToLast= length-2;
nextToLast>= 0; nextToLast--)
for (int index = 0;
index <= nextToLast; index++)
if (outOfOrder(index)) swap(index);
}
protected abstract void swap(int index);
protected abstract boolean outOfOrder(int index);
}
TEMPLATE METHOD
PATTERN
![Page 16: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/16.jpg)
STRATEGY PATTERN
16
![Page 17: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/17.jpg)
REUSE WITH
INHERITANCE
![Page 18: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/18.jpg)
Stack
SecureStack
SynchronizedStack
UndoStack
Stack
SecureStack SynchronizedStackUndoStack
18
![Page 19: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/19.jpg)
19
Stack
SecureStack
SynchronizedUndoSecureStack
UndoStack
UndoSecureStackSynchronizedUndoStack
SynchronizedStack
![Page 20: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/20.jpg)
DIAMANT PROBLEM
What happens:
new LockedUndoStack().pop()
+push()
+pop()
+size()
-values
Stack
+push()
+pop()
+size()
+lock()
+unlock()
LockedStack
+push()
+pop()
+undo()
-log
UndoStack
LockedUndoStack
“Multiple inheritance is good, but there
is no good way to do it.”
A. SYNDER
20
![Page 21: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/21.jpg)
DELEGATION
21
class LockedStack implements IStack {
final IStack _delegate;
public LockedStack(IStack delegate) {
this._delegate = delegate;
}
private void lock() { /* ... /* }
private void unlock() { /* ... /* }
public void push(Object o) {
lock();
_delegate.push(o);
unlock();
}
public Object pop() {
lock();
Object result = _delegate.pop();
unlock();
return result;
}
public int size() {
return _delegate.size();
}
}
class UndoStack implements IStack {
final IStack _delegate;
public UndoStack(IStack delegate) {
this._delegate = delegate;
}
public void undo() { /* ... /* }
public void push(Object o) {
remember();
_delegate.push(o);
}
public Object pop() {
remember();
return _delegate.pop();
}
public int size() {
return _delegate.size();
}
}
Main:
IStack stack = new UndoStack(
new LockedStack(new Stack()));
![Page 22: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/22.jpg)
DECORATOR PATTERN
22
+push()
+pop()
+size()
«interface»
IStack
+push()
+pop()
+size()
-values
Stack
+push()
+pop()
+size()
-delegate
StackDecorator
+push()
+pop()
+size()
+lock()
+unlock()
LockedStack
+push()
+pop()
+undo()
-log
UndoStack
+push()
+pop()
+encrypt()
+decrypt()
-keyphrase
SecureStack
1
1
![Page 23: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/23.jpg)
23
![Page 24: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/24.jpg)
DISCUSSION
TRADEOFFS
Modularity?
Traceability?
Effort?
Granularity?
Uniformity?
![Page 25: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/25.jpg)
FRAMEWORKS
![Page 26: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/26.jpg)
FRAMEWORK
A framework is a set of classes that
embodies an abstract design for solutions
to a family of related problems, and
supports reuse at a larger granularity
than classes. A framework is open for
extension at explicit hot spots.
(Johnson and Foote 1988)
![Page 27: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/27.jpg)
TERMINOLOGY:
LIBRARIES
Library: A set of classes and methods that provide reusable
functionality
Client calls library to do some task
Client controls
• System structure
• Control flow
The library executes a function and returns data
Library
I/O Collections
Swing Math Graphs
![Page 28: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/28.jpg)
TERMINOLOGY:
FRAMEWORKS
Framework: Reusable skeleton code that can be customized into
an application
Framework controls
• Program structure
• Control flow
Framework calls back into client code
• The Hollywood principle: “Don’t call us. We’ll call you.”
Framework
Swing Eclipse
Spring Applet
Firefox
public MyWidget extends JContainer {
ublic MyWidget(int param) {/ setup
internals, without rendering
}
/ render component on first view and
resizing
protected void
paintComponent(Graphics g) {
// draw a red box on his
componentDimension d = getSize();
g.setColor(Color.red);
g.drawRect(0, 0, d.getWidth(),
d.getHeight()); }
}
your code
![Page 29: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/29.jpg)
<?php
class WebPage {
function getCSSFiles();
function getModuleTitle();
function hasAccess(User u);
function printPage();
}
?>
<?php
class ConfigPage extends WebPage {
function getCSSFiles() {…}
function getModuleTitle() {
return “Configuration”;
}
function hasAccess(User u) {
return user.isAdmin();
}
function printPage() {
print “<form><div>…”;
}
}
?>
![Page 30: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/30.jpg)
R ich C lie n t P la tfo r m
O S G i
S W T
C o r e R u n tim e
JF a ceH e lp
W o r kb e n ch
P la tfo r m
An
t
IDE
Ch
ea
t S
he
ets
Se
arc
h
De
bu
g
Te
am
He
lp
Up
da
te
Vie
ws
Re
so
urc
es
Co
ns
ole
Ed
ito
rs
Fo
rm
s
Te
xt
Ed
ito
rs
Co
mp
are
W T P
J2
EE
We
b
S A P in st W o r kb e n ch
Co
ntr
ol
Ite
ms
Me
ss
ag
es
Re
so
urc
ep
oo
l
Dia
log
s
Me
ta-D
ialo
gs
Pre
re
qu
isit
e C
.
Co
mp
on
en
t
Ta
ble
Sc
rip
t
JD TB
uil
d
De
bu
g
Ed
it
JU
nit
Re
fac
tor
La
un
ch
![Page 31: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/31.jpg)
A CALCULATOR
EXAMPLE (WITHOUT A
FRAMEWORK)
public class Calc extends JFrame {
private JTextField textfield;
public static void main(String[] args) { new Calc().setVisible(true); }
public Calc() { init(); }
protected void init() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
JButton button = new JButton();
button.setText("calculate");
contentPane.add(button, BorderLayout.EAST);
textfield = new JTextField("");
textfield.setText("10 / 2 + 6");
textfield.setPreferredSize(new Dimension(200, 20));
contentPane.add(textfield, BorderLayout.WEST);
button.addActionListener(/* calculate some stuff */);
this.setContentPane(contentPane);
this.pack();
this.setLocation(100, 100);
this.setTitle("My Great Calculator");
// impl. for closing the window
}
}
![Page 32: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/32.jpg)
A SIMPLE EXAMPLE
FRAMEWORK
Consider a family of programs consisting of buttons and text
fields only:
What source code might be shared?
32
![Page 33: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/33.jpg)
A SIMPLE EXAMPLE
FRAMEWORK
Consider a family of programs consisting of buttons and text
fields only:
What source code might be shared?
• Main method
• Initialization of GUI
• Layout
• Closing the window
• …
33
![Page 34: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/34.jpg)
A CALCULATOR
EXAMPLE public class Calc extends JFrame {
private JTextField textfield;
public static void main(String[] args) { new Calc().setVisible(true); }
public Calc() { init(); }
protected void init() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
JButton button = new JButton();
button.setText("calculate");
contentPane.add(button, BorderLayout.EAST);
textfield = new JTextField("");
textfield.setText("10 / 2 + 6");
textfield.setPreferredSize(new Dimension(200, 20));
contentPane.add(textfield, BorderLayout.WEST);
button.addActionListener(/* calculate some stuff */);
this.setContentPane(contentPane);
this.pack();
this.setLocation(100, 100);
this.setTitle("My Great Calculator");
// impl. for closing the window
}
}
![Page 35: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/35.jpg)
A SIMPLE EXAMPLE
FRAMEWORK public abstract class Application extends JFrame {
protected abstract String getApplicationTitle();
protected abstract String getButtonText();
protected String getInititalText() {return "";}
protected void buttonClicked() { }
private JTextField textfield;
public Application() { init(); }
protected void init() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
JButton button = new JButton();
button.setText(getButtonText());
contentPane.add(button, BorderLayout.EAST);
textfield = new JTextField("");
textfield.setText(getInititalText());
textfield.setPreferredSize(new Dimension(200, 20));
contentPane.add(textfield, BorderLayout.WEST);
button.addActionListener(/* … buttonClicked(); … */);
this.setContentPane(contentPane);
this.pack();
this.setLocation(100, 100);
this.setTitle(getApplicationTitle());
// impl. for closing the window }
protected String getInput() { return textfield.getText();}
}
![Page 36: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/36.jpg)
USING THE SIMPLE
EXAMPLE FRAMEWORK public abstract class Application extends JFrame {
protected abstract String getApplicationTitle();
protected abstract String getButtonText();
protected String getInititalText() {return "";}
protected void buttonClicked() { }
private JTextField textfield;
public Application() { init(); }
protected void init() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
JButton button = new JButton();
button.setText(getButtonText());
contentPane.add(button, BorderLayout.EAST);
textfield = new JTextField("");
textfield.setText(getInititalText());
textfield.setPreferredSize(new Dimension(200, 20));
contentPane.add(textfield, BorderLayout.WEST);
button.addActionListener(/* … buttonClicked(); … */);
this.setContentPane(contentPane);
this.pack();
this.setLocation(100, 100);
this.setTitle(getApplicationTitle());
// impl. for closing the window }
protected String getInput() { return textfield.getText();}
}
public class Calculator extends Application {
protected String getButtonText() { return "calculate"; }
protected String getInititalText() { return "(10 – 3) * 6"; }
protected void buttonClicked() {
JOptionPane.showMessageDialog(this, "The result of "+getInput()+
" is "+calculate(getInput())); }
protected String getApplicationTitle() { return "My Great Calculator"; }
public static void main(String[] args) {
new Calculator().setVisible(true);
}
}
![Page 37: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/37.jpg)
USING THE SIMPLE EXAMPLE
FRAMEWORK (AGAIN)
public abstract class Application extends JFrame {
protected abstract String getApplicationTitle();
protected abstract String getButtonText();
protected String getInititalText() {return "";}
protected void buttonClicked() { }
private JTextField textfield;
public Application() { init(); }
protected void init() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
JButton button = new JButton();
button.setText(getButtonText());
contentPane.add(button, BorderLayout.EAST);
textfield = new JTextField("");
textfield.setText(getInititalText());
textfield.setPreferredSize(new Dimension(200, 20));
contentPane.add(textfield, BorderLayout.WEST);
button.addActionListener(/* … buttonClicked(); … */);
this.setContentPane(contentPane);
this.pack();
this.setLocation(100, 100);
this.setTitle(getApplicationTitle());
// impl. for closing the window }
protected String getInput() { return textfield.getText();}
}
public class Calculator extends Application {
protected String getButtonText() { return "calculate"; }
protected String getInititalText() { return "(10 – 3) * 6"; }
protected void buttonClicked() {
JOptionPane.showMessageDialog(this, "The result of "+getInput()+
" is "+calculate(getInput())); }
protected String getApplicationTitle() { return "My Great Calculator"; }
public static void main(String[] args) {
new Calculator().setVisible(true);
}
}
public class Ping extends Application {
protected String getButtonText() { return "ping"; }
protected String getInititalText() { return "127.0.0.1"; }
protected void buttonClicked() { /* … */ }
protected String getApplicationTitle() { return "Ping Anything"; }
public static void main(String[] args) {
new Ping().setVisible(true);
}
}
![Page 38: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/38.jpg)
public class Application extends JFrame {
private JTextField textfield;
private Plugin plugin;
public Application(Plugin p) { this.plugin=p; p.setApplication(this); init(); }
protected void init() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
JButton button = new JButton();
if (plugin != null)
button.setText(plugin.getButtonText());
else
button.setText("ok");
contentPane.add(button, BorderLayout.EAST);
textfield = new JTextField("");
if (plugin != null)
textfield.setText(plugin.getInititalText());
textfield.setPreferredSize(new Dimension(200, 20));
contentPane.add(textfield, BorderLayout.WEST);
if (plugin != null)
button.addActionListener(/* … plugin.buttonClicked();… */);
this.setContentPane(contentPane);
…
}
public String getInput() { return textfield.getText();}
}
AN EXAMPLE BLACKBOX
FRAMEWORK
public interface Plugin {
String getApplicationTitle();
String getButtonText();
String getInititalText();
void buttonClicked() ;
void setApplication(Application app);
}
![Page 39: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/39.jpg)
public class Application extends JFrame {
private JTextField textfield;
private Plugin plugin;
public Application(Plugin p) { this.plugin=p; p.setApplication(this); init(); }
protected void init() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
JButton button = new JButton();
if (plugin != null)
button.setText(plugin.getButtonText());
else
button.setText("ok");
contentPane.add(button, BorderLayout.EAST);
textfield = new JTextField("");
if (plugin != null)
textfield.setText(plugin.getInititalText());
textfield.setPreferredSize(new Dimension(200, 20));
contentPane.add(textfield, BorderLayout.WEST);
if (plugin != null)
button.addActionListener(/* … plugin.buttonClicked();… */);
this.setContentPane(contentPane);
…
}
public String getInput() { return textfield.getText();}
}
AN EXAMPLE BLACKBOX
FRAMEWORK
public class CalcPlugin implements Plugin {
private Application application;
public void setApplication(Application app) { this.application = app; }
public String getButtonText() { return "calculate"; }
public String getInititalText() { return "10 / 2 + 6"; }
public void buttonClicked() {
JOptionPane.showMessageDialog(null, "The result of "
+ application.getInput() + " is "
+ calculate(application.getText())); }
public String getApplicationTitle() { return "My Great Calculator"; }
}
public interface Plugin {
String getApplicationTitle();
String getButtonText();
String getInititalText();
void buttonClicked() ;
void setApplication(Application app);
}
class Calculator {
public static void main(String[] args) {
new Application(new CalcPlugin()).setVisible(true);
}
}
![Page 40: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/40.jpg)
public class Application extends JFrame implements InputProvider {
private JTextField textfield;
private Plugin plugin;
public Application(Plugin p) { this.plugin=p; p.setApplication(this); init(); }
protected void init() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
JButton button = new JButton();
if (plugin != null)
button.setText(plugin.getButtonText());
else
button.setText("ok");
contentPane.add(button, BorderLayout.EAST);
textfield = new JTextField("");
if (plugin != null)
textfield.setText(plugin.getInititalText());
textfield.setPreferredSize(new Dimension(200, 20));
contentPane.add(textfield, BorderLayout.WEST);
if (plugin != null)
button.addActionListener(/* … plugin.buttonClicked();… */);
this.setContentPane(contentPane);
…
}
public String getInput() { return textfield.getText();}
}
AN ASIDE: PLUGINS
COULD BE REUSABLE,
TOO…
public class CalcPlugin implements Plugin {
private InputProvider application;
public void setApplication(InputProvider app) { this.application = app; }
public String getButtonText() { return "calculate"; }
public String getInititalText() { return "10 / 2 + 6"; }
public void buttonClicked() {
JOptionPane.showMessageDialog(null, "The result of "
+ application.getInput() + " is "
+ calculate(application.getInput())); }
public String getApplicationTitle() { return "My Great Calculator"; }
}
public interface Plugin {
String getApplicationTitle();
String getButtonText();
String getInititalText();
void buttonClicked() ;
void setApplication(InputProvider app);
}
class CalcStarter { public static void main(String[] args) {
new Application(new CalcPlugin()).setVisible(true); }}
public interface InputProvider {
String getInput();
}
![Page 41: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/41.jpg)
WHITEBOX VS.
BLACKBOX FRAMEWORK
SUMMARY
Whitebox frameworks use subclassing
• Allows to extend every nonprivate method
• Need to understand implementation of superclass
• Only one extension at a time
• Compiled together
• Often so-called developer frameworks
Blackbox frameworks use composition
• Allows to extend only functionality exposed in interface
• Only need to understand the interface
• Multiple plugins
• Often provides more modularity
• Separate deployment possible (.jar, .dll, …)
• Often so-called end-user frameworks, platforms
![Page 42: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/42.jpg)
public class Application extends JFrame {
private JTextField textfield;
private Plugin plugin;
public Application(Plugin p) { this.plugin=p; p.setApplication(this); init(); }
protected void init() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
JButton button = new JButton();
if (plugin != null)
button.setText(plugin.getButtonText());
else
button.setText("ok");
contentPane.add(button, BorderLayout.EAST);
textfield = new JTextField("");
if (plugin != null)
textfield.setText(plugin.getInititalText());
textfield.setPreferredSize(new Dimension(200, 20));
contentPane.add(textfield, BorderLayout.WEST);
if (plugin != null)
button.addActionListener(/* … plugin.buttonClicked();… */);
this.setContentPane(contentPane);
…
}
public String getInput() { return textfield.getText();}
}
THE COST OF CHANGING
A FRAMEWORK
public class CalcPlugin implements Plugin {
private Application application;
public void setApplication(Application app) { this.application = app; }
public String getButtonText() { return "calculate"; }
public String getInititalText() { return "10 / 2 + 6"; }
public void buttonClicked() {
JOptionPane.showMessageDialog(null, "The result of "
+ application.getInput() + " is "
+ calculate(application.getText())); }
public String getApplicationTitle() { return "My Great Calculator"; }
}
public interface Plugin {
String getApplicationTitle();
String getButtonText();
String getInititalText();
void buttonClicked() ;
void setApplication(Application app);
}
class CalcStarter { public static void main(String[] args) {
new Application(new CalcPlugin()).setVisible(true); }}
![Page 43: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/43.jpg)
FRAMEWORK DESIGN
CONSIDERATIONS
Once designed there is little opportunity for change
Key decision: Separating common parts from variable parts
• Identify hot spots vs. cold spots
Possible problems:
• Too few extension points: Limited to a narrow class of users
• Too many extension points: Hard to learn, slow
• Too generic: Little reuse value
The golden rule of framework design:
• Writing a plugin/extension should NOT require modifying the
framework source code
![Page 44: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/44.jpg)
44
![Page 45: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/45.jpg)
DISCUSSION
TRADEOFFS
Binding time?
Modularity?
Traceability?
Effort?
Granularity?
Uniformity?
![Page 46: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/46.jpg)
PLATFORM/SOFTWARE
ECOSYSTEM
Hardware/software environment (frameworks,
libraries) for building applications
Ecosystem: Interaction of multiple parties on a
platform, third-party contributions, co-
dependencies, …
• Typically describes more business-related and social aspects
![Page 47: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/47.jpg)
COMPONENTS
![Page 48: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/48.jpg)
COMPONENT
A software component is a unit of
composition with contractually specified
interfaces and explicit context
dependencies only. A software
component can be deployed
independently and is subject to
composition by third parties.
(Szyperski 1997)
![Page 49: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/49.jpg)
THE USE VS. REUSE
DILEMMA
Large rich components are very useful, but rarely fit a
specific need
Small or extremely generic components often fit a specific
need, but provide little benefit
“maximizing reuse minimizes use”
C. Szyperski
![Page 50: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/50.jpg)
COMPONENT
MARKETS
Best of breed
Business model
Components vs classes
JavaEE, CORBA, COM+/DCOM, OSGi
Service-oriented architectures
![Page 51: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/51.jpg)
COMPONENTS IN
PRODUCT LINES
Composition from components
"glue code" to compose
Composition per application (development with reuse)
![Page 52: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/52.jpg)
KOALA (PHILIPS)
component CTvPlatform
{
provides IProgram pprg;
requires II2c slow, fast;
contains
component CFrontEnd cfre;
component CTunerDriver ctun;
connects
pprg = cfre.pprg;
cfre.rtun = ctun.ptun;
ctun.ri2c = fast;
}
Van Ommering, R., Van Der Linden, F., Kramer, J., & Magee, J.
(2000). The Koala component model for consumer electronics
software. Computer, 33(3), 78-85.
![Page 53: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/53.jpg)
53
![Page 54: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/54.jpg)
DISCUSSION
TRADEOFFS
Modularity?
Traceability?
Effort?
Granularity?
Uniformity?
![Page 55: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/55.jpg)
PREPLANNING
PROBLEM
![Page 56: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/56.jpg)
PREPLANNING
PROBLEM
Need to plan extension points before building extensions
(Noninvasive changes)
Opportunity costs during evolution?
![Page 57: 17-708 Software Product Lines: Concepts and Implementation ...ckaestne/17708/07_frameworks.pdf · conference on Software engineering. ACM, 2002. Bosch, Jan. "From software product](https://reader034.vdocuments.us/reader034/viewer/2022043022/5f3e41c87cee196c511a1c7f/html5/thumbnails/57.jpg)
FURTHER READING
Gamma, Erich; Richard Helm, Ralph Johnson, and John Vlissides (1995). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 0-201-63361-2. Bertrand Meyer, Object-Oriented Software Construction, Prentice Hall, 1997 – Chapters 3, 4
Van Ommering, Rob. "Building product populations with software components." Proceedings of the 24th international conference on Software engineering. ACM, 2002.
Bosch, Jan. "From software product lines to software ecosystems." Proceedings of the 13th International Software Product Line Conference. 2009.