Slide 1

Slide 1 text

Messages from Perl id:aereal Saturday, August 18, 12

Slide 2

Slide 2 text

id:aereal[୭?] aereal aereal aereal Saturday, August 18, 12

Slide 3

Slide 3 text

Saturday, August 18, 12

Slide 4

Slide 4 text

Saturday, August 18, 12

Slide 5

Slide 5 text

Ruby Perl JavaScript Saturday, August 18, 12

Slide 6

Slide 6 text

I/O Saturday, August 18, 12

Slide 7

Slide 7 text

I/O Saturday, August 18, 12

Slide 8

Slide 8 text

Io http://iolanguage.com/ Saturday, August 18, 12

Slide 9

Slide 9 text

ActionScript C++ PHP ALGOL Fortran COBOL Java C# Objective-C Pascal Haskell Prolog Modula-2 Brainfxxk R Scala Groovy Lua ML Smalltalk OCaml Go Saturday, August 18, 12

Slide 10

Slide 10 text

$a <=> $b Saturday, August 18, 12

Slide 11

Slide 11 text

Object-oriented Programming Saturday, August 18, 12

Slide 12

Slide 12 text

OOP? messaging polymorphism encapsulation Saturday, August 18, 12

Slide 13

Slide 13 text

Implementations Simple Expensive Saturday, August 18, 12

Slide 14

Slide 14 text

Expensive impl. (1) First-class class and objects Coupling tightly Saturday, August 18, 12

Slide 15

Slide 15 text

Expensive impl. (2) Ruby Java Saturday, August 18, 12

Slide 16

Slide 16 text

class Car # ... end Saturday, August 18, 12

Slide 17

Slide 17 text

Simple impl. (1) Use Dictionary-like data structure Coupling loosely Saturday, August 18, 12

Slide 18

Slide 18 text

Simple impl. (2) JavaScript Perl Saturday, August 18, 12

Slide 19

Slide 19 text

package Car; sub new { my ($class) = @_; bless +{}, $class; } 1; Saturday, August 18, 12

Slide 20

Slide 20 text

Dynamic dispatch Saturday, August 18, 12

Slide 21

Slide 21 text

Perl Saturday, August 18, 12

Slide 22

Slide 22 text

package Car; sub run { my ($self) = @_; print “run\n”; } Saturday, August 18, 12

Slide 23

Slide 23 text

my $car = Car->new; run $car; Saturday, August 18, 12

Slide 24

Slide 24 text

Indirect object syntax Saturday, August 18, 12

Slide 25

Slide 25 text

Implicitly take arguments Perl Python Saturday, August 18, 12

Slide 26

Slide 26 text

Ruby Saturday, August 18, 12

Slide 27

Slide 27 text

class Car def run puts “run” end end Saturday, August 18, 12

Slide 28

Slide 28 text

car = Car.new car.send(“run”) Saturday, August 18, 12

Slide 29

Slide 29 text

run = car.method(“run”) run.call Saturday, August 18, 12

Slide 30

Slide 30 text

#receiver -> object #owner -> class Method#.* Saturday, August 18, 12

Slide 31

Slide 31 text

Method instances know receiver Saturday, August 18, 12

Slide 32

Slide 32 text

Conclusions Many ‘Objects’ Implementations are constraints You should be multi-lingual Saturday, August 18, 12

Slide 33

Slide 33 text

͓͠·͍ Saturday, August 18, 12