SlideShare a Scribd company logo
1 of 54
So You Think Objects Are Records
With Byte Codes On The Side?
                                   T
                                   h
                                   i
                                   n
                                   k
                                   A
                                   g
                                   a
                                   i
                                   n
Where Do Objects Fit?
    As a vehicle for implementing programs.




            So You Think Objects Are Records With Byte Codes On The Side?   2
Where Do Objects Fit?
    As a vehicle for implementing programs.
    As a vehicle for modeling actual business entities and
    the diverse, complex rules that govern their
    interpretation and use.




            So You Think Objects Are Records With Byte Codes On The Side?   3
How Do We View Objects?
   Traditional thinking holds that objects are the managers
   and clients of state stored in data base records.




           So You Think Objects Are Records With Byte Codes On The Side?   4
How Do We View Objects?
   Traditional thinking holds that objects are the managers
   and clients of state stored in data base records.
   An intuitively appealing conceptual model...




           So You Think Objects Are Records With Byte Codes On The Side?   5
How Do We View Objects?
   Traditional thinking holds that objects are the managers
   and clients of state stored in data base records.
   An intuitively appealing conceptual model...
   … that is inherently external to the data base.




           So You Think Objects Are Records With Byte Codes On The Side?   6
How Do We Implement Objects?
   Traditional thinking holds that objects are records with
   methods on the side.




           So You Think Objects Are Records With Byte Codes On The Side?   7
How Do We Implement Objects?
   Traditional thinking holds that objects are records with
   methods on the side.
   An intuitively appealing conceptual model...




           So You Think Objects Are Records With Byte Codes On The Side?   8
How Do We Implement Objects?
   Traditional thinking holds that objects are records with
   methods on the side.
   An intuitively appealing conceptual model...
   … that insists on viewing the world one individual at a
   time.




           So You Think Objects Are Records With Byte Codes On The Side?   9
So What’s Wrong With That?
   It may work for clients that consume relatively small
   amounts of data...




           So You Think Objects Are Records With Byte Codes On The Side?   10
So What’s Wrong With That?
   It may work for clients that consume relatively small
   amounts of data...
   It may work for programs…




           So You Think Objects Are Records With Byte Codes On The Side?   11
So What’s Wrong With That?
   It may work for clients that consume relatively small
   amounts of data...
   It may work for programs…
   … but it leaves the hard problem of implementing
   scaleable business objects, particularly entity objects, as
   an exercise for the ‘reader’.




            So You Think Objects Are Records With Byte Codes On The Side?   12
So Where Do We Go Next?
   Establishing Principles
   Starting At The Top
   Questioning Assumptions
   Developing a New Foundation




           So You Think Objects Are Records With Byte Codes On The Side?   13
Establishing Principles
    From an application perspective:
       comprehensibility
        » most applications we encounter are ultimately
          developed by involved, business knowledgeable users,
          not programmers.
       integration
        » solving interface and impedance matching problems
          is a jargon laden waste of time.



            So You Think Objects Are Records With Byte Codes On The Side?   14
Establishing Principles
    From a technology perspective:
       theory
        » a collection centric theory of operation is critical to
          achieving reliable application scalability and
          deployment.
      integration
        » solving interface and impedance matching problems
          is a jargon laden waste of time.



            So You Think Objects Are Records With Byte Codes On The Side?   15
Establishing Principles
    From any perspective:
       generality
        » most applications are a collection of many simple,
          hard problems.
        » it is impossible to overstate the complexity of even
          the simplest looking applications.




            So You Think Objects Are Records With Byte Codes On The Side?   16
Starting At The Top
    Without creating an application specific technology,
    start with an understanding of how entity based
    applications work and what needs to be in place in
    order to create them.




            So You Think Objects Are Records With Byte Codes On The Side?   17
For Example, …
                                           Account defineMethod: [ | getHoldingsOverlap |
   A mutual fund analysis                  !lowerPct <- pctEq * 0.8; !upperPct <- … ;
                                           holdings send: [security].
   system powered by our                     select: [type isEquity].
   technology needs to                       collectListElementsFrom: [holdings].
                                             groupedBy: [account].
   rank funds based on                       select: [pctEq >= ^my lowerPct
                                                && pctEq <= ^my upperPct].
   the overlap of their                      extendBy: [
   holdings with another,                       !xref <- ^my holdings;
                                                !ofactor <- groupList total: [
   arbitrarily chosen,                            percentOfPort min: (^my xref at: security.

   fund:                                        ]
                                                    percentOfPort)

                                             ].
                                             sortDown: [ofactor]
                                           ];

          So You Think Objects Are Records With Byte Codes On The Side?                    18
Collections Are Everywhere
                                             Account defineMethod: [ | getHoldingsOverlap |
    Query and collection                     !lowerPct <- pctEq * 0.8; !upperPct <- … ;
                                             holdings send: [security].
    operations are                             select: [type isEquity].
    embedded throughout                        collectListElementsFrom: [holdings].
                                               groupedBy: [account].
    this application’s logic,                  select: [pctEq >= ^my lowerPct
                                                  && pctEq <= ^my upperPct].
    not simply at the                          extendBy: [
    ‘database’ end of a data                      !xref <- ^my holdings;
                                                  !ofactor <- groupList total: [
    pipeline.                                       percentOfPort min: (^my xref at: security.
                                                      percentOfPort)
                                                  ]
                                               ].
                                               sortDown: [ofactor]
                                             ];

            So You Think Objects Are Records With Byte Codes On The Side?                    19
Detail Counts
                                             Account defineMethod: [ | getHoldingsOverlap |
    The collection level                     !lowerPct <- pctEq * 0.8; !upperPct <- … ;
                                             holdings send: [security].
    detail associated with                     select: [type isEquity].
    an object is just as                       collectListElementsFrom: [holdings].
                                               groupedBy: [account].
    important as its                           select: [pctEq >= ^my lowerPct
                                                  && pctEq <= ^my upperPct].
    summary information                        extendBy: [
    and must be just as                           !xref <- ^my holdings;
                                                  !ofactor <- groupList total: [
    easily accessible.                              percentOfPort min: (^my xref at: security.
                                                      percentOfPort)
                                                  ]
                                               ].
                                               sortDown: [ofactor]
                                             ];

            So You Think Objects Are Records With Byte Codes On The Side?                    20
Information Is Dynamic
                                             Account defineMethod: [ | getHoldingsOverlap |
    New collections of                       !lowerPct <- pctEq * 0.8; !upperPct <- … ;
                                             holdings send: [security].
    data, complete with                        select: [type isEquity].
    new and additional                         collectListElementsFrom: [holdings].
                                               groupedBy: [account].
    properties, need to be                     select: [pctEq >= ^my lowerPct
                                                  && pctEq <= ^my upperPct].
    created, used, and                         extendBy: [
    returned ‘on-the-fly’.                        !xref <- ^my holdings;
                                                  !ofactor <- groupList total: [
                                                    percentOfPort min: (^my xref at: security.
                                                      percentOfPort)
                                                  ]
                                               ].
                                               sortDown: [ofactor]
                                             ];

            So You Think Objects Are Records With Byte Codes On The Side?                    21
Complexity Is Hidden
                                             Account defineMethod: [ | getHoldingsOverlap |
    Many complex details                     !lowerPct <- pctEq * 0.8; !upperPct <- … ;
                                             holdings send: [security].
    are hidden, including                      select: [type isEquity].
    the fact that important                    collectListElementsFrom: [holdings].
                                               groupedBy: [account].
    data used in even this                     select: [pctEq >= ^my lowerPct
                                                  && pctEq <= ^my upperPct].
    ‘simple’ application is                    extendBy: [
    time-varying and,                             !xref <- ^my holdings;
                                                  !ofactor <- groupList total: [
    therefore, context                              percentOfPort min: (^my xref at: security.

    sensitive.                                    ]
                                                      percentOfPort)

                                               ].
                                               sortDown: [ofactor]
                                             ];

            So You Think Objects Are Records With Byte Codes On The Side?                    22
Complexity Is Embeddable
   It is impossible to anticipate how encapsulated
   functionality will be used:

      TRoweFunds do: [^self getHoldingsOverlap first: 5 . do: […] ]

      ^today to: ^today - 1 years by: 1 quarterEnds. evaluate: [
        MagellanFund getHoldingsOverlap do: [ … ]
      ];




            So You Think Objects Are Records With Byte Codes On The Side?   23
Starting At The Top, Epilogue …
    The functionality required by entity based applications
    profoundly affects all of the technologies it touches
    without fitting neatly into any of them.




            So You Think Objects Are Records With Byte Codes On The Side?   24
… And Prologue:
   Time to start thinking outside the box and questioning
   assumptions, ...




           So You Think Objects Are Records With Byte Codes On The Side?   25
Questioning Assumptions
  From an application perspective:
    Entity based applications fit into a neat little
    box.
  From a technology perspective:
    That which an application sees and
    manipulates is the way it really works.




            So You Think Objects Are Records With Byte Codes On The Side?   26
Questioning Assumptions
  And its corollaries:
    Who said sets are defined by the elements they keep?
    Who said objects are records?




             So You Think Objects Are Records With Byte Codes On The Side?   27
Who said sets are defined by the
elements they keep?
    Sets have come to be known as ‘unique-ifers of things’.
    This operational definition is understandable given
    everyone’s intuitive concept of a set




            So You Think Objects Are Records With Byte Codes On The Side?   28
Set Elements Don’t Matter, …
    The intuitive definition of sets in terms of their
    elements imparts unnecessary structure.
    The structure it does impart is misplaced anyway.




             So You Think Objects Are Records With Byte Codes On The Side?   29
… And Sets Are Structureless
    A better intuitive definition
    for a set is that it is                       MySetOf3
    ‘collection of distinguishable
    things’, without reference to
    the particular things:
         my set of three things
         the Integers
                                                                              TheIntegers




              So You Think Objects Are Records With Byte Codes On The Side?           30
But Where Are The Elements?
   But where do you
   represent the fact that a                    MySetOf3

   particular set of three
   things ‘contains’ the
   elements {4, 14, 34}?


                                                                            TheIntegers




            So You Think Objects Are Records With Byte Codes On The Side?           31
In A Morphism, …
 m0
 1→4
                                              MySetOf3
 2 → 14
 3 → 34
                                                                          m0




                                                                               TheIntegers




          So You Think Objects Are Records With Byte Codes On The Side?                32
That, Along With The Set, Is
Unique Up To Isomorphism, …
 m0       i01         i02
 1→4      1→3         1→2
                                                 MySetOf3
 2 → 14   2→1         2→3
 3 → 34   3→2         3→1                        i01
 i10                  i12                                     i10          m0
 1→2                  1→3            i02   i20                       m1
 2→3                  2→1                              S1
 3→1                  3→2
 i20      i21         m2                                i12    i21
 1→3      1→2         1 → 34                                          m2        TheIntegers
 2→1      2→3         2→4
 3→2      3→1         3 → 14                                    S2



           So You Think Objects Are Records With Byte Codes On The Side?                33
Only Morphism Structure Matters
    The properties and internal structure of morphisms and
    families of morphisms:
       express constraints
       implement operations
       characterize transformations and relationships
       provide an algebraic framework
    These roles are not mutually exclusive.



            So You Think Objects Are Records With Byte Codes On The Side?   34
Morphisms Express Constraints
    Morphism structure
    expresses constraints:                        MySetOf3

       m0, as the ‘element’ specifier
       for MySetOf3, must be                                                  m0
       injective.



               m0
                                                                                   TheIntegers
               1→4
               2 → 14
               3 → 34


              So You Think Objects Are Records With Byte Codes On The Side?                35
Morphisms Implement Operations
   Morphism structure supports
   operation implementation:                     MySetOf3

      m1 = m0 º i10
                                                             i10             m0
      ∀j∈S1 m1[j] = m0[i10[j]]
                                                                   m1
                                                    S1

   i10        m0               m1
   1→2        1→4              1 → 14                                             TheIntegers
   2→3        2 → 14           2 → 34
   3→1        3 → 34           3→4



             So You Think Objects Are Records With Byte Codes On The Side?                36
Morphisms Characterize
Transformations and Relationships
 Composition                                       Product (Projection)
                                                               pr0
          g                f                                          pr1
                                                                      …
                                                               prn
              fºg


 Partition                                         Disjoint Union
 Values                          Elements                       in0
              v=kºe                                                   in1
                                                                       …
          k               e                                     inn

               Collections

                    So You Think Objects Are Records With Byte Codes On The Side?   37
Morphisms Characterize
Transformations and Relationships
 Instantiation                                    Deletion
             Sv0                                                    Sv0
                   in                                                     in

             Sv1                                                    Sv1



 Insertion                                        Join




                   So You Think Objects Are Records With Byte Codes On The Side?   38
So Where Are We?
   Structureless sets.
   Information bearing morphisms.
   What does this have to do with objects and data bases?




            So You Think Objects Are Records With Byte Codes On The Side?   39
Structureless Sets Denote Things
    Structureless sets
                                               Account
    represent sets of
    distinguishable things:                                                  AccountId

       the set of Account
       objects                                 Holding
       the set of Holding
       objects
                                                                             SecurityId
       the set of Security
       objects                                 Security



             So You Think Objects Are Records With Byte Codes On The Side?          40
Morphisms Hold Values
   Information bearing
                                            Account
   morphisms hold                                                id
   property values …                                                           AccountId


                                                                      accountId
                                            Holding
                                                                      securityId


                                                                               SecurityId
                                                                 id
                                            Security



          So You Think Objects Are Records With Byte Codes On The Side?               41
… Including Navigational Values
  …including the values of
                                              Account
   navigational properties.                                        id
                                                                                 AccountId
                                               account

                                                                        accountId
                                              Holding
                                                                        securityId
                                               security
                                                                                 SecurityId
                                                                   id
                                              Security



            So You Think Objects Are Records With Byte Codes On The Side?               42
… Without Violating Theory
  …while remaining on
                                             Account
   firm theoretical                                               id
                                        account
   ground.                                                                      AccountId


                                                                       accountId
                                             Holding
                                                                       securityId


                                                                                SecurityId
                                       security
                                                                  id
                                             Security



           So You Think Objects Are Records With Byte Codes On The Side?               43
Properties Can Be Polymorphic
    Properties are usually
                                              Account
    polymorphic…                                                   id
                                                                                 AccountId
                                               account

                                                                        accountId
                                              Holding
                                                                        securityId
                                               security
                                                                                 SecurityId
                                                                   id
                                              Security



            So You Think Objects Are Records With Byte Codes On The Side?               44
So Morphisms Need Fine Structure
 Portfolio                          super
                                                              Account
             Aggregate
                                Index                                     id
                                                                                        AccountId
                 in0             in1              in2
                                                              Holding
account                                                                        accountId

                                                                               securityId
                                                        security
                                                                                        SecurityId
      … like disjoint union.                                              id
                                                        Security



                   So You Think Objects Are Records With Byte Codes On The Side?               45
Properties Can Be Time-Varying
    Properties often
                                               Account
    express time varying                                            id
    relationships.                              account
                                                                                  AccountId

    We won’t go there right                                              accountId
    now except to say that the                 Holding
                                                                         securityId
    fine structure gets even                    security
    richer.                                                                       SecurityId
                                                                    id
                                               Security
                                                                   price


             So You Think Objects Are Records With Byte Codes On The Side?               46
It Computes …
                                                                  Account
                                                                               id
                                             Partition
                                                                                             AccountId
                                                                       account
                                                        Compose                     accountId
                                                           Holding
 collectListElementsFrom: [holdings].                                               securityId
 groupedBy: [account].                                     security
    …
 extendBy: [                                                                                 SecurityId
    …                                                                          id
    !ofactor <- groupList total: […]                      Security
    …
 ];

                        So You Think Objects Are Records With Byte Codes On The Side?               47
In Parallel …
Portfolio                          super
                                                             Account
            Aggregate
                               Index                                     id
                                                                                       AccountId
                in0             in1              in2
                                                             Holding
                                                                              accountId

                                                                              securityId
                                                       security
                                                                                       SecurityId
               Compose/Join                                              id
                                                       Security



                  So You Think Objects Are Records With Byte Codes On The Side?               48
But All Of This Is Well Hidden …
                                            Account defineMethod: [ | getHoldingsOverlap |
    All a user sees is a                    !lowerPct <- pctEq * 0.8; !upperPct <- … ;
                                            holdings send: [security].
    conventional object                       select: [type isEquity].
    oriented programming                      collectListElementsFrom: [holdings].
                                              groupedBy: [account].
    language.                                 select: [pctEq >= ^my lowerPct
                                                 && pctEq <= ^my upperPct].
                                              extendBy: [
                                                 !xref <- ^my holdings;
                                                 !ofactor <- groupList total: [
                                                   percentOfPort min: (^my xref at: security.
                                                     percentOfPort)
                                                 ]
                                              ].
                                              sortDown: [ofactor]
                                            ];

           So You Think Objects Are Records With Byte Codes On The Side?                    49
This Is Necessarily An Overview
    What you have seen is an overview of a straightforward
    but non-trivial technology.
    The principles described here easily address the data
    definition and manipulation needs of a general purpose,
    integrated data base management, data base
    programming environment.




            So You Think Objects Are Records With Byte Codes On The Side?   50
Questioning Assumptions - Reprise
  From an application perspective:
    Entity based applications fit into a neat little
    box.
  From a technology perspective:
    That which an application sees and
    manipulates is the way it really works.




            So You Think Objects Are Records With Byte Codes On The Side?   51
By The Way, What Are Objects?
   The theory underlying all of this is Category Theory.
   By the way, objects are sub-categories of the concrete
   category Set.




            So You Think Objects Are Records With Byte Codes On The Side?   52
Where Are We?
   commercially proven
   solid theoretical underpinnings
   unified, inherently parallel data base programming
   language integration




           So You Think Objects Are Records With Byte Codes On The Side?   53
And, Of Course …
   Objects are records with byte codes on the side?


   It Ain’t Necessarily So.




             So You Think Objects Are Records With Byte Codes On The Side?   54

More Related Content

What's hot

Java Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBJava Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBMongoDB
 
Java Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBJava Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBTobias Trelle
 
Java Development with MongoDB
Java Development with MongoDBJava Development with MongoDB
Java Development with MongoDBScott Hernandez
 
Objective-C Crash Course for Web Developers
Objective-C Crash Course for Web DevelopersObjective-C Crash Course for Web Developers
Objective-C Crash Course for Web DevelopersJoris Verbogt
 
Devoxx08 - Nuxeo Core, JCR 2, CMIS
Devoxx08 - Nuxeo Core, JCR 2, CMIS Devoxx08 - Nuxeo Core, JCR 2, CMIS
Devoxx08 - Nuxeo Core, JCR 2, CMIS Nuxeo
 
MongoDB + Java + Spring Data
MongoDB + Java + Spring DataMongoDB + Java + Spring Data
MongoDB + Java + Spring DataAnton Sulzhenko
 
Start Wrap Episode 11: A New Rope
Start Wrap Episode 11: A New RopeStart Wrap Episode 11: A New Rope
Start Wrap Episode 11: A New RopeYung-Yu Chen
 
Paintfree Object-Document Mapping for MongoDB by Philipp Krenn
Paintfree Object-Document Mapping for MongoDB by Philipp KrennPaintfree Object-Document Mapping for MongoDB by Philipp Krenn
Paintfree Object-Document Mapping for MongoDB by Philipp KrennJavaDayUA
 
What do you mean, Backwards Compatibility?
What do you mean, Backwards Compatibility?What do you mean, Backwards Compatibility?
What do you mean, Backwards Compatibility?Trisha Gee
 
Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Tobias Trelle
 
Lab Log Summer 2016 - Sheng Li
Lab Log Summer 2016 - Sheng LiLab Log Summer 2016 - Sheng Li
Lab Log Summer 2016 - Sheng LiSheng Li
 
Objective-C for iOS Application Development
Objective-C for iOS Application DevelopmentObjective-C for iOS Application Development
Objective-C for iOS Application DevelopmentDhaval Kaneria
 
CIS14: Developing with OAuth and OIDC Connect
CIS14: Developing with OAuth and OIDC ConnectCIS14: Developing with OAuth and OIDC Connect
CIS14: Developing with OAuth and OIDC ConnectCloudIDSummit
 
descriptive programming
descriptive programmingdescriptive programming
descriptive programmingAnand Dhana
 
iOS Development with Blocks
iOS Development with BlocksiOS Development with Blocks
iOS Development with BlocksJeff Kelley
 
One BSON to Rule Them
One BSON to Rule ThemOne BSON to Rule Them
One BSON to Rule ThemDavid Golden
 

What's hot (20)

Java Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBJava Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDB
 
Java Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBJava Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDB
 
Java Development with MongoDB
Java Development with MongoDBJava Development with MongoDB
Java Development with MongoDB
 
Objective-C Crash Course for Web Developers
Objective-C Crash Course for Web DevelopersObjective-C Crash Course for Web Developers
Objective-C Crash Course for Web Developers
 
Devoxx08 - Nuxeo Core, JCR 2, CMIS
Devoxx08 - Nuxeo Core, JCR 2, CMIS Devoxx08 - Nuxeo Core, JCR 2, CMIS
Devoxx08 - Nuxeo Core, JCR 2, CMIS
 
MongoDB + Java + Spring Data
MongoDB + Java + Spring DataMongoDB + Java + Spring Data
MongoDB + Java + Spring Data
 
Start Wrap Episode 11: A New Rope
Start Wrap Episode 11: A New RopeStart Wrap Episode 11: A New Rope
Start Wrap Episode 11: A New Rope
 
Paintfree Object-Document Mapping for MongoDB by Philipp Krenn
Paintfree Object-Document Mapping for MongoDB by Philipp KrennPaintfree Object-Document Mapping for MongoDB by Philipp Krenn
Paintfree Object-Document Mapping for MongoDB by Philipp Krenn
 
What do you mean, Backwards Compatibility?
What do you mean, Backwards Compatibility?What do you mean, Backwards Compatibility?
What do you mean, Backwards Compatibility?
 
Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Morphia, Spring Data & Co.
Morphia, Spring Data & Co.
 
iOS Session-2
iOS Session-2iOS Session-2
iOS Session-2
 
Lab Log Summer 2016 - Sheng Li
Lab Log Summer 2016 - Sheng LiLab Log Summer 2016 - Sheng Li
Lab Log Summer 2016 - Sheng Li
 
Objective-C for iOS Application Development
Objective-C for iOS Application DevelopmentObjective-C for iOS Application Development
Objective-C for iOS Application Development
 
CIS14: Developing with OAuth and OIDC Connect
CIS14: Developing with OAuth and OIDC ConnectCIS14: Developing with OAuth and OIDC Connect
CIS14: Developing with OAuth and OIDC Connect
 
descriptive programming
descriptive programmingdescriptive programming
descriptive programming
 
Preon (J-Fall 2008)
Preon (J-Fall 2008)Preon (J-Fall 2008)
Preon (J-Fall 2008)
 
iOS Development with Blocks
iOS Development with BlocksiOS Development with Blocks
iOS Development with Blocks
 
One BSON to Rule Them
One BSON to Rule ThemOne BSON to Rule Them
One BSON to Rule Them
 
iOS Basic
iOS BasiciOS Basic
iOS Basic
 
C++ Chapter I
C++ Chapter IC++ Chapter I
C++ Chapter I
 

Viewers also liked

Recommendations play @flipkart (3)
Recommendations play @flipkart (3)Recommendations play @flipkart (3)
Recommendations play @flipkart (3)hava101
 
Baptcare Family and Community Services - client feedback 2015
Baptcare Family and Community Services - client feedback 2015Baptcare Family and Community Services - client feedback 2015
Baptcare Family and Community Services - client feedback 2015Baptcare
 
Test kreative
Test kreativeTest kreative
Test kreativeLina Fone
 
The simple hard problem of time
The simple hard problem of timeThe simple hard problem of time
The simple hard problem of timeMichael Caruso
 
02 cloocaチュートリアル(gr-sakura)
02 cloocaチュートリアル(gr-sakura)02 cloocaチュートリアル(gr-sakura)
02 cloocaチュートリアル(gr-sakura)Kenji Hisazumi
 
Baptcare Family & Community Services Client Feedback Results September 2012–D...
Baptcare Family & Community Services Client Feedback Results September 2012–D...Baptcare Family & Community Services Client Feedback Results September 2012–D...
Baptcare Family & Community Services Client Feedback Results September 2012–D...Baptcare
 
Gardner's Multiple Intelligences
Gardner's Multiple IntelligencesGardner's Multiple Intelligences
Gardner's Multiple Intelligencescaseylashaek
 
Baptcare Family & Community Services Client Feedback Results September 2012–...
Baptcare Family & Community Services Client Feedback Results September 2012–...Baptcare Family & Community Services Client Feedback Results September 2012–...
Baptcare Family & Community Services Client Feedback Results September 2012–...Baptcare
 
Reinforcement & Punishment
Reinforcement & PunishmentReinforcement & Punishment
Reinforcement & Punishmentcaseylashaek
 
Recommendations play @flipkart
Recommendations play @flipkartRecommendations play @flipkart
Recommendations play @flipkarthava101
 
renewable sources of energy
renewable sources of energyrenewable sources of energy
renewable sources of energyRemar Docor
 

Viewers also liked (16)

Recommendations play @flipkart (3)
Recommendations play @flipkart (3)Recommendations play @flipkart (3)
Recommendations play @flipkart (3)
 
Baptcare Family and Community Services - client feedback 2015
Baptcare Family and Community Services - client feedback 2015Baptcare Family and Community Services - client feedback 2015
Baptcare Family and Community Services - client feedback 2015
 
Test kreative
Test kreativeTest kreative
Test kreative
 
The simple hard problem of time
The simple hard problem of timeThe simple hard problem of time
The simple hard problem of time
 
Rpp matematika
Rpp matematikaRpp matematika
Rpp matematika
 
Android fragmentation
Android fragmentationAndroid fragmentation
Android fragmentation
 
02 cloocaチュートリアル(gr-sakura)
02 cloocaチュートリアル(gr-sakura)02 cloocaチュートリアル(gr-sakura)
02 cloocaチュートリアル(gr-sakura)
 
Baptcare Family & Community Services Client Feedback Results September 2012–D...
Baptcare Family & Community Services Client Feedback Results September 2012–D...Baptcare Family & Community Services Client Feedback Results September 2012–D...
Baptcare Family & Community Services Client Feedback Results September 2012–D...
 
Gardner's Multiple Intelligences
Gardner's Multiple IntelligencesGardner's Multiple Intelligences
Gardner's Multiple Intelligences
 
Baptcare Family & Community Services Client Feedback Results September 2012–...
Baptcare Family & Community Services Client Feedback Results September 2012–...Baptcare Family & Community Services Client Feedback Results September 2012–...
Baptcare Family & Community Services Client Feedback Results September 2012–...
 
Rohit khare
Rohit khareRohit khare
Rohit khare
 
Reinforcement & Punishment
Reinforcement & PunishmentReinforcement & Punishment
Reinforcement & Punishment
 
Rape1
Rape1Rape1
Rape1
 
Recommendations play @flipkart
Recommendations play @flipkartRecommendations play @flipkart
Recommendations play @flipkart
 
Citadelle Gin
Citadelle GinCitadelle Gin
Citadelle Gin
 
renewable sources of energy
renewable sources of energyrenewable sources of energy
renewable sources of energy
 

Similar to Objects arent records with byte codes on the side

Approaches for application request throttling - dotNetCologne
Approaches for application request throttling - dotNetCologneApproaches for application request throttling - dotNetCologne
Approaches for application request throttling - dotNetCologneMaarten Balliauw
 
ConFoo Montreal - Approaches for application request throttling
ConFoo Montreal - Approaches for application request throttlingConFoo Montreal - Approaches for application request throttling
ConFoo Montreal - Approaches for application request throttlingMaarten Balliauw
 
Approaches for application request throttling - Cloud Developer Days Poland
Approaches for application request throttling - Cloud Developer Days PolandApproaches for application request throttling - Cloud Developer Days Poland
Approaches for application request throttling - Cloud Developer Days PolandMaarten Balliauw
 
OpenERP Technical Memento
OpenERP Technical MementoOpenERP Technical Memento
OpenERP Technical MementoOdoo
 
iPhone Workshop Mobile Monday Ahmedabad
iPhone Workshop Mobile Monday AhmedabadiPhone Workshop Mobile Monday Ahmedabad
iPhone Workshop Mobile Monday Ahmedabadmomoahmedabad
 
Code instrumentation
Code instrumentationCode instrumentation
Code instrumentationMennan Tekbir
 
Modular Web Applications With Netzke
Modular Web Applications With NetzkeModular Web Applications With Netzke
Modular Web Applications With Netzkenetzke
 
Can We Trust the Libraries We Use?
Can We Trust the Libraries We Use?Can We Trust the Libraries We Use?
Can We Trust the Libraries We Use?Andrey Karpov
 
Patterns of Enterprise Application Architecture (by example)
Patterns of Enterprise Application Architecture (by example)Patterns of Enterprise Application Architecture (by example)
Patterns of Enterprise Application Architecture (by example)Paulo Gandra de Sousa
 
Using eBPF to Measure the k8s Cluster Health
Using eBPF to Measure the k8s Cluster HealthUsing eBPF to Measure the k8s Cluster Health
Using eBPF to Measure the k8s Cluster HealthScyllaDB
 
Gene Hynson [InfluxData] | How We Built the MQTT Native Collector | InfluxDay...
Gene Hynson [InfluxData] | How We Built the MQTT Native Collector | InfluxDay...Gene Hynson [InfluxData] | How We Built the MQTT Native Collector | InfluxDay...
Gene Hynson [InfluxData] | How We Built the MQTT Native Collector | InfluxDay...InfluxData
 
Introduction to aop
Introduction to aopIntroduction to aop
Introduction to aopDror Helper
 
Cluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CCluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CSteffen Wenz
 
Building an Observability Platform in 389 Difficult Steps
Building an Observability Platform in 389 Difficult StepsBuilding an Observability Platform in 389 Difficult Steps
Building an Observability Platform in 389 Difficult StepsDigitalOcean
 
Python business intelligence (PyData 2012 talk)
Python business intelligence (PyData 2012 talk)Python business intelligence (PyData 2012 talk)
Python business intelligence (PyData 2012 talk)Stefan Urbanek
 
Java Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
Java Hurdling: Obstacles and Techniques in Java Client Penetration-TestingJava Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
Java Hurdling: Obstacles and Techniques in Java Client Penetration-TestingTal Melamed
 
Big data analysis in python @ PyCon.tw 2013
Big data analysis in python @ PyCon.tw 2013Big data analysis in python @ PyCon.tw 2013
Big data analysis in python @ PyCon.tw 2013Jimmy Lai
 

Similar to Objects arent records with byte codes on the side (20)

Approaches for application request throttling - dotNetCologne
Approaches for application request throttling - dotNetCologneApproaches for application request throttling - dotNetCologne
Approaches for application request throttling - dotNetCologne
 
Coding Naked 2023
Coding Naked 2023Coding Naked 2023
Coding Naked 2023
 
ConFoo Montreal - Approaches for application request throttling
ConFoo Montreal - Approaches for application request throttlingConFoo Montreal - Approaches for application request throttling
ConFoo Montreal - Approaches for application request throttling
 
Approaches for application request throttling - Cloud Developer Days Poland
Approaches for application request throttling - Cloud Developer Days PolandApproaches for application request throttling - Cloud Developer Days Poland
Approaches for application request throttling - Cloud Developer Days Poland
 
OpenERP Technical Memento
OpenERP Technical MementoOpenERP Technical Memento
OpenERP Technical Memento
 
iPhone Workshop Mobile Monday Ahmedabad
iPhone Workshop Mobile Monday AhmedabadiPhone Workshop Mobile Monday Ahmedabad
iPhone Workshop Mobile Monday Ahmedabad
 
Code instrumentation
Code instrumentationCode instrumentation
Code instrumentation
 
Modular Web Applications With Netzke
Modular Web Applications With NetzkeModular Web Applications With Netzke
Modular Web Applications With Netzke
 
Can We Trust the Libraries We Use?
Can We Trust the Libraries We Use?Can We Trust the Libraries We Use?
Can We Trust the Libraries We Use?
 
Tdd,Ioc
Tdd,IocTdd,Ioc
Tdd,Ioc
 
Patterns of Enterprise Application Architecture (by example)
Patterns of Enterprise Application Architecture (by example)Patterns of Enterprise Application Architecture (by example)
Patterns of Enterprise Application Architecture (by example)
 
PoEAA by Example
PoEAA by ExamplePoEAA by Example
PoEAA by Example
 
Using eBPF to Measure the k8s Cluster Health
Using eBPF to Measure the k8s Cluster HealthUsing eBPF to Measure the k8s Cluster Health
Using eBPF to Measure the k8s Cluster Health
 
Gene Hynson [InfluxData] | How We Built the MQTT Native Collector | InfluxDay...
Gene Hynson [InfluxData] | How We Built the MQTT Native Collector | InfluxDay...Gene Hynson [InfluxData] | How We Built the MQTT Native Collector | InfluxDay...
Gene Hynson [InfluxData] | How We Built the MQTT Native Collector | InfluxDay...
 
Introduction to aop
Introduction to aopIntroduction to aop
Introduction to aop
 
Cluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CCluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in C
 
Building an Observability Platform in 389 Difficult Steps
Building an Observability Platform in 389 Difficult StepsBuilding an Observability Platform in 389 Difficult Steps
Building an Observability Platform in 389 Difficult Steps
 
Python business intelligence (PyData 2012 talk)
Python business intelligence (PyData 2012 talk)Python business intelligence (PyData 2012 talk)
Python business intelligence (PyData 2012 talk)
 
Java Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
Java Hurdling: Obstacles and Techniques in Java Client Penetration-TestingJava Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
Java Hurdling: Obstacles and Techniques in Java Client Penetration-Testing
 
Big data analysis in python @ PyCon.tw 2013
Big data analysis in python @ PyCon.tw 2013Big data analysis in python @ PyCon.tw 2013
Big data analysis in python @ PyCon.tw 2013
 

Recently uploaded

Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
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
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsAndrey Dotsenko
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
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
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 

Recently uploaded (20)

Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
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
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
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
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 

Objects arent records with byte codes on the side

  • 1. So You Think Objects Are Records With Byte Codes On The Side? T h i n k A g a i n
  • 2. Where Do Objects Fit? As a vehicle for implementing programs. So You Think Objects Are Records With Byte Codes On The Side? 2
  • 3. Where Do Objects Fit? As a vehicle for implementing programs. As a vehicle for modeling actual business entities and the diverse, complex rules that govern their interpretation and use. So You Think Objects Are Records With Byte Codes On The Side? 3
  • 4. How Do We View Objects? Traditional thinking holds that objects are the managers and clients of state stored in data base records. So You Think Objects Are Records With Byte Codes On The Side? 4
  • 5. How Do We View Objects? Traditional thinking holds that objects are the managers and clients of state stored in data base records. An intuitively appealing conceptual model... So You Think Objects Are Records With Byte Codes On The Side? 5
  • 6. How Do We View Objects? Traditional thinking holds that objects are the managers and clients of state stored in data base records. An intuitively appealing conceptual model... … that is inherently external to the data base. So You Think Objects Are Records With Byte Codes On The Side? 6
  • 7. How Do We Implement Objects? Traditional thinking holds that objects are records with methods on the side. So You Think Objects Are Records With Byte Codes On The Side? 7
  • 8. How Do We Implement Objects? Traditional thinking holds that objects are records with methods on the side. An intuitively appealing conceptual model... So You Think Objects Are Records With Byte Codes On The Side? 8
  • 9. How Do We Implement Objects? Traditional thinking holds that objects are records with methods on the side. An intuitively appealing conceptual model... … that insists on viewing the world one individual at a time. So You Think Objects Are Records With Byte Codes On The Side? 9
  • 10. So What’s Wrong With That? It may work for clients that consume relatively small amounts of data... So You Think Objects Are Records With Byte Codes On The Side? 10
  • 11. So What’s Wrong With That? It may work for clients that consume relatively small amounts of data... It may work for programs… So You Think Objects Are Records With Byte Codes On The Side? 11
  • 12. So What’s Wrong With That? It may work for clients that consume relatively small amounts of data... It may work for programs… … but it leaves the hard problem of implementing scaleable business objects, particularly entity objects, as an exercise for the ‘reader’. So You Think Objects Are Records With Byte Codes On The Side? 12
  • 13. So Where Do We Go Next? Establishing Principles Starting At The Top Questioning Assumptions Developing a New Foundation So You Think Objects Are Records With Byte Codes On The Side? 13
  • 14. Establishing Principles From an application perspective: comprehensibility » most applications we encounter are ultimately developed by involved, business knowledgeable users, not programmers. integration » solving interface and impedance matching problems is a jargon laden waste of time. So You Think Objects Are Records With Byte Codes On The Side? 14
  • 15. Establishing Principles From a technology perspective: theory » a collection centric theory of operation is critical to achieving reliable application scalability and deployment. integration » solving interface and impedance matching problems is a jargon laden waste of time. So You Think Objects Are Records With Byte Codes On The Side? 15
  • 16. Establishing Principles From any perspective: generality » most applications are a collection of many simple, hard problems. » it is impossible to overstate the complexity of even the simplest looking applications. So You Think Objects Are Records With Byte Codes On The Side? 16
  • 17. Starting At The Top Without creating an application specific technology, start with an understanding of how entity based applications work and what needs to be in place in order to create them. So You Think Objects Are Records With Byte Codes On The Side? 17
  • 18. For Example, … Account defineMethod: [ | getHoldingsOverlap | A mutual fund analysis !lowerPct <- pctEq * 0.8; !upperPct <- … ; holdings send: [security]. system powered by our select: [type isEquity]. technology needs to collectListElementsFrom: [holdings]. groupedBy: [account]. rank funds based on select: [pctEq >= ^my lowerPct && pctEq <= ^my upperPct]. the overlap of their extendBy: [ holdings with another, !xref <- ^my holdings; !ofactor <- groupList total: [ arbitrarily chosen, percentOfPort min: (^my xref at: security. fund: ] percentOfPort) ]. sortDown: [ofactor] ]; So You Think Objects Are Records With Byte Codes On The Side? 18
  • 19. Collections Are Everywhere Account defineMethod: [ | getHoldingsOverlap | Query and collection !lowerPct <- pctEq * 0.8; !upperPct <- … ; holdings send: [security]. operations are select: [type isEquity]. embedded throughout collectListElementsFrom: [holdings]. groupedBy: [account]. this application’s logic, select: [pctEq >= ^my lowerPct && pctEq <= ^my upperPct]. not simply at the extendBy: [ ‘database’ end of a data !xref <- ^my holdings; !ofactor <- groupList total: [ pipeline. percentOfPort min: (^my xref at: security. percentOfPort) ] ]. sortDown: [ofactor] ]; So You Think Objects Are Records With Byte Codes On The Side? 19
  • 20. Detail Counts Account defineMethod: [ | getHoldingsOverlap | The collection level !lowerPct <- pctEq * 0.8; !upperPct <- … ; holdings send: [security]. detail associated with select: [type isEquity]. an object is just as collectListElementsFrom: [holdings]. groupedBy: [account]. important as its select: [pctEq >= ^my lowerPct && pctEq <= ^my upperPct]. summary information extendBy: [ and must be just as !xref <- ^my holdings; !ofactor <- groupList total: [ easily accessible. percentOfPort min: (^my xref at: security. percentOfPort) ] ]. sortDown: [ofactor] ]; So You Think Objects Are Records With Byte Codes On The Side? 20
  • 21. Information Is Dynamic Account defineMethod: [ | getHoldingsOverlap | New collections of !lowerPct <- pctEq * 0.8; !upperPct <- … ; holdings send: [security]. data, complete with select: [type isEquity]. new and additional collectListElementsFrom: [holdings]. groupedBy: [account]. properties, need to be select: [pctEq >= ^my lowerPct && pctEq <= ^my upperPct]. created, used, and extendBy: [ returned ‘on-the-fly’. !xref <- ^my holdings; !ofactor <- groupList total: [ percentOfPort min: (^my xref at: security. percentOfPort) ] ]. sortDown: [ofactor] ]; So You Think Objects Are Records With Byte Codes On The Side? 21
  • 22. Complexity Is Hidden Account defineMethod: [ | getHoldingsOverlap | Many complex details !lowerPct <- pctEq * 0.8; !upperPct <- … ; holdings send: [security]. are hidden, including select: [type isEquity]. the fact that important collectListElementsFrom: [holdings]. groupedBy: [account]. data used in even this select: [pctEq >= ^my lowerPct && pctEq <= ^my upperPct]. ‘simple’ application is extendBy: [ time-varying and, !xref <- ^my holdings; !ofactor <- groupList total: [ therefore, context percentOfPort min: (^my xref at: security. sensitive. ] percentOfPort) ]. sortDown: [ofactor] ]; So You Think Objects Are Records With Byte Codes On The Side? 22
  • 23. Complexity Is Embeddable It is impossible to anticipate how encapsulated functionality will be used: TRoweFunds do: [^self getHoldingsOverlap first: 5 . do: […] ] ^today to: ^today - 1 years by: 1 quarterEnds. evaluate: [ MagellanFund getHoldingsOverlap do: [ … ] ]; So You Think Objects Are Records With Byte Codes On The Side? 23
  • 24. Starting At The Top, Epilogue … The functionality required by entity based applications profoundly affects all of the technologies it touches without fitting neatly into any of them. So You Think Objects Are Records With Byte Codes On The Side? 24
  • 25. … And Prologue: Time to start thinking outside the box and questioning assumptions, ... So You Think Objects Are Records With Byte Codes On The Side? 25
  • 26. Questioning Assumptions From an application perspective: Entity based applications fit into a neat little box. From a technology perspective: That which an application sees and manipulates is the way it really works. So You Think Objects Are Records With Byte Codes On The Side? 26
  • 27. Questioning Assumptions And its corollaries: Who said sets are defined by the elements they keep? Who said objects are records? So You Think Objects Are Records With Byte Codes On The Side? 27
  • 28. Who said sets are defined by the elements they keep? Sets have come to be known as ‘unique-ifers of things’. This operational definition is understandable given everyone’s intuitive concept of a set So You Think Objects Are Records With Byte Codes On The Side? 28
  • 29. Set Elements Don’t Matter, … The intuitive definition of sets in terms of their elements imparts unnecessary structure. The structure it does impart is misplaced anyway. So You Think Objects Are Records With Byte Codes On The Side? 29
  • 30. … And Sets Are Structureless A better intuitive definition for a set is that it is MySetOf3 ‘collection of distinguishable things’, without reference to the particular things: my set of three things the Integers TheIntegers So You Think Objects Are Records With Byte Codes On The Side? 30
  • 31. But Where Are The Elements? But where do you represent the fact that a MySetOf3 particular set of three things ‘contains’ the elements {4, 14, 34}? TheIntegers So You Think Objects Are Records With Byte Codes On The Side? 31
  • 32. In A Morphism, … m0 1→4 MySetOf3 2 → 14 3 → 34 m0 TheIntegers So You Think Objects Are Records With Byte Codes On The Side? 32
  • 33. That, Along With The Set, Is Unique Up To Isomorphism, … m0 i01 i02 1→4 1→3 1→2 MySetOf3 2 → 14 2→1 2→3 3 → 34 3→2 3→1 i01 i10 i12 i10 m0 1→2 1→3 i02 i20 m1 2→3 2→1 S1 3→1 3→2 i20 i21 m2 i12 i21 1→3 1→2 1 → 34 m2 TheIntegers 2→1 2→3 2→4 3→2 3→1 3 → 14 S2 So You Think Objects Are Records With Byte Codes On The Side? 33
  • 34. Only Morphism Structure Matters The properties and internal structure of morphisms and families of morphisms: express constraints implement operations characterize transformations and relationships provide an algebraic framework These roles are not mutually exclusive. So You Think Objects Are Records With Byte Codes On The Side? 34
  • 35. Morphisms Express Constraints Morphism structure expresses constraints: MySetOf3 m0, as the ‘element’ specifier for MySetOf3, must be m0 injective. m0 TheIntegers 1→4 2 → 14 3 → 34 So You Think Objects Are Records With Byte Codes On The Side? 35
  • 36. Morphisms Implement Operations Morphism structure supports operation implementation: MySetOf3 m1 = m0 º i10 i10 m0 ∀j∈S1 m1[j] = m0[i10[j]] m1 S1 i10 m0 m1 1→2 1→4 1 → 14 TheIntegers 2→3 2 → 14 2 → 34 3→1 3 → 34 3→4 So You Think Objects Are Records With Byte Codes On The Side? 36
  • 37. Morphisms Characterize Transformations and Relationships Composition Product (Projection) pr0 g f pr1 … prn fºg Partition Disjoint Union Values Elements in0 v=kºe in1 … k e inn Collections So You Think Objects Are Records With Byte Codes On The Side? 37
  • 38. Morphisms Characterize Transformations and Relationships Instantiation Deletion Sv0 Sv0 in in Sv1 Sv1 Insertion Join So You Think Objects Are Records With Byte Codes On The Side? 38
  • 39. So Where Are We? Structureless sets. Information bearing morphisms. What does this have to do with objects and data bases? So You Think Objects Are Records With Byte Codes On The Side? 39
  • 40. Structureless Sets Denote Things Structureless sets Account represent sets of distinguishable things: AccountId the set of Account objects Holding the set of Holding objects SecurityId the set of Security objects Security So You Think Objects Are Records With Byte Codes On The Side? 40
  • 41. Morphisms Hold Values Information bearing Account morphisms hold id property values … AccountId accountId Holding securityId SecurityId id Security So You Think Objects Are Records With Byte Codes On The Side? 41
  • 42. … Including Navigational Values …including the values of Account navigational properties. id AccountId account accountId Holding securityId security SecurityId id Security So You Think Objects Are Records With Byte Codes On The Side? 42
  • 43. … Without Violating Theory …while remaining on Account firm theoretical id account ground. AccountId accountId Holding securityId SecurityId security id Security So You Think Objects Are Records With Byte Codes On The Side? 43
  • 44. Properties Can Be Polymorphic Properties are usually Account polymorphic… id AccountId account accountId Holding securityId security SecurityId id Security So You Think Objects Are Records With Byte Codes On The Side? 44
  • 45. So Morphisms Need Fine Structure Portfolio super Account Aggregate Index id AccountId in0 in1 in2 Holding account accountId securityId security SecurityId … like disjoint union. id Security So You Think Objects Are Records With Byte Codes On The Side? 45
  • 46. Properties Can Be Time-Varying Properties often Account express time varying id relationships. account AccountId We won’t go there right accountId now except to say that the Holding securityId fine structure gets even security richer. SecurityId id Security price So You Think Objects Are Records With Byte Codes On The Side? 46
  • 47. It Computes … Account id Partition AccountId account Compose accountId Holding collectListElementsFrom: [holdings]. securityId groupedBy: [account]. security … extendBy: [ SecurityId … id !ofactor <- groupList total: […] Security … ]; So You Think Objects Are Records With Byte Codes On The Side? 47
  • 48. In Parallel … Portfolio super Account Aggregate Index id AccountId in0 in1 in2 Holding accountId securityId security SecurityId Compose/Join id Security So You Think Objects Are Records With Byte Codes On The Side? 48
  • 49. But All Of This Is Well Hidden … Account defineMethod: [ | getHoldingsOverlap | All a user sees is a !lowerPct <- pctEq * 0.8; !upperPct <- … ; holdings send: [security]. conventional object select: [type isEquity]. oriented programming collectListElementsFrom: [holdings]. groupedBy: [account]. language. select: [pctEq >= ^my lowerPct && pctEq <= ^my upperPct]. extendBy: [ !xref <- ^my holdings; !ofactor <- groupList total: [ percentOfPort min: (^my xref at: security. percentOfPort) ] ]. sortDown: [ofactor] ]; So You Think Objects Are Records With Byte Codes On The Side? 49
  • 50. This Is Necessarily An Overview What you have seen is an overview of a straightforward but non-trivial technology. The principles described here easily address the data definition and manipulation needs of a general purpose, integrated data base management, data base programming environment. So You Think Objects Are Records With Byte Codes On The Side? 50
  • 51. Questioning Assumptions - Reprise From an application perspective: Entity based applications fit into a neat little box. From a technology perspective: That which an application sees and manipulates is the way it really works. So You Think Objects Are Records With Byte Codes On The Side? 51
  • 52. By The Way, What Are Objects? The theory underlying all of this is Category Theory. By the way, objects are sub-categories of the concrete category Set. So You Think Objects Are Records With Byte Codes On The Side? 52
  • 53. Where Are We? commercially proven solid theoretical underpinnings unified, inherently parallel data base programming language integration So You Think Objects Are Records With Byte Codes On The Side? 53
  • 54. And, Of Course … Objects are records with byte codes on the side? It Ain’t Necessarily So. So You Think Objects Are Records With Byte Codes On The Side? 54