(8)-interface-c-factories - unina.stidue.netunina.stidue.net/universita' di trieste/ingegneria...
TRANSCRIPT
Factories
Nuovo scenario
�������������� ���������������������������� ��!#"%$��&"%$'��()�&�*$+�-, ./"0()���1�323�4$'$�" �657()��(8, �$�, ���9�*��:��;7(<�=�)��7"�"�(����7�>�?"%���@�&A���"�BDC#EFC8GIHKJLC#J8M&N=J1O#P7ERQLO8S5�T�" ��(��U�����9�*�����V�!V W$+��AX�U�����3��AX��=���&:
��;7(�A<��, �="�$Y���%" ZFB�Q[J&G#J8J#\�\�J[N=J6M&N=J�O1P*ERQLOUSt
Arrays
...
interfaceComparable
DocenteimplementsComparable
TelefonoimplementsComparable
E come si fa…?
class Arrays {
public void someMethod (Comparable a) {Comparable a = new Comparable();
...}
}
������������ ��� ���������� ������ ����interface
���� ��"!��# �$�%������ �����& '���class
()�*�+ !,�.-���� ��'�����' ��/0�� ��*!������# �$�%�����" �,���# ����
interface-
1"2 � 1 �� 3 1 �4 '�*!5����6�6��4���7�*8� �9���;:
Soluzione (sketch) (I)
<�=�>'?@?$A�BCA�D0E�F�>�G�>�D0E,HIG�A&J9K*L3MON&P�QRPTSUSWV&X�SYVRZ"Z�P#B"[�EJ D\F'K E�D0E�]H�>�K ^_J9]�H%E�GU`a>,BbB"J >
<String c ]�A�D0E�d�E�K9K >4B"K >'?@?7E'e
<4fhg�g'E,HiH�AClass
B"[�E�d�E�?7B"GjJ k*E�K >4B"K >'?@?7E�BCA�]0lRm�E�K�]�A�D0E
<4fhg�g'E,HiH�A�d�Jl3m�E�K9K >�B"K >'?n?$E
Soluzione (sketch) (II)
Instances of the class Class represent classes and interfaces in a running Java application.
Constructor provides information about, and access to, a single constructor for a class.
Esempio
Premessa:
S erv i z i st at ef u l e st at el ess
Sessione
�������������� �������� ���� ������������ ����� ! " ��$#� %�&��#�#'� ��� (�� %���)������ * +�,�.-��/����10�230�04658732�:9�;� ��<�=/����1>� * ? @� �A�� *B�DC����� �������� ���� *B�DEGF��/H @/'���!>H * ? �� �A��
�JI� %�K�L�HMN�%MO ����P�8Q�R3230�046587�2TSVUW587X73230�046587�2
�JI��YO��#������=��#� �-��� 'MN�! Z * ? @� �A�'����F� 1 "��;*����#�#'� #��3���\[)�.�)��#����L� �']^-3�;*�LY�)�A�'�� * ? �� �A��������������� ����W 1 " ��$#H ��
Stateless vs. Statef u l
��������� �� �������������������� ����!"�$#��&%'#�%' )(+*�,�#-� �/.0 ��%1#�#�232 #4�5 6�7) �8��%1#4!�9:�8�/ ;<#= >."��! = �?�"@A��@ = #�B�C"��2>2 #4� 6�7) �8��%1#
DFEHG�I$J+K0L�MNKPO0IRQTS5M5LNU IWV"QXU ITYZQ�U OWS\[&G�] KD_^)G�LNI/QT] QX] O0IRV�`RKRaba�Qdc0K0] ] QeS5M LNU IRV0QDgf8U [&K$JRKPO0IRQTS5M1L:U IRV0Qh[&G�Ihc�ORKXU I$MNK�LNU$KZMNG�LNI/QX] QX] G�L�GXSiG�YdYjQdG<O0IRQ
U IRc�U [&QRa�U G�IRKdc�U+K0L:L�G�L�K��������� �� ����������lk�mn���56$ �!o�&%'#�%5 )($*�,p#4�i �/.0 �&%'#�#�2>2 #-�5 6�7) �8�&%'#-!�9:�8�/q;r#
.8C0s = >."��! = ���t� = #l2>2 �-�5 6�7) �8��%5�-.8�t��6+� = ��!W%u0��m4vwm����t�x�y�0������z�@A{���}|� ��5!0#4~2H!C�;<�l�t = H�5 6�78 �H�&%'�y>!/�l #�%1����� 6$�����-C8!�!8CH;r���t ��o%1 ��5!0#� ��+�A� 6$�����yC8!?!)CH;r���t ���%' �� !0#� ��$�
�5 6+�����X�+# ==l� ��%' ��5!0#42 #��� l;�;r# = ����23HC2 %bq;� = C"�-!8CH;r���5�����t�
Mail s e r v e r ( S MT P ) : s t at e f u l
…
�p�+�����t�����q�1�&���&�������'�$�w�$�w���q�:���N�$�>��H�+���p�l�l �¡N�A¢&£H���8�£H¤$¥8¦Z¦b�H§~§~§
¤ �&¨©��ªi�i«"��� � �¬ A¦t 8§®§~§
S: <wai t f or connect i on on TCP por t 110>. . .
C: <open connect i on>S: +OK dewey POP3 ser ver r eady ( Comment s t o: Post Mast er @UDEL. EDU)C: USER mr oseS: +OK mr ose i s a r eal hoopy f r oodC: PASS secr etS: +OK mr ose' s mai l dr op has 2 messages ( 320 oct et s)C: STATS: +OK 2 320C: LI STS: +OK 2 messages ( 320 oct et s)S: 1 120S: 2 200S: .C: RETR 1S: +OK 120 oct et sS: <t he POP3 ser ver sends message 1>S: .. . .
Mail s e r v e r ( P O P ) : s t at e f u l
������������ ����������������������� ������������ ����
!���"#��$%�%&'��()�+*-,/.0,213141
������������� ���������0�5������������ ������������ ���� �(768,����
���9��������� ��������:������������� ���;�������� ���� �()6<,����
Name s er v er : s t at el es s
Esempio
Esempio
��������� ������ ����������� ��� �� �����������������! "#�$ %����� �� ���&$�������%')(* ��,+-��./�0�1��.*���,���,23�� ��4.$ ���&/�����5�6�7�� �����98�:<;=:#>#?�?A@B+7�!���C�,�D�7 �$�C�
pippo1 pippo
pluto2 pluto
paperino3 paperino
Tentativo
publ i c c l ass Si mpl eSt at ef ul i mpl ement s Act ual Wor k {
pr i vat e int reqNum = 0;
publ i c St r i ng doWor k( St r i ng i n) {
reqNum = reqNum + 1;
r et ur n( St r i ng. val ueOf ( reqNum) + “ “ + i n) ;
} ;
}
Hhmmm… .
����������� ��� ��� ���������� ��������������� !�#"$�% � &('�� ��)*�+�, -� &.��/0 ����13254�6 798:�738;!<3=->@?BA�=-CEDF>�G�GHC.I3A�J�K�>MLON0DF>�JPK$Q�C�>R<9NTS#DUG�N�C�J0VXWZY
��[\���]� /(�5^9M)F�P_5`a6Mb@4cb�%d�d��(�X�+�
Act ual Wor ke 798gf._�f*fh7i� �j&.�������%)k)l� �$���
��������ma���nd$ !��"��#"�� &.��o��H !�)lnp$��0� �j&.�$��� ��)k)l� ��� �mj�� - -� /M�M�+�,� �, -� &M'�� ��)*���
publ i c c l ass Si mpl eSt at ef ul i mpl ement s Act ual Wor k {pr i vat e int reqNum = 0;publ i c St r i ng doWor k( St r i ng i n) {
reqNum = reqNum + 1;r et ur n( St r i ng. val ueOf ( reqNum) + “ “ + i n) ;
} ;}
Soluzione ?
�ServerTrieste è (volutamente) mal progettato !
�O c c orre c amb i are q ualc os a nella s ua i mplementaz i one. . .
Soluzione (sketch) (I)
����������� �����ActualWork ��������������� �� ���!��"$#%���&�$'(')" ���*
�ServerTrieste + *,-�.�0/ �1324�165������� �����
ActualWork � 4�7���8�"9#:�!��$'(')" ���$�0;<5-24� + �6�=" #%*,* req '95>#%���&�*'?')" ���$ x @
�BA7 ��4��CD"E�-2GF �ActualWork obj
2'?'H�#-" 2 ����2x;
�JI��), ��#%2obj.doWork(req)
Hhhmmm. . . . .
ServerTrieste ������������ �� � ������������������� ActualWork ��� � ������������������ ! ��"�����#%$'&)(+*-,�&/.0.�132/134 57698�:;5-(�5�<>=?1�@�(�8A13(CBD5�:;698FEG5IHActualWork w = new ActualWork();
#%JK&FLM:;5�1C698�:;5-(�5�<>=?1�@�(�8NE�4 8�.G.�5)O#-OQP�8A(�&)(7.�&NR'@�8�4 5N.C1 8S4 8ET4 8/.G.U5IH
ServerTrieste
...
interfaceActualWork
Soluzione (sketch) (II)
V%W�X�YGY�Z\[0Z�]N^`_KXFabXT]c^�d9abZNe3f�gih?jlk%mnkMo;oqpIr�o�p)s�s�k[�t/^e"]�_nf3^T]c^�uvdwXxfzy e{uMdw^Fa}|;X�[�[0e~X
Vx�����G�'�z�;�x�G�M�c��� �v�;�A�3�����/�����z�C���b�)�;��?�ServerTriesteV%���z� ���n�
V��b� ���T���S�/�������/�����D�x�S�'�C��� ���0�U�7�V��K�����G�U���
V��b� ���T���S�/�������/�����D�x�K���'�����3���String
�T����/�����T�b� �T�A�3�/���)��������3� ��T� ���0���+���
V����7�K�����/�0���N�T�;�����;�x�����/���������'����� ���0�U�7�
new ServerTrieste(2200, new LoggableScreenImpl(),“ Si mpl eSt at ef ul ” , false);
Altra soluzione
Altra soluzione (I)
����������������sys ���������������������� �!�#"��!��%$&���(')�&�*�+ ,�-�./10���
�%2�0,�*�+ ,�-3+54 ')��6�+ '786908�.:;�&<�+5=>
����������������8? ��!�@�!A����CB;�������&�D�E�F�G����8H,���-#+ I� J4 �%.:�0���K6�,4L4 0M'N�����D�.O.*+ ��� �%P 0�.O.�0D1�K')�,QR3S-0,=T0CQR��=T�K0I4*'7�E6&+ ')M6�+
sys
�UP I=!,�*�=T0CQKV9+ WG+L4 .:,=�XD,=�'7���D�C.:'73+54E�D�IQ�869,454 0M'D4 0�.O.�
�UYEZ E.�0�[109Q�,�*1J4 Z 0IS�S9=T�E'7'D+ �\<D.:0�1�]�-,+_^`,V(.:,=�XD,=a�0DXD0bdcOe9fhgEikj9e5lDm�gKn�gNo!g9p@q
Oggetto privato
d el l a c on n es s ion e
class MyAppState {private int reqNum = 0;
public void inc() { reqNum = reqNum + 1; };public int getVal() { return reqNum; };
}
������������ ��������������� �������������� �� !� �"�� $#% $�'&�(�)� #��������*��+�,� �-��.'�/�0� �1����)�* �(23���54*�&�565�7�8��(239�)�*�:2;��<(�* �#% ��'#:&��7=-���7���,65���8#:>� �-�*
Oggetto globale
d el s er v er
interface ModifiedActualWork {public String doWork(String in, int connId, MyAppState state);}
publ i c cl ass MyAct ual Wor k implements ModifiedActualWork {
publ i c St r i ng doWor k( St r i ng i n, i nt connI d, MyAppState s) {s.inc( ) ;r et ur n( St r i ng. val ueOf ( s.getVal( ) ) + “ “ + i n) ;
} ;
}
Altra soluzione (II)��������� � � �������
ServerTrieste � ����� � � ��� ����������� "!$#&%�!'!&�(#)�*#&� �+� , �String globalClassName
�String connClassName
�.-/��01���2!& "!$#)��354�.� #)�2�6��7�7��8!9!9�
sys���:�8� �� ; <�
globalClassName�.-/31��#=!>%�#)���+�(�?���� ; :� �(�1�@4�.� #)�2�6��7�7��8!9!9�A�B�:�2� �� ; <�
connClassName��CD%1���1���E#&� �+� ,1�req
:%F�+�(�?� �� G H� �(���x4
�JIK�8!9��#9LM�����*� �ActualWork obj
�� G "��� � � !N�A�x;�POQ�H,8���+�
sys.doWork(req, x, obj)���R����% :%?#)�6�+�����1�� G H� �B�1�A4� � ��� "!$#&%�7�7����S��7�7��8!'!N�M�+�(#T#&� H3 �(�1�����:!N�
Osservazione
U6VXWDY�Z5[<Y�\^] Y�\B_;` ]1`@a["Y�\^]?b Y8c/dfe(g:cN`�hig�Y�\'jlk:cQh�bih mGm;`�g e*k�gn`�o�o�\pe�d+d8h e["e?[Qc9`�g1m�h `�brqsY�g�c9Yth u�Y�g�c$h d+e�`Av�k�Y�[QcNe
UMwXgne�x�x�Y c9c9esys y(z|{~}^�^�)���<z|{>���1zK{$�(zK{U�V�qMo�b Y?qnY�g:c9`*b ��hig:cNY�\)�p`2dfd h `
ServletU���eBg:c$h Y�g�Y*hib:d+e�uKh dGY���g e(gM�1`A[<cN` cNeUMwXgne�x�x�Y c9c9eEo�Y�\|e�xBg�h"�fd+eBg�g�Y�[G[Hh e(g�Y��
U�V�qMo�b Y?qnY�g:c9`*b ��hig:cNY�\)�p`2dfd h `HttpSessionU���`�g:c>h Y�g�Y*b e@["c9`8c9e
Alcune differenze (I)�������������
Ht t pSessi on�� ������ ����������� ������������������� �!�#"�$%�������&$ �'�()$ �#"��*�+ �������,����-��.�%/0��12�3���54)���6���7�����3�98
��:;�<"=�>�)�!�����������$?@��7�!-#$%-;$Ser vl et��A�B)CD�!�������E���!���F�E��7�7�D-���B�"=�<� �G�E���)���E�9?H��F�E�
publ i c cl ass MyAct ual Wor k implements Servlet {
publ i c St r i ng doWor k( HTTPRequest i n) {HTTPSession s = i n. get Sessi on( ) ;i nt num = s.getObject( “ numRequest ” ) ;num = num + 1;s.putObject( “ numRequest ” , num) ;r et ur n( St r i ng. val ueOf ( num) + “ “ + i n) ;
} ;
}
Alcune differenze (II)
I�JLK)MDN3O�N�NQP R<K�OTS.U.UWVXK�R;K=Y'R<PZK�Y�P [�O�Y\R;K�]9K�M_^'Y\R<K�K)O�N�N%P R<K)O9`
I�a�bQc7O9dDe)RD[;P\f�P c7M�[;P!]�KHttpSession g P&K)[;P&e)O�K�[�O.K�c7O�[�M�h;])O�b&b R[�O�b&b O�Y'R<K�K�O�N�N%P R<K�P'U6i6V
I@j6N�N3R!Y�P M�kEO�]�K)M>kEOlh#]�O�N�cLM[m]�K)MDN3O!N�NQP R<K�O g Y'R.d�e�bnP Y'Mc7Ro M!N�N�R!Y�P M.kpb M�Ml[q]�K�M�Y\R<K�K�O�N�N%P R;K�O g N3O�d�e�bnP Y'O�r
s
t!ulv)v\w%xFx�y ulv)yz t<{
Osservazione
�������������� ��������� ���������� �� �������� !�"��#$ %���"&(')�*#+�$# ,-,��� ��.'/ 0��121/�3�4�-�5# ���2*�6�� !,!# ��� 70�� !�"�8# 92�� !�:# �;�<�<=>'!�/��"�
��?@ 0�4A2A/�B�"�"�ActualWork
1������ CD#$ )�6���E�F����G ������?@ 0�4A2A/�B�"�"�
AppState H>IKJMLON@PRQ/S4LTPRP>IVU�U4QWLTPVIX 1%�/�����6�<�doWork()
&
�<?� 0�4A/A2�B�Y�"�Servlet
1!���V�*')�Y�Z#)A>�+#/'!�"�� )�Z#�<?� 0�4A/A2�B�Y�"�
HttpSession1%���V�/A> /#���/�)# �� %�
�[�\7]�B�"�49V#)9>#Servlet
1%�2���> !�<�5�"�"�� %���E�8'� ��^# _3���^#`7]�� !�"�a���+� �HttpSession
�%b%�[�c�� )�Z# �� ��d� �F��"�B�"�<92���$� ����/-c# �> !�
HttpSession egf�h%ikj h5lnm�o"pni!q:m:r AppState egf�h%isqut i;v:v�m!wnwxw