-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.task.gda.pl!not-for-mail
From: zażółcony <r...@c...pl>
Newsgroups: pl.comp.programming
Subject: Re: what up, programowanie aspektowe
Date: Wed, 09 May 2012 16:13:50 +0200
Organization: CI TASK http://www.task.gda.pl/
Lines: 162
Message-ID: <jodu2n$qqk$1@news.task.gda.pl>
References: <jobtll$46i$1@inews.gazeta.pl> <jod8gb$4ag$1@news.task.gda.pl>
<jodh5p$cqv$1@inews.gazeta.pl> <jodmdo$8ir$1@news.task.gda.pl>
<jodt4b$dg3$1@inews.gazeta.pl>
NNTP-Posting-Host: efp194.internetdsl.tpnet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: news.task.gda.pl 1336572824 27476 83.14.249.194 (9 May 2012 14:13:44 GMT)
X-Complaints-To: a...@n...task.gda.pl
NNTP-Posting-Date: Wed, 9 May 2012 14:13:44 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20120428
Thunderbird/12.0.1
In-Reply-To: <jodt4b$dg3$1@inews.gazeta.pl>
Xref: news-archive.icm.edu.pl pl.comp.programming:197153
[ ukryj nagłówki ]W dniu 2012-05-09 15:57, f...@g...SKASUJ-TO.pl pisze:
> zażółcony<r...@c...pl> napisał(a):
>
>> W dniu 2012-05-09 12:33, f...@g...SKASUJ-TO.pl pisze:
>>> zażółcony<r...@c...pl> napisał(a):
>>>
>>>> W dniu 2012-05-08 21:54, prof fir pisze:
>>>>> zasadniczo pierwszy raz o tym slysze, spostrzezenie
>>>>> w polskiej wiki wydaje sie sensowne, ale czy ktos tego
>>>>> uzywal, czy da sie to jakos zrobic i jak to wyglada
>>>>
>>>> Elementy programowania/myślenia aspektowego pojawiają się
>>>> wszędzie, ja akurat obserwuję to na przykładzie
>>>> J2EE - tylko często się tego nie nazywa po imieniu
>>>> i często jest to zapisane w sposób nieefektywny (bo za pomocą
>>>> takiego języka jak Java). Wiele wzorców projektowych
>>>> ma w sobie coś z idei programowania aspektowego.
>>>>
>>>> Jakiś prosty przykład ...
>>>>
>>>> Masz typową funkcję 'biznesową', która coś wyciąga
>>>> z bazy danych, oblicza i do bazy zapisuje. Jak baza
>>>> danych - to musi być jakieś łączenie z tą bazą a potem
>>>> transakcja. Pominę samo łączenie, zostanę przy transakcji.
>>>> Twoja funkcja wyglada wtedy tak:
>>>>
>>>> void MyFun() {
>>>> BeginTrans()
>>>> x=SELECT Z BAZY
>>>> x = x * y * COSTAM
>>>> UPDATE BAZY (x)
>>>> CommitTrans()
>>>> }
>>>>
>>>> W tej postaci funkcja ma jeszcze sporą 'niedoróbkę', a
>>>> mianowicie - brak obsługi błędów. Dodajmy więc coś podstawowego:
>>>>
>>>> void MyFun() {
>>>> BeginTrans()
>>>> try {
>>>> x=SELECT Z BAZY
>>>> x = x * y * COSTAM
>>>> UPDATE BAZY (x)
>>>> CommitTrans()
>>>> } catch (ex) {
>>>> log.err(ex)
>>>> RollbackTrans()
>>>> }
>>>> }
>>>>
>>>> Czy powyższy kod jest zły ? Dodać komentarze i będzie OK. Nie da się
>>>> tego zrobić 'prościej'.
>>>> (przy okazji będziesz miał odpowiedź na swoje pytanie w innym wątku,
>>>> co to oznacza wprowadzić abstrakcję).
>>>>
>>>> A teraz sobie wyobraź, że masz 10 programistów i tysiące takich
>>>> funkcji. Każdy z programistów robi copy paste tych beginów, endów,
>>>> try-catchów, każdy coś tam zmieni (np. niektórzy OpenTrans() będę robić
>>>> po try, a nie przed, jak w w.w. przykładzie.
>>>> Generalnie - kod nie jest zbyt czytelny. Wynika to m.in. z tego, że
>>>> w jednej funkcji łączy dwa aspekty: aspekt biznesowy i aspekt techniczny
>>>> związany z zarządzaniem transakcjami.
>>>> Na marginesie: Można troszeczkę ograniczyć ten techniczny aspekt
>>>> wprowadzając obiekty do zarządzanai transakcjami (TransactionScope) i
>>>> korzystając z wzorca RIAA, ale w jezyku takim jak Java akurat nic to nie
>>>> da, bo obiekty nie mają destruktorów.
>>>>
>>>> Więc wydzielamy aspekt transakcyjności na zewnątrz.
>>>> W bardzo dużym, przykładowym uproszczeniu, będziemy teraz mieć
>>>> dwa współpracujące obiekty: manager transakcji oraz funkcję biznesową:
>>>>
>>>> class MyFunBiz {
>>>> public execute() {
>>>> x=SELECT Z BAZY
>>>> x = x * y * COSTAM
>>>> UPDATE BAZY (x)
>>>> }
>>>> }
>>>>
>>>> Powyżej zero kodu transakcyjnego, który jest teraz tu:
>>>>
>>>> class ManagerFunkcjiBiznesowych {
>>>> public execute(MyFunBiz funBiz) {
>>>> BeginTrans()
>>>> try {
>>>> funBiz.execute()<--- Tu wywołujesz kod biznesowy
>>>> CommitTrans()
>>>> } catch (ex) {
>>>> log.err(ex)
>>>> RollbackTrans()
>>>> }
>>>> }
>>>> }
>>>>
>>>> Wywołanie naszej funkcji polega teraz na utworzeniu obiektu
>>>> i przekazaniu go do managera funkcji/transakcji, który
>>>> 'otacza' ją transakcją bazodanową.
>>>>
>>>> fun = MyFunBiz()
>>>> ManagerFunkcjiBiznesowych.execute(fun)
>>>>
>>>> Programowanie aspektowe polega właśnie na takim 'otaczaniu',
>>>> jak w cebuli. W środku masz zasadniczą funkcję biznesową
>>>> i Twoich 10 programistów zajmuje się dostarczaniem tego
>>>> środka (zobacz o ile jest to teraz czytelniejsze i zwięźlejsze),
>>>> a potem sami lub automatycznie jest to 'otaczane'
>>>> kolejnymi sukienkami - kolejnym aspektami/kontekstami (u nas jest
>>>> jeden - kontekst transakcji bazodanowej).
>>>> Programowanie aspektowe pozwala to robić w bardzo efektywnym
>>>> zapisie, natomiast w języku takim jak Java trzeba tworzyć
>>>> obiekty, interfejsy, klasy anonimowe, jest zamieszanie z przekazywaniem
>>>> parametrów itp itd (co ja w przykładach w dużej części pominąłem).
>>>>
>>>> Masz też powyżej przykład utworzenia abstrakcji - abstrakcją jest
>>>> tu np. pojęcie funkcji biznesowej, w której zajmujemy się wyłącznie
>>>> biznesem, a transakcje mamy już zapewnione 'z zewnątrz.
>>>
>>> dosyc ciekawe, (a jakos nigdy nie slyszalem nic ntt),
>>> nawet ten kod w miare, tx za odp
>>> z tym ze nie rozumiem tego kawalka
>>>
>>>> public execute() {
>>> /**/
>>> }
>>>
>>> to chyba skrot, czy tez jakies jezyk umozliwia takie opakowywanie
>>> / przekazywanie blokow kodu do srodka funkcji :-?
>>
>> to deklaracja metody w klasie ...
>>
>> w konwencji Java:
>>
>> class X {
>> ...
>> public void execute(){
>> ...
>> }
>> }
>>
>> W praktyce obecnych realizacji pojawiłby się tu albo
>> interfejs, który dopiero byłby implementowany w konkretnej klasie,
>> albo coraz częściej, zamiast opakowywanai wszystkiego interfejsami
>> markuje się metody adnotacjami, a mechanizmy uczy ich sprawnego
>> rozpoznawania. Ale to już szczegóły realizacji technicznej.
>
> ok, nie zauwazylem ze to nie funkcja tylko 'k..sa' (wole nie
> uzywac tego dla mnie wyraznie niecenzuralnego slowa) i przez
> to myslem ze to nie definicja tylko jakies wywolanie z zapodanym
> blokiem (kiedys zreszta bedzie trzeba przemyslec czy takie
> bloki ad hoc nie przydalyby sie moze na cos)
Takie bloki 'at hoc' to w przybliżeni w Javie realizuje
się za pomocą klas anonimowych, a dla większej zwięzłości
zapisu od lat już rozważa się wprowadzenie tzw. closures:
http://tronicek.blogspot.com/2007/12/closures-closur
e-is-form-of-anonymous_28.html
Aczkolwiek warto wiedzieć, ze w językach takich jak Java
wszystko, co nie jest zupełnie proste - jest obiektem
- a więc gdzieś tam pod spodem i tak jest generowana klasa
i tworzona jej instancja - a ten obiekt jest przekazywany
jako argument do jakiejś funkcji(metody) innego obiektu.
W sumie to imo ułatwia zrozumienie, jak to działa i
jakie są ograniczenia.
Następne wpisy z tego wątku
- 09.05.12 21:59 Karol Y
- 10.05.12 02:21 Andrzej Jarzabek
Najnowsze wątki z tej grupy
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-17 Warszawa => Senior IT Recruitment Consultant <=
- 2025-07-17 Warszawa => IT Hardware Specialist - Wsparcie i Konfiguracja <=
- 2025-07-17 Warszawa => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-07-16 deltaT w pompie ciepla
- 2025-07-16 dron na granicy polsko niemieckiej
- 2025-07-16 Warszawa => Senior IT Recruitment Consultant <=
- 2025-07-16 Gdańsk => Mainframe (z/OS, Assembler) Developer <=
- 2025-07-16 Gdańsk => Delphi Programmer <=
- 2025-07-16 Warszawa => BI Developer <=
- 2025-07-16 Gdańsk => Programista Delphi <=
- 2025-07-16 chroń PESEL dziecka
- 2025-07-16 Rzeszów => Spedytor Międzynarodowy <=
- 2025-07-16 Gdańsk => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-07-16 Kraków => Kotlin Developer <=
- 2025-07-16 Warszawa => Inżynier oprogramowania .Net <=