Aleksander Olszewski

Aleksander Olszewski Kierownik Projektów
IT, PRINCE2
Practitioner

Temat: model, helper czy klasa?

Wojciech Soczyński:
...
Tak naprawdę, to nie ma logicznych powodów by w ogóle używać singletonów, więc cała dyskusja jest z góry jałowa :). Użycie Singletona świadczy o złej architekturze systemu.

asocjacja z licznością 1 --- realizacja Singleton, asocjacja z liczebnością 1..n modyfikacja Singletona, którą roboczo nazwałem Multiton i wreszcie co o czym mówimy asocjacja 1..* "normalna" do której wszyscy są przyzwyczajeni. Naprawdę nikt nie widział na diagramie klas asocjacji z liczebnością 1 lub np. 1..3? Jak zaimplementować taki ewentualność? A może stwierdzić, że Singleton to zło i mnożyć byty?

Nie wiem kto i jak tam dopiekł Singletonem, ale jest to normalny wzorzec projektowy realizujący koncepcję asocjacji z ograniczoną liczebnością.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: model, helper czy klasa?

asocjacja z licznością 1 --- realizacja Singleton, asocjacja z liczebnością 1..n modyfikacja Singletona, którą roboczo nazwałem Multiton i wreszcie co o czym mówimy asocjacja 1..* "normalna" do której wszyscy są przyzwyczajeni. Naprawdę nikt nie widział na diagramie klas asocjacji z liczebnością 1 lub np. 1..3? Jak zaimplementować taki ewentualność? A może stwierdzić, że Singleton to zło i mnożyć byty?

asocjacja na diagramie klas do klasy usługowej oznacza jedynie istnienie związku obu klas (ale nie wiadomo jaki to związek), ale ten wymaga implementacji, implementacja liczności 1 (tylko jeden) to własnie sigleton. diagram klas diagramowi nierówny a modele logiczne i implementacyjne są powszechnie mylone, jeżeli chcemy pokazać, że jedna klasa używa (wywołuje operacje) drugie należy to zobrazować relacja użycia a nie asocjacji... w zasadzie w realnym kodzie asocjacji niemalże nie ma, jest wiele agregatów polepionych kompozycjami i klasy usługowe, wszystko to połączone "użyciem"... niestety większość tak zwanych modeli dziedziny, które widuję, to tylko modele pojęciowe z asocjacjami reprezentującymi związki logiczne, tu więcej o tym:
http://it-consulting.pl/autoinstalator/wordpress/2011/...


Nie wiem kto i jak tam dopiekł Singletonem, ale jest to normalny wzorzec projektowy realizujący koncepcję asocjacji z ograniczoną liczebnością.

ano, jednak zagwarantowanie sobie tego, ze kolejne odwołania do operacji jakiejś klasy nie będą wywoływały jej "konstruktora" wymaga własnie tego wzorca
http://www.javaworld.com/javaworld/jw-04-2003/jw-0425-...Jarek Żeliński edytował(a) ten post dnia 21.03.12 o godzinie 19:15

konto usunięte

Temat: model, helper czy klasa?

skąd teza, że warunkiem obiektowości jest dziedziczenie?

Bo bez kod bez dziedziczenia jest proceduralnym tylko że w klasach.
Abstrakcja, polimorfizm są pochodnymi dziedziczenia i bez niego nie istnieją.

konto usunięte

Temat: model, helper czy klasa?

Ja bym powiedział, że idea obiektowości to niezależne obiekty (aktorzy) wymieniający między sobą komunikaty poprzez dobrze zdefiniowane interfejsy / protokoły.

Ale po co wymyślać ideę programowania obiektowego :)
http://pl.wikipedia.org/wiki/Programowanie_obiektowe#P...

Kod obiektowy to taki który tworzy abstrakcje, jest polimorficzny etc ...

konto usunięte

Temat: model, helper czy klasa?

ale nie używamy konstruktorów tylko fabryki :)

A czego używa fabryka ? ;)

konto usunięte

Temat: model, helper czy klasa?

Słyszałeś o przesłanianiu? Pozatym brak konstruktra nie jest powodem uniemożliwiającym dziedziczenie.

Proszę o przykład :)
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: model, helper czy klasa?

Jakub Wojt:
Ja bym powiedział, że idea obiektowości to niezależne obiekty (aktorzy) wymieniający między sobą komunikaty poprzez dobrze zdefiniowane interfejsy / protokoły.

Ale po co wymyślać ideę programowania obiektowego :)
http://pl.wikipedia.org/wiki/Programowanie_obiektowe#P...

Kod obiektowy to taki który tworzy abstrakcje, jest polimorficzny etc ...


nie mylmy implementacji "obiektowości" w postaci narzędzi (języki programowania) od obiektowości w sensie "paradygmat modelowania".

kolejność jest taka:
- analiza problemu
- opracowanie modelu rozwiązania (tu obiektowego a nie np. strukturalnego)
- implementacja (język programowani dowolny ale obiektowe to ułaątwiają)
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: model, helper czy klasa?

Jakub Wojt:
ale nie używamy konstruktorów tylko fabryki :)

A czego używa fabryka ? ;)

no jest chyba delikatna różnica pomiędzy poprzestaniem na standardowym "new/create" a np. utworzeniem w "fabryce na bazie prototypu".. ;)?

konto usunięte

Temat: model, helper czy klasa?

nie mylmy implementacji "obiektowości" w postaci narzędzi (języki programowania) od obiektowości w sensie "paradygmat modelowania".

Implementacja też jest modelem. Obiektowe języki programowania to takie które pozwalają obiektowo modelować problem.
kolejność jest taka:
- analiza problemu
- opracowanie modelu rozwiązania (tu obiektowego a nie np. strukturalnego)
- implementacja (język programowani dowolny ale obiektowe to ułatwiają)

.. bo najłatwiej jest 'portować' model obiektowy na inny model obiektowy :)
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: model, helper czy klasa?

Jakub Wojt:
nie mylmy implementacji "obiektowości" w postaci narzędzi (języki programowania) od obiektowości w sensie "paradygmat modelowania".

Implementacja też jest modelem. Obiektowe języki programowania to takie które pozwalają obiektowo modelować problem.

oczywiście stąd mamy ładny proces tworzenia modeli:
CIM -> PIM -> PSM
(http://www.omg.org/mda)
kolejność jest taka:
- analiza problemu
- opracowanie modelu rozwiązania (tu obiektowego a nie np. strukturalnego)
- implementacja (język programowani dowolny ale obiektowe to ułatwiają)

.. bo najłatwiej jest 'portować' model obiektowy na inny model obiektowy :)

tak, tylko że w rozsądnych projektach implementacja jest zawsze po a nie przed projektowaniem :)
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: model, helper czy klasa?

Jakub Wojt:
skąd teza, że warunkiem obiektowości jest dziedziczenie?

Bo bez kod bez dziedziczenia jest proceduralnym tylko że w klasach.
Abstrakcja, polimorfizm są pochodnymi dziedziczenia i bez niego nie istnieją.
Ja bym powiedział raczej, że dziedziczenie jest jednym ze sposobów implementacji poliformizmu. Słyszałeś o typowaniu strukturalnym ? Abstrakcja nie ma nic wspólnego z dziedziczeniem -> patrz programowanie funkcyjne i funkcje oraz typy sparametryzowane. Definicja którą podałem jest definicją najbardziej oddzieloną od implementacji jak to tylko możliwe.Wojciech Soczyński edytował(a) ten post dnia 22.03.12 o godzinie 15:53

konto usunięte

Temat: model, helper czy klasa?

Implementacja też jest modelem. Obiektowe języki programowania to takie które pozwalają obiektowo modelować problem.

oczywiście stąd mamy ładny proces tworzenia modeli:
CIM -> PIM -> PSM
(http://www.omg.org/mda)

... ja preferuję takie podejście: klient wie co należy zrobić - programista (a najlepiej analityk) 'tłumaczy' wymagania klienta na język programowania.
kolejność jest taka:
- analiza problemu
- opracowanie modelu rozwiązania (tu obiektowego a nie np. strukturalnego)
- implementacja (język programowani dowolny ale obiektowe to ułatwiają)

.. bo najłatwiej jest 'portować' model obiektowy na inny model obiektowy :)

tak, tylko że w rozsądnych projektach implementacja jest zawsze po a nie przed projektowaniem :)

A czym się różni programowanie od projektowania ?Jakub Wojt edytował(a) ten post dnia 22.03.12 o godzinie 20:23

konto usunięte

Temat: model, helper czy klasa?

Bo bez kod bez dziedziczenia jest proceduralnym tylko że w klasach.
Abstrakcja, polimorfizm są pochodnymi dziedziczenia i bez niego nie istnieją.
Ja bym powiedział raczej, że dziedziczenie jest jednym ze sposobów implementacji poliformizmu.

Ale wciąż mówimy o programowaniu obiektowym ?
Słyszałeś o typowaniu strukturalnym ?

Nie. Typowanie strukturalne...
A słyszałeś o strukturach typowalnych ?

Nie ? To się rozumiemy.
Abstrakcja nie ma nic wspólnego z dziedziczeniem

Ja akurat myślę, że troszkę ma ...
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: model, helper czy klasa?

... ja preferuję takie podejście: klient wie co należy zrobić - programista (a najlepiej analityk) 'tłumaczy' wymagania klienta na język programowania.

jestem za
A czym się różni programowanie od projektowania ?

projektant myśli o operacjach a programista o metodach :), poza tym chyba niczym ;)

aha, ja tworze listę wymagań poza funkcjonalnych a wykonawca je realizuje a co najmniej określa koszt (pracochłonność) ich realizacji ... Jarek Żeliński edytował(a) ten post dnia 22.03.12 o godzinie 20:27
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: model, helper czy klasa?

Jakub Wojt:
Bo bez kod bez dziedziczenia jest proceduralnym tylko że w klasach.
Abstrakcja, polimorfizm są pochodnymi dziedziczenia i bez niego nie istnieją.
Ja bym powiedział raczej, że dziedziczenie jest jednym ze sposobów implementacji poliformizmu.

Ale wciąż mówimy o programowaniu obiektowym ?
Słyszałeś o typowaniu strukturalnym ?

Nie. Typowanie strukturalne...
A słyszałeś o strukturach typowalnych ?

Nie ? To się rozumiemy.
Abstrakcja nie ma nic wspólnego z dziedziczeniem

Ja akurat myślę, że troszkę ma ...
Żeby nie być gołosłownym, przykład typowania strukturalnego ze Scali:



object Hello extends App {

type Flyer = {
def fly()
}

class Aeroplane {
def fly(){
println("flying")
}
}

class Duck {
def fly(){
println("flying")
}
}

class Monkey {
def eatBanana(){
println("eating banana")
}
}

override def main(args: Array[String]){

val aeroplane = new Aeroplane
val duck = new Duck
val monkey = new Monkey

testFlyability(aeroplane)
testFlyability(duck)
//testFlyability(monkey)

}

def testFlyability(arg: Flyer){
arg.fly()
}

}



Ok, więc co tu mamy ?
Mamy zadeklarowany typ "Flyer", który jest formą interfejsu w typowaniu strukturalnym. Mamy też trzy klasy Aeroplane, Duck i Monkey, pierwsze dwie posiadają metodę fly().

W czym rzecz ? Typowanie strukturalne to taki rodzaj typowania, w którym nie jest wymagane by argument funkcji explicite definiował swoją zgodność z jakimś interfejsem. Wystarczy, że będzie po prostu z nim zgodny. Gdybyśmy spróbowali wywołać metodę "testFlyer" z argumentem typu Monkey to dostaniemy błąd kompilacji, ponieważ klasa Monkey nie zawiera metody fly().

Jeżeli jako polimorfizm zdefiniujemy właściwość języka programowania do typowania argumentu funkcji, bez przywiązywania do konkretnego typu (czyli możliwość użycia typu abstrakcyjnego), natomiast implementacje jakiegoś konkretnego interfejsu przez klasę za formę dziedziczenia, to powyższy przykład bardzo wyraźnie wskazuje na to, że można mieć polimorfizm bez dziedziczenia.Wojciech Soczyński edytował(a) ten post dnia 22.03.12 o godzinie 21:37

konto usunięte

Temat: model, helper czy klasa?

Ok, więc co tu mamy ?
Mamy zadeklarowany typ "Flyer", który jest formą interfejsu w typowaniu strukturalnym. Mamy też trzy klasy Aeroplane, Duck i Monkey, pierwsze dwie posiadają metodę fly().

W czym rzecz ? Typowanie strukturalne to taki rodzaj typowania, w którym nie jest wymagane by argument funkcji explicite definiował swoją zgodność z jakimś interfejsem. Wystarczy, że będzie po prostu z nim zgodny.

Mówimy o polimorfizmie w kontekście OOP:
http://en.wikipedia.org/wiki/Polymorphism_in_object-or...

I rzeczywiście, polimorfizm może przybierać różne formy (czyli jest polimorficzny ;)
http://en.wikipedia.org/wiki/Polymorphism_%28computer_...

konto usunięte

Temat: model, helper czy klasa?

[double post] :)Jakub Wojt edytował(a) ten post dnia 23.03.12 o godzinie 11:21
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: model, helper czy klasa?

ode mnie:
OOA jest "abstrakcją", OOP to implementacja, ta druga ma prawo mieć ograniczenia wiec wzorcem jest raczej "teoria" OOA a nie implementacja OOP, nie płyńmy w stronę definicji "obiekt to opakowanie dla kodu funkcji"...

np. nie każdy język programowania obsługuje wielodziedziczenie...

ale odbiegamy od tematu :)Jarek Żeliński edytował(a) ten post dnia 23.03.12 o godzinie 11:32
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: model, helper czy klasa?

Jakub Wojt:
Ok, więc co tu mamy ?
Mamy zadeklarowany typ "Flyer", który jest formą interfejsu w typowaniu strukturalnym. Mamy też trzy klasy Aeroplane, Duck i Monkey, pierwsze dwie posiadają metodę fly().

W czym rzecz ? Typowanie strukturalne to taki rodzaj typowania, w którym nie jest wymagane by argument funkcji explicite definiował swoją zgodność z jakimś interfejsem. Wystarczy, że będzie po prostu z nim zgodny.

Mówimy o polimorfizmie w kontekście OOP:
http://en.wikipedia.org/wiki/Polymorphism_in_object-or...

I rzeczywiście, polimorfizm może przybierać różne formy (czyli jest polimorficzny ;)
http://en.wikipedia.org/wiki/Polymorphism_%28computer_...
Z twojego linku:


The purpose of polymorphism is to implement a style of programming called message-passing in the literature[citation needed], in which objects of various types define a common interface of operations for users. In strongly typed languages, polymorphism usually means that type A somehow derives from type B, or type C implements an interface that represents type B. In weakly typed languages types are implicitly polymorphic.


Pogrubione zdania udowadniaja (przynajmniej wg. wiki), że w przypadku OOP nie potrzebujesz dziedziczenia by mieć polimorfizm.Wojciech Soczyński edytował(a) ten post dnia 23.03.12 o godzinie 11:47

konto usunięte

Temat: model, helper czy klasa?

Pogrubione zdania udowadniaja (przynajmniej wg. wiki), że w przypadku OOP nie potrzebujesz dziedziczenia by mieć polimorfizm.

Ale tylko w przypadku języków ze słabym typowaniem.
Mój błąd - nie wziąłem ich pod uwagę.Jakub Wojt edytował(a) ten post dnia 23.03.12 o godzinie 12:02



Wyślij zaproszenie do