Problém s dedením – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s dedením – Java – Fórum – Programujte.comProblém s dedením – Java – Fórum – Programujte.com

 

Kent0
Stálý člen
7. 3. 2015   #1
-
0
-

Ahojte, 

robím program v ktorom analyzujem rámec, ktorý si odchytím pomocou programu Wireshark. Zachytený rámec môže byť typu Ethernet II, IEEE 802.3 - LLC atď..keď je typu Ethernet II tak môže byť napr IPARP atď.. a keď je napríklad IP môže obsahovať vnorený protokol UDP alebo TCP alebo iné . Mám vytvorenú triedu Paket v ktorej si nastavím cieľovú a zdrojovú MAC adresu a zistím akého typu daný rámec je. A potom mám ďalšie triedy Ethernet II,  IEEE 802.3 - LLC..ktoré majú svoje ďalšie vlastné pridané parametre, ktore postupne dopĺňajú..takisto aj IP ARP a ostatné čo som spomenul. Ale asi niečo robím zle lebo pri dedení mi to padne. Chcel by som sa opýtať čím to bude? 

//tu si načítam paket a vytvorím nový objekt 
while(pcap.nextEx(header, jbuffer) == Pcap.NEXT_EX_OK){ //citam az kym nie som na konci
			 PcapPacket packet = new PcapPacket(header,jbuffer);		
			  Paket paket = new Paket(frame_number,packet);
	...
}
//konštruktor v triede Paket
public Paket(int frame, PcapPacket packet){
		this.frame = frame;
		this.packet = packet;
		setAdress(packet);		//nastaví MAC adresy
		setSize(packet);		//zistí veľkosť
		setTyp(packet);  		//Ethernet II, IEEE 802.3.. 
	if(getTyp().equals("Ethernet II")){
               Ethernet ethernet1 = new Ethernet(frame_number,packet);
               
           }
           else if(getTyp().equals("IEEE 802.3 - LLC")){
               LLC llc1 = new LLC(frame_number,packet);
               
           }
           else if(getTyp().equals("IEEE 802.3 - SNAP")){
               SNAP snap1 = new SNAP(frame_number, packet);
               
           }
           else if(getTyp().equals("IEEE 802.3 - Raw")){
               RAW raw1 = new RAW(frame_number, packet);
              
           }
	}

a keď je to napr EtherType Ethernet II tak idem do triedy Ethernet  kde je konštruktor :

public Ethernet(int frame_number, PcapPacket packet) {
		super(frame_number, packet);  //vyhodi chybu
		setEtherType(packet);
		setIP(packet);
		
	}

Ak by ste mi vedeli pomôcť bol by som vďačný. Vopred ďakujem. 

Nahlásit jako SPAM
IP: 147.175.176.–
ingiraxo+15
Grafoman
8. 3. 2015   #2
-
0
-

Problém je, že ten tvůj packet dělá víc než je třeba. Měl by obsahovat pouze data, né žádnou logiku, na to by si měl vytvořit nějakej Helper, Builder nebo jinej objekt. Pro vytvoření Ethernetu by si měl udělat Factory, která podle typu vrátí instanci.


a to že ti to v Ethernet vyhodí chybu... od čeho dědí Ethernet? Pokud od ničeho, tak ten super tam nemůže takto být.
 

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kit+15
Guru
8. 3. 2015   #3
-
0
-

#2 ingiraxo
Proč by třída Paket neměla mít žádné metody? V Javě se přece má programovat objektově.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:dd44:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
8. 3. 2015   #4
-
0
-

#3 Kit
tak v javě to jinak ani moc dobře nejde, ale tím jsem reagoval na to vytváření instance Ethernetu uvnitř paketu, což je blbost, by mělo být řešené přes Factory. A potom je ještě otázka, jestli to dávat přímo do paketu, jestli jen přes setter to nenastavit mimo paket.

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kit+15
Guru
8. 3. 2015   #5
-
0
-

#4 ingiraxo
V Javě se běžně programuje procedurálně, i když to není žádoucí - viz nadužívání getterů a setterů.

Factory se používá tam, kde potřebuješ vyrobit objekty různých tříd se stejným rozhraním, což asi není tento případ.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:dd44:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
8. 3. 2015   #6
-
0
-

#5 Kit
Je pravda, že nevim jestli ty objekty mají společnýho předka (Ethernet, LLC, SNAP, RAW, ..).. nevim jestli to jsou jeho objekty nebo z API, ale vzhledem k tomu, ze uvedl konstruktor na Ethernet, tak hádám, že dědí z nějakýho Ethernetu z API, není problém tam dosypat vlastní interface do všech 4 objektů

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kent0
Stálý člen
8. 3. 2015   #7
-
0
-

#2 ingiraxo Ide o to, že v triede Paket si nastavím MAC adresy, veľkosť a typ. Ak je typ Ethernet tak zas v triede Ethernet(ktorá dedí od triedy Paket) si nastavím aký protokol v ňom je a IP adresy. Pointa je, že keď sa mi zanalyzuje rámec tak chcem aby mal všetky informácie(MAC adresy, veľkosť, typ, IP adresy a ďalšie)..

Nahlásit jako SPAM
IP: 147.175.176.–
ingiraxo+15
Grafoman
9. 3. 2015   #8
-
0
-

#7 Kent
vůbec se mi třeba nelíbí, že Ethernet dědí z Packet a ty v konstruktoru Paket vytváříš instanci třídy, která vychází z Packet... nepřipadá ti to takový divný?
Proč vůbec Ethernet dědí z Packet?

A vůbec.. Ethernet a ty další 3 by neměli dědit z Packet, když už to takhle "divně" chceš a potřebuješ mít referenci na Paket, tak na Ethernetu udělej asociaci na Packet, ale i tak mi to nepřijde potřeba

Takhle to už dává smysl proč ti to nejde.. si se zacyklil..

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ingiraxo+15
Grafoman
9. 3. 2015   #9
-
0
-

#7 Kent
např. toto je jedna z možností http://paste.ubuntu.com/10569480/

Dost záleží co s tím děláš, jestli všechny ty paketový typy mají stejný vlastnosti jen jiný obsah nebo i odlišný vlastnosti..  veškerá implementace záleží na způsobu použití

Pokud všechny maji stejný vlastnosti, tak v konsturktoru ve třídě Result by měl být volán Factory (PacketFactory)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kent0
Stálý člen
9. 3. 2015   #10
-
0
-

#9 ingiraxo
Ďakujem pomohlo mi to a prerobím si to :) 

Nahlásit jako SPAM
IP: 147.175.176.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Podobná vlákna

Problém — založil Jano

Problem — založil roonill

Problém s IE — založil kECUB

Problém s $this — založil Marty

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý