Guest User

Untitled

a guest
Nov 23rd, 2017
527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.87 KB | None | 0 0
  1. ahh ich hab den hauptfehler gefunden.
  2.  
  3. du hast das mit dem interface nicht recht verstanden, muss ich dir nochmal erklären
  4. 171086166@qip.ru (23:48:34 12/09/2011)
  5. ok erstmal von vorne: was hast du gemacht? also
  6.  
  7.  
  8. public class BlockPortIO extends Block
  9. {
  10. static String messageString = "Hello, world!";
  11.  
  12. static PortIO_iface portCom_iface;
  13. static PortIO portCom = new PortIO(11, portCom_iface);
  14.  
  15.  
  16. ----------------------------------------------------------------------------------
  17. 171086166@qip.ru (23:50:08 12/09/2011)
  18. static PortIO_iface portCom_iface;
  19.  
  20. du hast hier eine variable vom typ PortIO_iface deklariert. aber klar ist auch, dass hier noch nichts zugewiesen wurde.
  21.  
  22. im nächsten schritt übergibst du diese variable (welche immer noch NULL ist) dem new PortIO(11,.....)
  23. 171086166@qip.ru (23:50:40 12/09/2011)
  24. das kommt dann hier en
  25.  
  26. public PortIO(int id, PortIO_iface contact, int divider) {
  27. this.contact = contact;
  28.  
  29.  
  30. und wird weiter geleitet zu der privaten variable contact (auch hier ist der inhalt immer noch NULL)
  31. 171086166@qip.ru (23:51:15 12/09/2011)
  32. im späteren wird andauernd versuch eine methode writeLog anzusprechen, welche die aufgabe erfüllen soll
  33.  
  34. zb hier
  35. contact.writeLog(id, "found the following ports:");
  36.  
  37.  
  38. kann nicht gehen weil contact kein objekt zu gewiesen hat
  39. 171086166@qip.ru (23:51:54 12/09/2011)
  40. fälschlicherweise hast du gedacht/gehofft dass er wohl ganz unten deine letzte methode
  41.  
  42. public void writeLog(int id, String text) {
  43. System.out.println("shit");
  44. }
  45.  
  46.  
  47. verwendet. das tut er aber nicht. daher kommt definitiv die null pointer exception
  48. 171086166@qip.ru (23:52:20 12/09/2011)
  49. was ist nun zu tun und was hat das mit diesem interface auf sich ?!
  50.  
  51. public interface PortIO_iface {
  52.  
  53. public void writeLog(int id, String text);
  54.  
  55. public void parseInput(int id, int numBytes, int[] message);
  56.  
  57. public void networkDisconnected(int id);
  58. }
  59. 171086166@qip.ru (23:53:17 12/09/2011)
  60. ein interface ist nur eine richtlinien beschreibung. es befehlt dir, welche methoden ein objekt haben muss. wenn dies gegeben ist, kannst du dieses object überall dort hinschmeissen, wo dieses interface erwartet wird
  61. 171086166@qip.ru (23:53:48 12/09/2011)
  62. die drei methoden musst du auf jedenfall selber schreiben (was du ja bei writelog bereits gemacht hast) aber das ganze kommt in eine eigene klasse, die dann so aussieht :
  63. 171086166@qip.ru (23:54:48 12/09/2011)
  64. public class Peter implements PortIO_iface {
  65.  
  66.  
  67. public void writeLog(int id, String text){
  68. System.out.println("shit");
  69. }
  70.  
  71. public void parseInput(int id, int numBytes, int[] message);
  72.  
  73. public void networkDisconnected(int id);
  74.  
  75.  
  76. }
  77. 171086166@qip.ru (23:55:24 12/09/2011)
  78. public class Peter implements PortIO_iface {
  79.  
  80.  
  81. public void writeLog(int id, String text){
  82. System.out.println("shit");
  83. }
  84.  
  85. public void parseInput(int id, int numBytes, int[] message) {
  86. weiß nicht was hier hinkommt}
  87.  
  88. public void networkDisconnected(int id){
  89.  
  90. weiß nicht was hier hinkommt
  91. }
  92.  
  93.  
  94. }
  95. 171086166@qip.ru (23:57:18 12/09/2011)
  96. so nun in deine BlockPortIO klasse kommt folgendes rein:
  97.  
  98. public class BlockPortIO extends Block
  99. {
  100. static String messageString = "Hello, world!";
  101.  
  102. Peter peter = new Peter();
  103. static PortIO portCom = new PortIO(11, peter);
  104.  
  105.  
  106. -----------------------------
  107.  
  108. static PortIO_iface portCom_iface; <---das hier muss raus und macht kein sinn
  109.  
  110. static PortIO portCom = new PortIO(11, peter);
  111.  
  112. die PortIO Klasse bekommt nun ein objekt vom Typ Peter übergeben, welches das Interface PortIO_iface "implementiert"
  113. 171086166@qip.ru (23:58:55 12/09/2011)
  114. public PortIO(int id, PortIO_iface contact, int divider) {
  115. this.contact = contact;
  116.  
  117.  
  118. das peter-objekt kommt nun hier an und so ist es auch völlig richtig
  119.  
  120. Peter kann nämlich umgecastet werden zu PortIO_iface was genau hier im kopf der funktion getan wird.
  121.  
  122. contact.writeLog bedeutet dann hier nichts anderes wie peter.writeLog :)
  123.  
  124. 171086166@qip.ru (00:00:34 13/09/2011)
  125. Warum macht man das ganze?
  126.  
  127.  
  128. man möchte dem programmierer die möglichkeit bringen die methoden writeLog , parseInput und networkDisconnected komplett selber bestimmen zu können
  129.  
  130. je nach anwendungsfall können hier total verschiedene abläufe sein
  131.  
  132.  
  133. du magst zb writeLog so haben, dass etwas in die konsole geschrieben wird
  134.  
  135.  
  136. ein anderer programmierer möchte aber dass in deine Datei geschrieben wird. dementsprechend verändert er die writeLog methode in der Peter Klasse so wie er es braucht
  137. 171086166@qip.ru (00:01:31 13/09/2011)
  138. ich kann dir leider nur nicht helfen was in die methoden
  139.  
  140. public void parseInput(int id, int numBytes, int[] message);
  141.  
  142. public void networkDisconnected(int id);
  143.  
  144.  
  145. reinkommt. steht bestimmt was in deinen quellen dazu
Add Comment
Please, Sign In to add comment