Let’s Play Objects

15
S.Ducasse 1 QuickTime™ TIFF (Uncompr are needed t Stéphane Ducasse [email protected] http://www.listic.univ-savoie.f r/~ducasse/ Let’s Play Objects

description

Let’s Play Objects. Outline. Simulate a LAN physically Set up a context for future chapters Exercises Some forward references to intriguate you. A LAN Simulator. A LAN contains nodes, workstations, printers, file servers. Packets are sent in a LAN and each node treats them differently. - PowerPoint PPT Presentation

Transcript of Let’s Play Objects

Page 1: Let’s Play Objects

S.Ducasse 1

QuickTime™ and aTIFF (Uncompressed) decompressorare needed to see this picture.

Stéphane [email protected]://www.listic.univ-savoie.fr/~ducasse/

Let’s Play Objects

Page 2: Let’s Play Objects

S.Ducasse 2

License: CC-Attribution-ShareAlike 2.0http://creativecommons.org/licenses/by-sa/2.0/

Page 3: Let’s Play Objects

S.Ducasse 3

Outline •Simulate a LAN physically•Set up a context for

• future chapters• Exercises

•Some forward references to intriguate you

Page 4: Let’s Play Objects

S.Ducasse 4

A LAN SimulatorA LAN contains nodes, workstations, printers, file servers. Packets are sent in a LAN and each node treats them differently.

macnode3

node2

pcnode1

lpr

Page 5: Let’s Play Objects

S.Ducasse 5

Three Kinds of ObjectsNode and its subclasses represent the entities that are connected to form a LAN. Packet represents the information that flows between Nodes.NetworkManager manages how the nodes are connected

Page 6: Let’s Play Objects

S.Ducasse 6

LAN Design

Node

WorkstationPrinter

NetworkManager

PacketaddresseecontentsoriginatorisSentBy: aNodeisAddressedTo: aNode

nameaccept: aPacketsend: aPackethasNextNode

originate: aPacketaccept: aPacket

print: aPacketaccept: aPacket

declareNode: aNodeundeclareNode: aNodeconnectNodes: anArrayOfAddressees nextNode

Page 7: Let’s Play Objects

S.Ducasse 7

Interactions Between Nodes

accept: aPacket

send: aPacket

nodePrinter aPacket node1

isAddressedTo: nodePrinter

accept: aPacket

print: aPacket

[true]

[false]

Page 8: Let’s Play Objects

S.Ducasse 8

Node and Packet Creation|macNode pcNode node1 printerNode node2 node3 packet|macNode := Workstation withName: #mac.pcNode := Workstation withName: #pc.node1 := Node withName: #node1.node2 := Node withName: #node2.node3 := Node withName: #node2.printerNode := Printer withName: #lpr.macNode nextNode: node1.node1 nextNode: pcNode.pcNode nextNode: node2.node3 nextNode: printerNode.lpr nextNode: macNode.

packet := Packet send: 'This packet travelled to' to: #lpr.

Page 9: Let’s Play Objects

S.Ducasse 9

Objects sends Messages• Message: 1 + 2

– receiver : 1 (an instance of SmallInteger)– selector: #+– arguments: 2

• Message: lpr nextNode: macNode– receiver lpr (an instance of LanPrinter)– selector: #nextNode: – arguments: macNode (an instance of Workstation)

• Message: Packet send: 'This packet travelled to' to: #lpr– receiver: Packet (a class)– selector: #send:to:– arguments: 'This packet travelled to' and #lpr

Page 10: Let’s Play Objects

S.Ducasse 10

Transmitting a Packet| aLan packet macNode|...macNode := aLan findNodeWithAddress: #mac.packet := Packet send: 'This packet travelled to

the printer' to: #lpr.macNode originate: packet.

-> mac sends a packet to pc -> pc sends a packet to node1-> node1 sends a packet to node2-> node2 sends a packet to node3-> node3 sends a packet to lpr-> lpr is printing -> this packet travelled to lpr

Page 11: Let’s Play Objects

S.Ducasse 11

How to Define a Class (Sq)• Fill the template:

NameOfSuperclass subclass: #NameOfClassinstanceVariableNames: 'instVarName1'classVariableNames: 'ClassVarName1 ClassVarName2'poolDictionaries: ''category: 'LAN’

• For example to create the class Packet

Object subclass: #PacketinstanceVariableNames: 'addressee originator

contents 'classVariableNames: ''poolDictionaries: ''category: 'LAN'

Page 12: Let’s Play Objects

S.Ducasse 12

Smalltalk defineClass: #Packet superclass: #{Object}

indexedType: #none private: false instanceVariableNames: 'addressee

originator contents' classInstanceVariableNames: ''

imports: ''category: 'LAN'

How to Define a Class (VW)

Page 13: Let’s Play Objects

S.Ducasse 13

How to define a method?message selector and argument names

"comment stating purpose of message"| temporary variable names |statements

LanPrinter>>accept: thePacket"If the packet is addressed to me, print it. Otherwise just behave like a normal node."

(thePacket isAddressedTo: self)ifTrue: [self print: thePacket] ifFalse: [super accept: thePacket]

Page 14: Let’s Play Objects

S.Ducasse 14

In JavaIn Java we would write void accept(thePacket Packet)/*If the packet is addressed to me, print it.

Otherwise just behave like a normal node.*/if (thePacket.isAddressedTo(this)){

this.print(thePacket)}else super.accept(thePacket)}

Page 15: Let’s Play Objects

S.Ducasse 15

SummaryDefine a classDefine a method