===== Software Architecture ===== |CORBA| Common Object Reqeust Broker Architecture. Standard, which defines communication between software, written in different languages. Uses object oriented approach.| ===== Builds ===== |Incremental| Build after each commit | |Nightly| Build every night | |Baseline| Build, according to a cadence / milestone. Will probably be released. | {{https://lh3.googleusercontent.com/-dN06ZdaCy6Q/WsdI_sbHVdI/AAAAAAAAAHM/BngAA7lDZ8AVVWVk9aiwKZLHRdcwJtq6wCHMYCw/s0/2018-04-06_12-16-28.png?600}} ===== Summary ===== - Design Patterns aus GOF - MVC - API: HAL, HATEOAS, REST - HATEOAS - - architecture pattern Hypermedia As The Engine Of The Aookication State - REST GET - safe, idempotent PUT POST - Idempotent DELETE - Idempotent PATCH See https://stackify.com/soap-vs-rest/ * Java RMI * RMI you can have references to remote objects and invoke their methods RMI stands out when the need to develop something more complex than a pure client-server architecture arises * Java RPC * With RPC you can just call remote functions exported into a server,In Java, when you talk about RPC, you are talking about SOAP and Web Services. * Lost its popularity, REST is the solution of choice. * SOAP - "Simple Object Access Protocol" * If you need ACID-compliant transactions, SOAP is the way to go. - CORBA -Common Object Request Broker Architecture * REST - Representational state transfer. The general consensus among experts these days is that REST is the typically preferred protocol unless there’s a compelling reason to use SOAP * REST allows a greater variety of data formats, whereas SOAP only allows XML. * Simple * uses HTTP layer * architecture principles * SOLID * Single-responsibiity Principle * Open-Cosed * Liskov substitution principles * Interface segregation principle * client should NOT implement interfaces / methods they dont use * Dependency Inversion principle - - 4+1 View: https://de.wikipedia.org/wiki/4%2B1_Sichtenmodell * 1 Logical View * Diagram: https://de.wikipedia.org/wiki/Klassendiagramm * Diagram2: https://en.wikipedia.org/wiki/Communication_diagram * Diagram3: https://en.wikipedia.org/wiki/Sequence_diagram * 2 Development view * Diagram: https://en.wikipedia.org/wiki/Package_diagram * 3 Process view * Diagram: https://en.wikipedia.org/wiki/Activity_diagram * 4 Physical view / deployment view * Diagram: https://en.wikipedia.org/wiki/Deployment_diagram * +1 Scenarios * Diagram: https://en.wikipedia.org/wiki/Use_case_diagram ===== Object-Oriented Programming OOP ===== === Polymorphism === Polymorphism in Java has two types: Runtime polymorphism (dynamic binding) and Compile time polymorphism (static binding). Method overriding is an example of dynamic polymorphism, while method overloading is an example of static polymorphism. === Binding === Binding: association of method definition to the method call. Static binding: The binding of static, private and final methods. These methods cannot be overridden, type of class is determined at compile time. Dynamic binding: Determined at run time. Methods are not static, private, nor final. class Dog { public void bark(){ System.out.println("dog bark"); } } class Hound extends Dog { public void bark(){ System.out.println("hound bark"); } } public class OverridingTest1 { public static void main(String [] args){ Dog dog = new Dog(); // var of type dog resolves method bark at runtime dog.bark(); // dog bark } } public class OverridingTest2 { public static void main(String [] args){ Dog dog = new Hound(); // use Hound, where method bark is overridden dog.bark(); // hound bark. var of type dog resolves method bark at runtime } } === Method Overriding === Method overriding is an example of **dynamic polymorphism**. Method overriding, in object-oriented programming, is a language feature that allows a subclass or child class to provide a specific implementation of a method that is already provided by one of its superclasses or parent classes. class Dog { public void bark(){ System.out.println("dog bark"); } } class Hound extends Dog { public void bark(){ System.out.println("hound bark"); } } === Method Overloading === Method overloading is an example of **static polymorphism**. Method overloading in java is a feature that allows a class to have **more than one method with the same name**, but with **different parameters** public void Square ( int number ) { int square = number * number; System.out.printIn(“Method with Integer Argument Called:“+square); } public void Square(double number) { double square = number * number; System.out.printIn(“Method with double Argument Called:“+square); } public void Square(long number) { long square = number * number; System.out.printIn(“Method with long Argument Called:“+square); } ===== Async programming ===== Exlained with Python by re-implementing "await" with scheduler https://www.heise.de/hintergrund/Asynchrones-Programmieren-async-minus-await-7527129.html