SlideShare a Scribd company logo
Basic Mechanism of
       Object-Oriented
Programming Language

                              2009-09-11 : Released
                              2009-09-14 : Fixed


       makoto kuwata <kwa@kuwata-lab.com>
               http://www.kuwata-lab.com/



       copyright© 2009 kuwata-lab.com all right reserved.
Purpose

✤   Describes basic mechanism of Object-Oriented
    Programming Language (OOPL)
    ✤   Not only Perl but also Python, Ruby, Java, ...

✤   You must be familiar with terms of Object-Oriented
    ✤   Class, Instance, Method, Override, Overload, ...




                                      copyright© 2009 kuwata-lab.com all right reserved.
Agenda

✤   Part 1. Basics about OOPL Mechanism
✤   Part 2. More about OOPL Mechanism
✤   Part 3. Case Study




                             copyright© 2009 kuwata-lab.com all right reserved.
Part 1.
Basics about OOPL Mechanism




                copyright© 2009 kuwata-lab.com all right reserved.
Overview
                                                         Function
               Class obj    Method Tbl                     func (self) {
Variable                                                     .....
                            m1                             }
                             m2
                Z: 123      m3
                                                           func (self) {
                                                             .....
Instance obj   Class obj    Method Tbl                     }
                             m2
  x: 10                      m3                            func (self) {
  y: 20         Z: 456       m4                              .....
                                                           }

                           copyright© 2009 kuwata-lab.com all right reserved.
Instance Object
                                                   Pointer to
                                                   Class object
✤   Instance variables + Is-a pointer
    ✤   Instance object knows "what I am"


          Variable         Instance obj               Class obj


                             x: 10

Hash data (in script         y: 20
lang) or Struct data
(in Java or C++)
                                     copyright© 2009 kuwata-lab.com all right reserved.
Class Object
                        Class obj
✤   Class variables                 Method Table
    ( + Is-a pointer)
    + Parent pointer
                         Z: 30
    + Method Table
                        Class obj
    Instance methods                Method Table
    belong to Class

                         Z: 35
Method Lookup Table
✤   Method signatures(≒names) + function pointers

✤   May have pointer to parent method table

    Class obj     Method Table                     func (self) {
                                                     print "hello";
                    m1                             }
                    m2
                    m3                             func (self, x) {
                                                     return x + 1;
                                                   }

                                 copyright© 2009 kuwata-lab.com all right reserved.
Method Function

✤   Instance object is passed as hidden argument
                    OOPL                                          non-OOPL
    class Point {                    def move(self, x, y) {
      var x=0, y=0;                    self['x'] = x;
      def move(x, y) {                 self['y'] = y;
        this.x = x;                  }
        this.y = y;
                           almost
      }                    equiv. p = {isa: Point, x: 0, y: 0};
    }                                func = lookup(p, 'move');
    p = new Point();                 func(p, 10, 20);
    p.move(10, 20);
                                    copyright© 2009 kuwata-lab.com all right reserved.
Difference bet. method and function

✤   Method requires instance object
    ✤   Typically, instance obj is passed as 1st argument

✤   Method call is dynamic, function call is static
    ✤   Method signature(≒name) is determined statically

    ✤   Method lookup is performed dynamically
        (This is why method call is slower than function call)


                                      copyright© 2009 kuwata-lab.com all right reserved.
Overview (again)
                                                         Function
               Class obj    Method Tbl                     func (self) {
Variable                                                     .....
                            m1                             }
                             m2
                Z: 123      m3
                                                           func (self) {
                                                             .....
Instance obj   Class obj    Method Tbl                     }
                             m2
  x: 10                      m3                            func (self) {
  y: 20         Z: 456       m4                              .....
                                                           }

                           copyright© 2009 kuwata-lab.com all right reserved.
Conslusion

✤   Instance object knows "what I am" (by is-a pointer)
✤   Instance variables belong to instance object
✤   Instance methods belong to class object
✤   function-call is static, method-call is dynamic




                                 copyright© 2009 kuwata-lab.com all right reserved.
Part 2.
More about OOPL Mechanism




               copyright© 2009 kuwata-lab.com all right reserved.
Method Signature

✤   Method name + Argument types (+ Return type)
    (in static language)
✤   Or same as Method name (in dynamic language)

Example (Java):
     Method Declaration           Method Signature

     void hello(int v, char ch)   hello(IC)V
     void hello(String s)         hello(Ljava.lang.String;)V

                                  copyright© 2009 kuwata-lab.com all right reserved.
Method Overload

✤   One method name can have different method
    signature
    Class obj     Method Table
                   hello(IC)
                   hello(Ljava.lang.String;)




                               copyright© 2009 kuwata-lab.com all right reserved.
Method Override

✤   Child class can define methods which has same
    method signature as method in parent class
Parent Class       Method Table
                    hello(IC)
                    hello(Ljava.lang.String;)

Child Class        Method Table
                   hello(Ljava.lang.String;)
                        :
                                copyright© 2009 kuwata-lab.com all right reserved.
Super

✤   'Super' skips method table lookup once

def m1() {             Class obj
  super.m1();
                                                  Method Table
}
                                                    m1
                                                     :
      Instance obj     Class obj
                                                  Method Table
        x: 10                       X               m1
                                                       :
                                   copyright© 2009 kuwata-lab.com all right reserved.
Polymorphism (1)
                                            not used
✤   Polymorphism depends on ...                                     used
    ✤   Receiver object's data type           Animal a;
                                              a = new Dog(); a.bark();
    ✤   Variable data type
                                              a = new Cat(); a.bark();
          Determined dynamically
Instance obj      Class obj      Method Tbl                      Method Func
                                 bark(...)                         func (self) {
                                                                     .....
                                   :        :
                                                                   }
                                   :        :

                                      copyright© 2009 kuwata-lab.com all right reserved.
Polymorphism (2)
✤   Polymorphism depends on ...
                                                 void bark(Object o) { ... }
    ✤   Data type of formal args
                                                 a.bark("Wee!");
    ✤   Data type of actual args

                                              Determined statically

Instance obj      Class obj        Method Tbl                     Method Func
                                   bark(...)                        func (self) {
                                                                      .....
                                     :        :
                                                                    }
                                     :        :

                                       copyright© 2009 kuwata-lab.com all right reserved.
"Object" class vs. "Class" class (1)
class Class
                                                  "Class" extends "Object"
   extends Object {...}

class Foo                 "Object" class
   extends Object {...}

                            NULL                              "Class" class

  Instance obj
                          "Foo" class

    x: 10
    y: 20                                     "Foo" extends "Object"
                                        copyright© 2009 kuwata-lab.com all right reserved.
"Object" class vs. "Class" class (2)
Object = new Class()             "Object" is-a "Class"
Foo    = new Class()
Instobj = new Foo()     "Object" class                   "Class" is-a "Class"


  Instance is-a "Foo"     NULL                              "Class" class

Instance obj
                        "Foo" class

      x: 10
      y: 20                                 "Foo" is-a "Class"
                                      copyright© 2009 kuwata-lab.com all right reserved.
Conclusion (1)

✤   Method Signature = Method Name + Arg Types
✤   Method Overload : Same method name can have
    different method signature
✤   Method Override : Child class can have same
    method signature as parent class
✤   Super : Skips current class when method lookup


                               copyright© 2009 kuwata-lab.com all right reserved.
Conclusion (2)

✤   Polymorphism
    ✤   Depends on Receiver's data type, Method Name, and
        Temporary Args' data type

    ✤   Not depends on Variable data type and Actual Args'
        data type

✤   Relation between "Object" class and "Class" class is
    complicated


                                    copyright© 2009 kuwata-lab.com all right reserved.
Part 3.
Case Study




             copyright© 2009 kuwata-lab.com all right reserved.
Case Study: Ruby

             from ruby.h:                      from ruby.h:
 struct RBasic {                struct RClass {
    unsigned long flags;            struct RBasic basic;
    VALUE klass;                   struct st_table *iv_tbl;
 };                                struct st_table *m_tbl;
           Is-a pointer
                                   VALUE super;
 struct RObject {               };
    struct RBasic basic;       Parent pointer
    struct st_table *iv_tbl;
 };
                                                       Method table
         Instance variables

                                copyright© 2009 kuwata-lab.com all right reserved.
Case Study: Perl
package Point;
sub new {
  my $classname = shift @_;               bless() binds hash data
  my ($x, $y) = @_;                       with class name
  my $this = {x=>$x, y=>$y};              (instead of is-a pointer)
  return bless $this, $classname;
}
sub move_to {
  my $this = shift @_;                    Instance object is the
  my ($x, $y) = @_;                       first argument of
  $this->{x} = $x;                        instance method
  $this->{y} = $y;
}                                   copyright© 2009 kuwata-lab.com all right reserved.
Case Study: Python
  class Point(object):
    def __init__(self, x=0, y=0):
      self.x = x                          Instance object is the
      self.y = y                          first argument of
                                          instance method
    def move_to(self, x, y):
      self.x = x
      self.y = y
                                        Possible to call instance
  p = Point(0, 0)                       method as function
  p.move_to(10, 20)
  Point.move_to(p, 10, 20)               Python uses function as method, and
                                         Ruby uses method as function.
                                    copyright© 2009 kuwata-lab.com all right reserved.
Case Study: Java
Class obj
            Method Table
             m1                          func (this) { ... }

             m2
                                         func (this) { ... }



Class obj                             Copy parent entries
            Method Table              not to follow parent
                                      table (for performance)
             m1
             m2
             m3                          func (this) { ... }
                           copyright© 2009 kuwata-lab.com all right reserved.
Case Study: JavaScript (1)
                                                               /// (1)
✤   instance.__proto__ points prototype                        function Animal(name) {
    object (= Constructor.prototype)                              this.name = name;
                                                               }
✤   Trace __proto__ recursively
                                                               /// (2)
    (called as 'prototype chain')                              Animal.prototype.bark =
                                                                   function() {
    ('__proto__' property is         anim                              alert(this.name); }
     available on Firefox)
                                       name                    /// (3)
                                                               var anim =
                                     __proto__
                                                                   new Animal("Doara");
                                                     (3)
     Animal                          prototype
                               (1)                          (2)
      prototype                         bark                           prototype
      this.name = name;               __proto__                          alert(this.name);

                                                 copyright© 2009 kuwata-lab.com all right reserved.
Case Study: JavaScript (2)
/// (4)                                                 /// (5)
function Dog(name) {                                    Dog.prototype.bark2 =
   Animal.call(this, name);    dog                          function() {
}                                name                           alert("BowWow"); };
Dog.prototype = anim;                                   /// (6)
                               __proto__
delete Dog.prototype.name;                              var dog = new Dog("so16");
                                                (6)
   Dog                         anim
                         (4)                            (5)
   prototype                     bark2                            prototype
    Animal.call(this);         __proto__                           alert("BowWow");


   Animal                      prototype
    prototype                        bark                         prototype
    this.name = name;           __proto__                           alert(this.name);

                                            copyright© 2009 kuwata-lab.com all right reserved.
thank you

     copyright© 2009 kuwata-lab.com all right reserved.

More Related Content

What's hot

Pure function And Functional Error Handling
Pure function And Functional Error HandlingPure function And Functional Error Handling
Pure function And Functional Error Handling
Gyooha Kim
 
Joose @jsconf
Joose @jsconfJoose @jsconf
Joose @jsconfmalteubl
 
不自然なcar/ナチュラルにconsして
不自然なcar/ナチュラルにconsして不自然なcar/ナチュラルにconsして
不自然なcar/ナチュラルにconsして
mitsutaka mimura
 
JavaScript Patterns
JavaScript PatternsJavaScript Patterns
JavaScript Patterns
Giordano Scalzo
 
Infinum iOS Talks #1 - Swift under the hood: Method Dispatching by Vlaho Poluta
Infinum iOS Talks #1 - Swift under the hood: Method Dispatching by Vlaho PolutaInfinum iOS Talks #1 - Swift under the hood: Method Dispatching by Vlaho Poluta
Infinum iOS Talks #1 - Swift under the hood: Method Dispatching by Vlaho Poluta
Infinum
 
Javascript the Language of the Web
Javascript the Language of the WebJavascript the Language of the Web
Javascript the Language of the Web
andersjanmyr
 
Swift 3 Programming for iOS : Protocol
Swift 3 Programming for iOS : ProtocolSwift 3 Programming for iOS : Protocol
Swift 3 Programming for iOS : Protocol
Kwang Woo NAM
 
Javascript foundations: Introducing OO
Javascript foundations: Introducing OOJavascript foundations: Introducing OO
Javascript foundations: Introducing OO
John Hunter
 
Lesson19 Maximum And Minimum Values 034 Slides
Lesson19   Maximum And Minimum Values 034 SlidesLesson19   Maximum And Minimum Values 034 Slides
Lesson19 Maximum And Minimum Values 034 Slides
Matthew Leingang
 
2010 08-19-30 minutes of python
2010 08-19-30 minutes of python2010 08-19-30 minutes of python
2010 08-19-30 minutes of pythonKang-Min Wang
 
Xsl Tand X Path Quick Reference
Xsl Tand X Path Quick ReferenceXsl Tand X Path Quick Reference
Xsl Tand X Path Quick ReferenceLiquidHub
 
6.1.1一步一步学repast代码解释
6.1.1一步一步学repast代码解释6.1.1一步一步学repast代码解释
6.1.1一步一步学repast代码解释zhang shuren
 
Принципы и практики разработки ПО 2 / Principles and practices of software de...
Принципы и практики разработки ПО 2 / Principles and practices of software de...Принципы и практики разработки ПО 2 / Principles and practices of software de...
Принципы и практики разработки ПО 2 / Principles and practices of software de...
Alexander Granin
 
Learning stochastic neural networks with Chainer
Learning stochastic neural networks with ChainerLearning stochastic neural networks with Chainer
Learning stochastic neural networks with Chainer
Seiya Tokui
 
Functional Programming in C++
Functional Programming in C++Functional Programming in C++
Functional Programming in C++
sankeld
 

What's hot (19)

Pure function And Functional Error Handling
Pure function And Functional Error HandlingPure function And Functional Error Handling
Pure function And Functional Error Handling
 
Lecture 03
Lecture 03Lecture 03
Lecture 03
 
Joose @jsconf
Joose @jsconfJoose @jsconf
Joose @jsconf
 
不自然なcar/ナチュラルにconsして
不自然なcar/ナチュラルにconsして不自然なcar/ナチュラルにconsして
不自然なcar/ナチュラルにconsして
 
JavaScript Patterns
JavaScript PatternsJavaScript Patterns
JavaScript Patterns
 
Infinum iOS Talks #1 - Swift under the hood: Method Dispatching by Vlaho Poluta
Infinum iOS Talks #1 - Swift under the hood: Method Dispatching by Vlaho PolutaInfinum iOS Talks #1 - Swift under the hood: Method Dispatching by Vlaho Poluta
Infinum iOS Talks #1 - Swift under the hood: Method Dispatching by Vlaho Poluta
 
Core java concepts
Core    java  conceptsCore    java  concepts
Core java concepts
 
Javascript the Language of the Web
Javascript the Language of the WebJavascript the Language of the Web
Javascript the Language of the Web
 
Oop 1
Oop 1Oop 1
Oop 1
 
Swift 3 Programming for iOS : Protocol
Swift 3 Programming for iOS : ProtocolSwift 3 Programming for iOS : Protocol
Swift 3 Programming for iOS : Protocol
 
Javascript foundations: Introducing OO
Javascript foundations: Introducing OOJavascript foundations: Introducing OO
Javascript foundations: Introducing OO
 
Lesson19 Maximum And Minimum Values 034 Slides
Lesson19   Maximum And Minimum Values 034 SlidesLesson19   Maximum And Minimum Values 034 Slides
Lesson19 Maximum And Minimum Values 034 Slides
 
2010 08-19-30 minutes of python
2010 08-19-30 minutes of python2010 08-19-30 minutes of python
2010 08-19-30 minutes of python
 
Xsl Tand X Path Quick Reference
Xsl Tand X Path Quick ReferenceXsl Tand X Path Quick Reference
Xsl Tand X Path Quick Reference
 
6.1.1一步一步学repast代码解释
6.1.1一步一步学repast代码解释6.1.1一步一步学repast代码解释
6.1.1一步一步学repast代码解释
 
Принципы и практики разработки ПО 2 / Principles and practices of software de...
Принципы и практики разработки ПО 2 / Principles and practices of software de...Принципы и практики разработки ПО 2 / Principles and practices of software de...
Принципы и практики разработки ПО 2 / Principles and practices of software de...
 
Learning stochastic neural networks with Chainer
Learning stochastic neural networks with ChainerLearning stochastic neural networks with Chainer
Learning stochastic neural networks with Chainer
 
Functional Programming in C++
Functional Programming in C++Functional Programming in C++
Functional Programming in C++
 
Prototype
PrototypePrototype
Prototype
 

Similar to Basic Mechanism of OOPL

Cascon2011_5_rules+owl
Cascon2011_5_rules+owlCascon2011_5_rules+owl
Cascon2011_5_rules+owl
ONTORULE Project
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
Brian Hsu
 
Python advance
Python advancePython advance
Python advance
Mukul Kirti Verma
 
Introduction to functional programming using Ocaml
Introduction to functional programming using OcamlIntroduction to functional programming using Ocaml
Introduction to functional programming using Ocaml
pramode_ce
 
Programming Android Application in Scala.
Programming Android Application in Scala.Programming Android Application in Scala.
Programming Android Application in Scala.
Brian Hsu
 
Operator Overloading
Operator OverloadingOperator Overloading
Operator Overloading
Mani Singh
 
Master in javascript
Master in javascriptMaster in javascript
Master in javascript
Robbin Zhao
 
Shiksharth com java_topics
Shiksharth com java_topicsShiksharth com java_topics
Shiksharth com java_topics
Rajesh Verma
 
Fast Forward To Scala
Fast Forward To ScalaFast Forward To Scala
Fast Forward To Scala
Martin Kneissl
 
F#3.0
F#3.0 F#3.0
First fare 2011 frc-java-introduction
First fare 2011 frc-java-introductionFirst fare 2011 frc-java-introduction
First fare 2011 frc-java-introductionOregon FIRST Robotics
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript Programming
Sehwan Noh
 
Dive into Python Class
Dive into Python ClassDive into Python Class
Dive into Python ClassJim Yeh
 
Ajaxworld
AjaxworldAjaxworld
Ajaxworld
deannalagason
 
JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015
Charles Nutter
 
Hey! There's OCaml in my Rust!
Hey! There's OCaml in my Rust!Hey! There's OCaml in my Rust!
Hey! There's OCaml in my Rust!
Kel Cecil
 

Similar to Basic Mechanism of OOPL (20)

Cascon2011_5_rules+owl
Cascon2011_5_rules+owlCascon2011_5_rules+owl
Cascon2011_5_rules+owl
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
 
Python advance
Python advancePython advance
Python advance
 
Javascript
JavascriptJavascript
Javascript
 
Introduction to functional programming using Ocaml
Introduction to functional programming using OcamlIntroduction to functional programming using Ocaml
Introduction to functional programming using Ocaml
 
Programming Android Application in Scala.
Programming Android Application in Scala.Programming Android Application in Scala.
Programming Android Application in Scala.
 
Operator Overloading
Operator OverloadingOperator Overloading
Operator Overloading
 
Master in javascript
Master in javascriptMaster in javascript
Master in javascript
 
Shiksharth com java_topics
Shiksharth com java_topicsShiksharth com java_topics
Shiksharth com java_topics
 
Fast Forward To Scala
Fast Forward To ScalaFast Forward To Scala
Fast Forward To Scala
 
F#3.0
F#3.0 F#3.0
F#3.0
 
jsbasics-slide
jsbasics-slidejsbasics-slide
jsbasics-slide
 
Ocl 09
Ocl 09Ocl 09
Ocl 09
 
First fare 2011 frc-java-introduction
First fare 2011 frc-java-introductionFirst fare 2011 frc-java-introduction
First fare 2011 frc-java-introduction
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript Programming
 
Dive into Python Class
Dive into Python ClassDive into Python Class
Dive into Python Class
 
Ajaxworld
AjaxworldAjaxworld
Ajaxworld
 
JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015
 
Hey! There's OCaml in my Rust!
Hey! There's OCaml in my Rust!Hey! There's OCaml in my Rust!
Hey! There's OCaml in my Rust!
 
8 polymorphism
8 polymorphism8 polymorphism
8 polymorphism
 

More from kwatch

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Python
kwatch
 
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアル
kwatch
 
なんでもID
なんでもIDなんでもID
なんでもID
kwatch
 
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
kwatch
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
kwatch
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
kwatch
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
kwatch
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
kwatch
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
kwatch
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
kwatch
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
 
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurial
kwatch
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -
kwatch
 
文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた
kwatch
 
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"kwatch
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラム
kwatch
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジン
kwatch
 

More from kwatch (20)

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Python
 
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアル
 
なんでもID
なんでもIDなんでもID
なんでもID
 
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurial
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -
 
文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた
 
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラム
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジン
 

Recently uploaded

Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 

Recently uploaded (20)

Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 

Basic Mechanism of OOPL

  • 1. Basic Mechanism of Object-Oriented Programming Language 2009-09-11 : Released 2009-09-14 : Fixed makoto kuwata <kwa@kuwata-lab.com> http://www.kuwata-lab.com/ copyright© 2009 kuwata-lab.com all right reserved.
  • 2. Purpose ✤ Describes basic mechanism of Object-Oriented Programming Language (OOPL) ✤ Not only Perl but also Python, Ruby, Java, ... ✤ You must be familiar with terms of Object-Oriented ✤ Class, Instance, Method, Override, Overload, ... copyright© 2009 kuwata-lab.com all right reserved.
  • 3. Agenda ✤ Part 1. Basics about OOPL Mechanism ✤ Part 2. More about OOPL Mechanism ✤ Part 3. Case Study copyright© 2009 kuwata-lab.com all right reserved.
  • 4. Part 1. Basics about OOPL Mechanism copyright© 2009 kuwata-lab.com all right reserved.
  • 5. Overview Function Class obj Method Tbl func (self) { Variable ..... m1 } m2 Z: 123 m3 func (self) { ..... Instance obj Class obj Method Tbl } m2 x: 10 m3 func (self) { y: 20 Z: 456 m4 ..... } copyright© 2009 kuwata-lab.com all right reserved.
  • 6. Instance Object Pointer to Class object ✤ Instance variables + Is-a pointer ✤ Instance object knows "what I am" Variable Instance obj Class obj x: 10 Hash data (in script y: 20 lang) or Struct data (in Java or C++) copyright© 2009 kuwata-lab.com all right reserved.
  • 7. Class Object Class obj ✤ Class variables Method Table ( + Is-a pointer) + Parent pointer Z: 30 + Method Table Class obj Instance methods Method Table belong to Class Z: 35
  • 8. Method Lookup Table ✤ Method signatures(≒names) + function pointers ✤ May have pointer to parent method table Class obj Method Table func (self) { print "hello"; m1 } m2 m3 func (self, x) { return x + 1; } copyright© 2009 kuwata-lab.com all right reserved.
  • 9. Method Function ✤ Instance object is passed as hidden argument OOPL non-OOPL class Point { def move(self, x, y) { var x=0, y=0; self['x'] = x; def move(x, y) { self['y'] = y; this.x = x; } this.y = y; almost } equiv. p = {isa: Point, x: 0, y: 0}; } func = lookup(p, 'move'); p = new Point(); func(p, 10, 20); p.move(10, 20); copyright© 2009 kuwata-lab.com all right reserved.
  • 10. Difference bet. method and function ✤ Method requires instance object ✤ Typically, instance obj is passed as 1st argument ✤ Method call is dynamic, function call is static ✤ Method signature(≒name) is determined statically ✤ Method lookup is performed dynamically (This is why method call is slower than function call) copyright© 2009 kuwata-lab.com all right reserved.
  • 11. Overview (again) Function Class obj Method Tbl func (self) { Variable ..... m1 } m2 Z: 123 m3 func (self) { ..... Instance obj Class obj Method Tbl } m2 x: 10 m3 func (self) { y: 20 Z: 456 m4 ..... } copyright© 2009 kuwata-lab.com all right reserved.
  • 12. Conslusion ✤ Instance object knows "what I am" (by is-a pointer) ✤ Instance variables belong to instance object ✤ Instance methods belong to class object ✤ function-call is static, method-call is dynamic copyright© 2009 kuwata-lab.com all right reserved.
  • 13. Part 2. More about OOPL Mechanism copyright© 2009 kuwata-lab.com all right reserved.
  • 14. Method Signature ✤ Method name + Argument types (+ Return type) (in static language) ✤ Or same as Method name (in dynamic language) Example (Java): Method Declaration Method Signature void hello(int v, char ch) hello(IC)V void hello(String s) hello(Ljava.lang.String;)V copyright© 2009 kuwata-lab.com all right reserved.
  • 15. Method Overload ✤ One method name can have different method signature Class obj Method Table hello(IC) hello(Ljava.lang.String;) copyright© 2009 kuwata-lab.com all right reserved.
  • 16. Method Override ✤ Child class can define methods which has same method signature as method in parent class Parent Class Method Table hello(IC) hello(Ljava.lang.String;) Child Class Method Table hello(Ljava.lang.String;) : copyright© 2009 kuwata-lab.com all right reserved.
  • 17. Super ✤ 'Super' skips method table lookup once def m1() { Class obj super.m1(); Method Table } m1 : Instance obj Class obj Method Table x: 10 X m1 : copyright© 2009 kuwata-lab.com all right reserved.
  • 18. Polymorphism (1) not used ✤ Polymorphism depends on ... used ✤ Receiver object's data type Animal a; a = new Dog(); a.bark(); ✤ Variable data type a = new Cat(); a.bark(); Determined dynamically Instance obj Class obj Method Tbl Method Func bark(...) func (self) { ..... : : } : : copyright© 2009 kuwata-lab.com all right reserved.
  • 19. Polymorphism (2) ✤ Polymorphism depends on ... void bark(Object o) { ... } ✤ Data type of formal args a.bark("Wee!"); ✤ Data type of actual args Determined statically Instance obj Class obj Method Tbl Method Func bark(...) func (self) { ..... : : } : : copyright© 2009 kuwata-lab.com all right reserved.
  • 20. "Object" class vs. "Class" class (1) class Class "Class" extends "Object" extends Object {...} class Foo "Object" class extends Object {...} NULL "Class" class Instance obj "Foo" class x: 10 y: 20 "Foo" extends "Object" copyright© 2009 kuwata-lab.com all right reserved.
  • 21. "Object" class vs. "Class" class (2) Object = new Class() "Object" is-a "Class" Foo = new Class() Instobj = new Foo() "Object" class "Class" is-a "Class" Instance is-a "Foo" NULL "Class" class Instance obj "Foo" class x: 10 y: 20 "Foo" is-a "Class" copyright© 2009 kuwata-lab.com all right reserved.
  • 22. Conclusion (1) ✤ Method Signature = Method Name + Arg Types ✤ Method Overload : Same method name can have different method signature ✤ Method Override : Child class can have same method signature as parent class ✤ Super : Skips current class when method lookup copyright© 2009 kuwata-lab.com all right reserved.
  • 23. Conclusion (2) ✤ Polymorphism ✤ Depends on Receiver's data type, Method Name, and Temporary Args' data type ✤ Not depends on Variable data type and Actual Args' data type ✤ Relation between "Object" class and "Class" class is complicated copyright© 2009 kuwata-lab.com all right reserved.
  • 24. Part 3. Case Study copyright© 2009 kuwata-lab.com all right reserved.
  • 25. Case Study: Ruby from ruby.h: from ruby.h: struct RBasic { struct RClass { unsigned long flags; struct RBasic basic; VALUE klass; struct st_table *iv_tbl; }; struct st_table *m_tbl; Is-a pointer VALUE super; struct RObject { }; struct RBasic basic; Parent pointer struct st_table *iv_tbl; }; Method table Instance variables copyright© 2009 kuwata-lab.com all right reserved.
  • 26. Case Study: Perl package Point; sub new { my $classname = shift @_; bless() binds hash data my ($x, $y) = @_; with class name my $this = {x=>$x, y=>$y}; (instead of is-a pointer) return bless $this, $classname; } sub move_to { my $this = shift @_; Instance object is the my ($x, $y) = @_; first argument of $this->{x} = $x; instance method $this->{y} = $y; } copyright© 2009 kuwata-lab.com all right reserved.
  • 27. Case Study: Python class Point(object): def __init__(self, x=0, y=0): self.x = x Instance object is the self.y = y first argument of instance method def move_to(self, x, y): self.x = x self.y = y Possible to call instance p = Point(0, 0) method as function p.move_to(10, 20) Point.move_to(p, 10, 20) Python uses function as method, and Ruby uses method as function. copyright© 2009 kuwata-lab.com all right reserved.
  • 28. Case Study: Java Class obj Method Table m1 func (this) { ... } m2 func (this) { ... } Class obj Copy parent entries Method Table not to follow parent table (for performance) m1 m2 m3 func (this) { ... } copyright© 2009 kuwata-lab.com all right reserved.
  • 29. Case Study: JavaScript (1) /// (1) ✤ instance.__proto__ points prototype function Animal(name) { object (= Constructor.prototype) this.name = name; } ✤ Trace __proto__ recursively /// (2) (called as 'prototype chain') Animal.prototype.bark = function() { ('__proto__' property is anim alert(this.name); } available on Firefox) name /// (3) var anim = __proto__ new Animal("Doara"); (3) Animal prototype (1) (2) prototype bark prototype this.name = name; __proto__ alert(this.name); copyright© 2009 kuwata-lab.com all right reserved.
  • 30. Case Study: JavaScript (2) /// (4) /// (5) function Dog(name) { Dog.prototype.bark2 = Animal.call(this, name); dog function() { } name alert("BowWow"); }; Dog.prototype = anim; /// (6) __proto__ delete Dog.prototype.name; var dog = new Dog("so16"); (6) Dog anim (4) (5) prototype bark2 prototype Animal.call(this); __proto__ alert("BowWow"); Animal prototype prototype bark prototype this.name = name; __proto__ alert(this.name); copyright© 2009 kuwata-lab.com all right reserved.
  • 31. thank you copyright© 2009 kuwata-lab.com all right reserved.