SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
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 deïŹne 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 ïŹ‚ags;            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) = @_;                       ïŹrst 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                          ïŹrst 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.

Weitere Àhnliche Inhalte

Was ist angesagt?

Pure function And Functional Error Handling
Pure function And Functional Error HandlingPure function And Functional Error Handling
Pure function And Functional Error HandlingGyooha Kim
 
Joose @jsconf
Joose @jsconfJoose @jsconf
Joose @jsconfmalteubl
 
䞍è‡Ș然ăȘcar/ăƒŠăƒăƒ„ăƒ©ăƒ«ă«consしど
䞍è‡Ș然ăȘcar/ăƒŠăƒăƒ„ăƒ©ăƒ«ă«consしど侍è‡Ș然ăȘcar/ăƒŠăƒăƒ„ăƒ©ăƒ«ă«consしど
䞍è‡Ș然ăȘcar/ăƒŠăƒăƒ„ăƒ©ăƒ«ă«consしどmitsutaka mimura
 
JavaScript Patterns
JavaScript PatternsJavaScript Patterns
JavaScript PatternsGiordano 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 PolutaInfinum
 
Core java concepts
Core    java  conceptsCore    java  concepts
Core java conceptskishorethoutam
 
Javascript the Language of the Web
Javascript the Language of the WebJavascript the Language of the Web
Javascript the Language of the Webandersjanmyr
 
Swift 3 Programming for iOS : Protocol
Swift 3 Programming for iOS : ProtocolSwift 3 Programming for iOS : Protocol
Swift 3 Programming for iOS : ProtocolKwang Woo NAM
 
Javascript foundations: Introducing OO
Javascript foundations: Introducing OOJavascript foundations: Introducing OO
Javascript foundations: Introducing OOJohn 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 SlidesMatthew 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 ChainerSeiya Tokui
 
Functional Programming in C++
Functional Programming in C++Functional Programming in C++
Functional Programming in C++sankeld
 

Was ist angesagt? (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
 

Ähnlich wie Basic Mechanism of OOPL

Cascon2011_5_rules+owl
Cascon2011_5_rules+owlCascon2011_5_rules+owl
Cascon2011_5_rules+owlONTORULE Project
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to ScalaBrian Hsu
 
Javascript
JavascriptJavascript
JavascriptAditya Gaur
 
Introduction to functional programming using Ocaml
Introduction to functional programming using OcamlIntroduction to functional programming using Ocaml
Introduction to functional programming using Ocamlpramode_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 OverloadingMani Singh
 
Master in javascript
Master in javascriptMaster in javascript
Master in javascriptRobbin Zhao
 
Shiksharth com java_topics
Shiksharth com java_topicsShiksharth com java_topics
Shiksharth com java_topicsRajesh Verma
 
Fast Forward To Scala
Fast Forward To ScalaFast Forward To Scala
Fast Forward To ScalaMartin Kneissl
 
jsbasics-slide
jsbasics-slidejsbasics-slide
jsbasics-slidePeter Borkuti
 
Ocl 09
Ocl 09Ocl 09
Ocl 09ClarkTony
 
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 ProgrammingSehwan Noh
 
Dive into Python Class
Dive into Python ClassDive into Python Class
Dive into Python ClassJim Yeh
 
JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015Charles 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
 

Ähnlich wie 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
 

Mehr von 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 Pythonkwatch
 
Migr8.rb ăƒăƒ„ăƒŒăƒˆăƒȘă‚ąăƒ«
Migr8.rb ăƒăƒ„ăƒŒăƒˆăƒȘă‚ąăƒ«Migr8.rb ăƒăƒ„ăƒŒăƒˆăƒȘă‚ąăƒ«
Migr8.rb ăƒăƒ„ăƒŒăƒˆăƒȘă‚ąăƒ«kwatch
 
ăȘんでもID
ăȘんでもIDăȘんでもID
ăȘんでもIDkwatch
 
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 Pythonkwatch
 
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/Mercurialkwatch
 
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
 

Mehr von 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ç”šăƒ†ăƒłăƒ—ăƒŹăƒŒăƒˆă‚šăƒłă‚žăƒł
 

KĂŒrzlich hochgeladen

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 

KĂŒrzlich hochgeladen (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 

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 deïŹne 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 ïŹ‚ags; 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) = @_; ïŹrst 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 ïŹrst 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.