Question 5 [15]
Consider the following classes, illustrating the Strategy
design pattern:
import java.awt.*;
abstract class Text {
protected TextApplet tA;
protected Text(TextApplet tApplet) {
tA = tApplet;
}
abstract public void draw(Graphics g);
}
class PlainText extends Text {
protected PlainText(TextApplet tApplet) {
super(tApplet);
}
public void draw(Graphics g) {
g.setColor(tA.getColor());
g.setFont(new Font("Sans-serif", Font.PLAIN, 12));
g.drawString(tA.getText(), 20, 20);
}
}
class CodeText extends Text {
protected CodeText(TextApplet tApplet) {
super(tApplet);
}
public void draw(Graphics g) {
g.setColor(tA.getColor());
g.setFont(new Font("Monospaced", Font.PLAIN, 12));
g.drawString(tA.getText(), 20, 20);
}
}
public class TextApplet extends java.applet.Applet {
protected Text text;
protected String textVal;
protected Color color;
public String getText() {
return textVal;
}
public Color getColor() {
return color;
}
public void init() {
textVal = getParameter("text");
String textStyle = getParameter("style");
String textColor = getParameter("color");
if (textStyle == "code")
text = new CodeText(this);
else
text = new PlainText(this);
if (textColor == "red")
color = Color.RED;
else if (textColor == "blue")
color = Color.BLUE;
else
color = Color.BLACK;
}
public void paint(Graphics g) {
text.draw(g);
10
}
}
The Text class is more complicated than it should be (there
is too much coupling between the
Text and TextApplet classes). By getting rid of the
reference to a TextApplet object in the
Text class and setting the colour in the paint() method,
one could turn the Text class into an
interface and simplify the strategy classes considerably.
5.1 Rewrite the Text and PlainText classes to do what is
described above. (6)
5.2 Explain the consequent changes that are necessary to
the TextApplet class. (4)
5.3 Write an additional strategy class called FancyText (to
go with your simplified
strategy classes) to allow fancy text to be displayed for
the value "fancy" provided
for the style parameter. It should use the font Font
("Serif", Font.ITALIC, 12).
(3)
5.4 Explain what changes are necessary to the TextApplet
class for this. (2)
21
To identify IDL language what mapping mechanism is used?
237
Question 7 [8]
Consider the following class and answer the questions below
it:
public class StackWithGuard extends Stack {
public StackWithGuard(int size) {
super(size);
}
synchronized public boolean isEmpty() {
return super.isEmpty();
}
synchronized public boolean isFull() {
return super.isFull();
}
synchronized public int getSize() {
return super.getSize();
}
synchronized public void push(Object obj) {
try {
while (isFull()) {
wait();
}
} catch (InterruptedException e) {}
super.push(obj);
COS2144/102
11
notify();
}
synchronized public Object pop() {
try {
while (isEmpty()) {
wait();
}
} catch (InterruptedException e) {}
Object result = super.pop();
notify();
return result;
}
public static void main(String args[]) {
StackWithGuard stack = new StackWithGuard(5);
new Producer(stack, 15).start();
new Consumer(stack, 15).start();
}
}
Note: The Stack class is provided in the Appendix.
Note also: The following questions all refer to the pop()
method of the StackWithGuard
class given above.
7.1 What does the synchronized keyword ensure for this
method? (2)
7.2 Why is a while loop used to test whether the stack is
empty? In other words, why
wouldn't the following if statement be sufficient?
if (isEmpty()) {
wait();
}
(2)
7.3 Why is the result of popping (provided by the inherited
pop() method) stored in a
temporary variable? In other words, why wouldn't the
following statement be
sufficient?
return super.pop();
(2)
7.4 Why is the while loop placed in a try-catch structure?
(2)
Appendix
The LinkedQueue class:
public class LinkedQueue implements Queue {
private Node first, last;
private int count;
public LinkedQueue() {
first = last = null;
count =0;
}
public int size() {
return count;
}
public boolean isEmpty() {
return (count == 0);
12
}
public void enqueue(Object o) {
Node node = new Node();
node.element = o;
node.next = null;
node.prev = last;
if (last != null){
last.next = node;
}
else {
last = first = node;
}
last = node;
count++;
}
public void dequeue() {
if ((first!= null) & (first.next!=null)) {
first = first.next;
first.prev = null;
count--;
}
else {
first = last = null;
count--;
}
}
public Object front() {
return first;
}
}
class Node {
Object element;
Node next, prev;
}
The Stack class:
public class Stack {
protected Object rep[];
protected int top = -1;
protected int size = 0;
protected int count = 0;
public Stack(int size) {
if (size > 0) {
this.size = size;
rep = new Object[size];
}
}
public boolean isFull() {
return (count == size);
}
public boolean isEmpty() {
return (count == 0);
}
public int getSize() {
return size;
}
public void push(Object e) {
if (e != null && !isFull()) {
COS2144/102
13
top++;
rep[top] = e;
count ++;
}
}
public Object pop() {
Object result = null;
if (!isEmpty()) {
result = rep[top];
top--;
count--;
}
return result;
}
}
28
How to implement a multithreaded applet?
325
How to display names of all components in a Container?
AS a developer will u create a data source in connection
pool? If so how will u do that, how to access the object
from connection pool using IRAD tool?
128
What is JDBC Driver interface?How can you retrieve data from
the ResultSet
Name the components that are termed to be Heavy-weight
component but available in Light-weight components?
371
Tell me the difference between an applet and a Japplet?
231
kindly can any one post for me portlet,hibernate,spring
example code and configuration,and some related tutorials plz
its urgent for me....thanks in advance ............