yet" • Why not be able to write `for` loops first? • Even if you understand "Object-Oriented", you can't write that you want to write • "Object-Oriented" has become a goal for beginners • Can they program if they understand OO? • Reason why they can't write program is because you don't understand • This kind of useless misunderstanding should be eliminated • OO is unnecessary for beginners. You can put it off quite a bit later
• Common definition is not required because it is not used in the real field • Isn't it better to use words other than "Object-Oriented" that can narrow down and express without misunderstanding? • In development, picking out what only "Object-Oriented" can express and use the word "Object-Oriented" for them
Named and conceptualized by Alan Kay • 1980s: Popularized with C++ • Practical definitions of encapsulation, inheritance, and polymorphism • 1990s: Massive popularity with the spread of GUI • If you labeled it as Object-Oriented, it will sell, so make everything OO • 2000s: Decline due to web technology • Functional style trend, from method to process • after 2010: Into the legend... • It seems amazing, but they don't know what it actually means
Smalltalk introduced Simula-style object functionality on commercialization • Easy to use for professional programmers • He said "It's out of my hands" • Research on end-user computiong • Programming for end users to use computers • Definitions are fragmentary • Seems difficult to use as a guideline for the development • Redifinition and restructuring are required • So out -of scope
be used through analysis and code • Methods are required to handle the difficult inheritance • Adding development topics around classes and inheritance • Analysis, project management, etc • If you named it object-oriented, you would make money • get budget for research • books and software will sell • Software engineering had become all object-oriented • The name of software engineering is no longer popular • This conf should be "Software engineering conf" (no one comes...)
• To use same model are only front-loaded implementation • Just coding by diagrams • Architecture is not incorporated • It is before networking era, it is assumed that processing on one divece • Impedance mismatch with RDBMS • Unable to handle complex server configurations • In practice, the architecture determines the implementation • Application must be build in one piece
step will result in a waterfall • Necessary to explore the architecture as the service grows • It is difficult to decide in advance just the shape of the code • Good software comes from good processes • CMM was popular • Rational's unified method had also become RUP(Rational Unified Process) • Devoting computing resources to the development process • Continuous integration • Git process(In the past, copying a repository was unthinkable)
programming is programming that uses inheritance" • Rambough(OMT) • "There is some debate as to exactly what characteristics are required of an object-oriented approach. These discussions usually involve four aspects: identity, classification, polymorphism, and inheritance • Booch(Booch method) • "If a language does not directly support inheritance, it cannot be called object-oriented"
written as obj.method() • I doubt whether it is effective enough to make a big trend • Object-Oriented if you use classes • structure enough? • Object-Oriented if you write data and functions together • Abstract Data Type • Object-Oriented if you create objects • To avoid static, to create objects for object-oriented laundering • All good ideas for development is Object-Oriented • Software engineering branding failure...
feature • The distinction between Object-Oriented language and Functional language is meaningless • Object can be treated as functions, and functions can be treated as objects. it is mixable • introducting syntactic sugar, it can be used as a language feature • Languages have Object-Oriented features and Fuctional features in their own way •
commutative • Objects with no attrs and single method can be treated as function • Java lambda expression • A function that returns a element by giving a name can be treated as an object Function<String, Object> myObj(int a, int b) { return name -> switch(name) { case "a" -> a; case "b" -> b; case "mul" -> a * b; case "add" -> a + b; default -> throw new RuntimeException(); }; } class MyFunc() { int apply(int a, int b) { return a + b; } }
the missing feature of the language • Something is wrong to memorize patterns and write them by hands • Many patterns are no longer necessary introducing of language feature • Usage patterns of higher-order functions are reproduced using class and inheritance • ex Template methods
void proc(Runnable before, Runnable after) { before.run(); println("Hello"); after.run(); } proc(() -> println("Stand up"), () -> println("Sit down")); ※ Runnable is used to represent a function with no arguments and no return value
conditions • Thinking about the cart summarization • Calculation is different between Packed and Bulk sealed interface Type { record Bulk(int price, int unit) implements Type {} record Packed(int price) implements Type {} } record Item(Type type, int amount) {} var cart = List.of( new Item(new Packed(300), 3), new Item(new Bulk(250, 100), 230));
List.of( new Item(new Packed(300), 3), new Item(new Bulk(250, 100), 230)); int total = cart.stream() .mapToInt(item -> switch(item) { case Item(Packed(int price), int amount) -> price * amount; case Item(Bulk(int price, int unit), int amount) -> price * amount / unit; }).sum();
streamlined • no change the calc part even if another Type added sealed interface Type { int calc(int amount); record Bulk(int price, int unit) implements Type { int calc(int amount) { return price * amount / unit; } } record Packed(int price) implements Type { int calc(int amount) { return price * amount; } } } var cart = List.of( new Item(new Packed(300), 3), new Item(new Bulk(250, 100), 230)); int total = cart.stream() .mapToInt(item -> item.type().calc(item.amount())) .sum();
multiple classes • It is difficult to write when the condition is not only Type • Time zone, etc • branching is requrered within the Type • It is a problem if there is Type that you don't know • In business processing, it is better to have all in one place
the end of the module • Ex: DOM、HTTP、DB connections requre state management • Intermediate processing can be stateless GUI logic data store user application DOM HTTP DB conn
MySQLConnection and OracleConnection, it good to use object-oriented • but MySQLConnection and OracleConnection are required as only one implementation • If browser manages GUI state, GUI framework can be stateless • Structured GUI definition and event handlers •
an important function of inheritance • Object oriented does not touch on type theory other than subtype • Functional • Generics • Different type of subtyping • For inheritance subtyping, specify the base type explicitly • Nominal type • Inheritance=Nominal type+attribute extension • There is also a way to consider it as subtype if it has the specified element • Structual subtyping
but it is possible to have a richer discussion with type theory • The mechanism of nominal types itself can be independent from OO • Beginners should only understand the concept of nominal types to use Java • interface implementation cannot necessaryly be considered OO • realization of the disjoint union • Ex: Type must be either Bulk or Packed sealed interface Type { record Bulk(int price, int unit) implements Type {} record Packed(int price) implements Type {} }
type and as modules • Class as data type • Muliple instance • fields hold another data that includes • Class as module • basically Singleton • fields hold another module that depends • Becomes a subsystem • Collection of processes class Name { String first; String last; Name(String first, String last) { this.first = first; this.last = last; } String toString() { return first + " " + last; } } @RestController class Greeting { @GetMapping("/hello") String hello() { return "hello"; } @GetMapping("/myname") Name myName() { return new Name("Naoki", "Kishida"); } }
effect • Same return value for same arguments • Pure data type • No side effects outside of the data type • Same return value for same arguments and same attributes
processing is stateless • Module is a collection of functions • Dividing function, use layer • avoiding infinite loops • Data flows on layers • Data-oriented programming
management • Words other than object-oriented can be used for other than inheritance • Easy to communicate technically because there is no confusion • Object-Oriented rarely appears in application • Managing state on terminal, the middle will be stateless=Functional • Required for frameworks and middleware • Let's study object-oriented and create frameworks and middleware!