(8)-interface-c-factories - unina.stidue.netunina.stidue.net/universita' di trieste/ingegneria...

15
Factories Nuovo scenario t Arrays ... interface Comparable Docente implements Comparable Telefono implements Comparable

Upload: dokhanh

Post on 17-Feb-2019

214 views

Category:

Documents


0 download

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