Új hozzászólás Aktív témák
-
Cathfaern
nagyúr
Nálunk ez úgy zajlott (előző munkahelyemen, jelenlegin nem jött új programozó mióta itt vagyok), hogy az új embert leültettük egy tapaszt programozó mellé. Ő elmagyarázta a keretrendszert amit használtunk, illetve a keretrendszerben lévő saját fejlesztéseket (kvázi mi az amit a keretrendszer doksijában nem találsz meg). Ezt követően 1-2 napig a tapasztalt arc mellett maradt, aki csinálta a napi munkáját, viszont folyamatosan magyarázta, hogy mit csinál. Ha az új ember úgy látta / mi úgy láttuk, hogy menni fog neki egyedül is, akkor kapott valami feladatot, viszont továbbra is a tapasztalt közelében maradt halló és látótávolságra, szóval ha bármi kérdése volt, vagy elakadt, akkor a tapasztalt csak picit odébb gördült a székkel és már látta a monitorát / tudott segíteni.
-
floatr
veterán
Nálunk vannak belső téma-specifikus oktatások, de hasonló alapokon megy a dolog, mint az előbb említettek.
A legjobbat akkor teszed magaddal, ha a maradék idődben gyártasz magadnak egy példát, amiben végigviszel pár tutorialban leírt dolgot. Szeretik az aktív embereket, és kevesebbet kell majd másokat nyaggatnod egy idő után.
-
-v-
addikt
Hat eleg szeles a skala szerintem ... van ahol a knowledge transfer mint olyan nem is letezik, van ahol meg tok nagy hangsulyt fektetnek ra. Kollegaktol is fugg, meg attol is, hogy az adott helyen mi a policy erre ... remenykedj hogy jo helyre kerulsz, mert be lehet szopni, plane ha valami ezereves fos legacy codebase van, mindenfele sajat szutykokkal, amik kozeleben se jarnak a szabvanyos megoldasoknak, minden mindennel okosan ossze van drotozva, doksi nulla, design nulla, knowledge transfer nincs, kollegak basznak rad, oldd meg ahogy tudod, aztan mehetsz turkalni nyakig a kakiban ... Szerintem azert nem ez az altalanos, de van ilyen is. Remelhetoleg baratsagos konyezetbe, meg szakmaikag jo projektre mesz.
-
caindwan
tag
Ezek mik? Sokat latok ilyesfele kifenezeseket javas dolgoknal, de valahogy nem ertem, hogyan kellene oket hasznalni. Ha jol sejtem akkor elore megirt osztalyokrol van szo?
Eddig csak olyan alap java-t tanultam es szeretnek komolyabbat is tanulni (otthon ) es nem tudom merre kezdjek hozza. Gondolom ezek jo kiindulasi pontok lennenek.[ Szerkesztve ]
-
boost
addikt
Sziasztok, lenne egy kérdésem a Mockito-val kapcsolatosan.
Már nem nagyon foglalkozok Java fejlesztéssel, de most egy BigData projekt kapcsán beleugrottam újra, nagy lelkesedéssel.
Le is érkeztem a gödör aljára. Szóval egy kis progit írtam, ami különbözo" rendszereket hivogat meg, akár többször is. A különbözo" rendszerek saját zárt api-kkal rendelkeznek.
Az összes rendszerhez írtam egy ValamiCommander osztályt, aminek a feladata a külso" rendszerekkel való kommunikáció, és aminek a unit tesztjénél az eredeti helyett mockobjectekkel dolgozok.
pl: FileSystem fileSystem = mock(FileSystem.class); ezután when, meg verify, stb.Ezeket a CommanderTest teszteknél használtam is nagy örömmel. Külön tetszett, hogy nem kellett setter a mock objekthez, hanem beleinjektálta.
Mivel a commander osztály nem tartalmazott üzleti logikát, csak lényegében továbbadta a hívást a külso" APInak, ezért sok értelme nem volt a unit tesztelésnek, de legalább belerázódtam egy kicsit.
Az üzleti logika egy szinttel feljebb van. Vannak ValamiTask osztályaim, amik mindegyike tartalmaz egy doAction metódust, és az tartalmazza az üzleti logikát, valamint a commander meghívását.
ès most jön a kérdés:
Hogy oldom meg a TaskTest osztály testDoAction metódusában, hogy az ott példányosított Task osztály doAction függvényében meghívott commander osztály mock objektumokat használjon? Tehát két hívásra to"le.
Nekem van pár túl gyenge tippem, de szeretném megkérdezni a közönséget is.
[ Szerkesztve ]
-
boost
addikt
Ja, és az én "rossz" megoldásom az lenne, hogy lebontani ezeket a rétegek beanekre, és akkor lehetne távolról is több rétegen át injektálni a mock-objekumokat.
A szerintem jó megoldás, hogy el kell engedni a többrétegu" unit teszteket, hisz a unit teszt arra van, hogy azt a metódust tesztelje, az abban levo"üzleti logikát, és nem a metódus által meghívott metódusokat, szóval ebben az esetben a commander hívás már egy mock commander lesz. és csak arra koncentrálok, hogy mikor, és hányszor lett meghívva a mock kommander, és ez az eredmény megfelel-e annak, amit vártunk to"le.
[ Szerkesztve ]
-
Dave-11
tag
Sziasztok!
Korábban már volt egy kis Java ismeretem, de most nyáron jobban belemélyültem a dologba, éppen az öröklődésnél és az osztályoknál járok. Mindent értek, találtam egy kis dolgot, ami nem tiszta.
A könyv amit olvasok (Agyhullám - Java) azt írja, hogy "A privát tagok nem öröklődnek."
Én írtam egy A osztályt, aminek van egy int típusú privát tagja, és ezt el lehet érni és módosítani két publikus metódus segítségével. Aztán csináltam egy B osztályt, ami az A-t bővíti.
Létrehozok egy B objektumot, de ugye a B objektumnál is meg tudom hívni az elérő és módosító metódusokat, tehát a B mégis rendelkezik azokkal az adattagokkal?
Vagy ez azért működik, mert a B típusú objektum közben egy A objektum is (tehát a többalakúság miatt)?
Vagy hogy lehet a legjobban értelmezni ezt a mondatot?:D Semmi :D
-
sutszi
veterán
válasz Dave-11 #5764 üzenetére
Az A osztályodban az adattag private, de a hozzá tartozó getter & setter public. Ezért azok bárhonnan láthatóak. Ez így van jól.
Ha csinálsz egy public adattagot az A osztályban akkor látni fogod, hogy B osztályban el tudod érni getter & setter nélkül... Ez mondjuk nem túl egészséges...de ha tovább olvasol majd meglátod.
A getter & setter lényege pont az, hogy ellenőrzött módon tudj az adattagokhoz hozzáférni...
Mondja, Mr. Babbage, ha rossz adatokat ad meg a gépnek, akkor is jó válasz fog kijönni belőle?" Képtelen vagyok felfogni azt az értelmi zavart, ami valakit egy ilyen kérdés feltevésére késztethet. - by Charles Babbage
-
sutszi
veterán
válasz Dave-11 #5766 üzenetére
A kérdés ennél kicsit bonyolultabb.
Itt érdemes megnézni a Private Members in a Superclass című részt.
Tehát az alosztály nem örökli az ősosztály privát tagjait. Azonban ha ezekhez a tagokhoz az ősosztályban írsz public vagy protected metódusokat akkor az alosztály ezáltal hozzáférést kap az ősosztály privát adattagjához...
Ezt egyébként gyakorlati úton is lehet bizonyítani.:
Ha a ClassA-t átírod az alábbi kódban a saját osztályaid nevére, akkor ez kiírja az adott osztály adattagjait. Ez a kód amúgy a stackoverflow-ról van. Van ott pár érdekes kérdés erről a témáról.
Szóval ha lefuttatod akkor látni fogod, hogy az ősosztályodra listázni fogja az adattagokat, de a belőle származó alosztály esetében nem fog megjelenni a listában az ősosztály private adattagjai.public static void main(String[] args) {
inspect(ClassA.class);
}
static <T> void inspect(Class<T> klazz) {
Field[] fields = klazz.getDeclaredFields();
System.out.printf("%d fields:%n", fields.length);
for (Field field : fields) {
System.out.printf("%s %s %s%n",
Modifier.toString(field.getModifiers()),
field.getType().getSimpleName(),
field.getName()
);
}
}De olvastam olyat is ahol azt írták, hogy inkább azt modjuk örökli, de nincs hozzáférése...
Mondja, Mr. Babbage, ha rossz adatokat ad meg a gépnek, akkor is jó válasz fog kijönni belőle?" Képtelen vagyok felfogni azt az értelmi zavart, ami valakit egy ilyen kérdés feltevésére késztethet. - by Charles Babbage
-
Karma
félisten
Sőt, ha már reflexióval birizgáljuk őket, hozzá is lehet férni az értékéhez (persze ha nincs security manager az útban).
import java.lang.reflect.Field;
public class HelloWorld{
public static class A {
private int value;
public A(int value) {
this.value = value;
}
}
public static class B extends A {
public B(int value) {
super(value);
}
}
public static void main(String []args){
B b = new B(42);
try {
Field valueField = A.class.getDeclaredField("value");
valueField.setAccessible(true);
int internal = valueField.getInt(b);
System.out.printf("Found value: %d%n", internal);
} catch (Exception ex) {
System.out.printf("Reflection failed: %s%n", ex.toString());
}
}
}Ez az előbbi peremfeltétellel azt írja ki, hogy "Found value: 42".
[ Szerkesztve ]
“All nothings are not equal.”
-
nagyúr
Sziasztok! Van egy elérési utam, amiből hátulról szeretnék az első / jelig törölni karaktereket.
sdcard/Mappa/Almappa/Masodikalmappa/fajl.txt => sdcard/Mappa/Almappa/Masodikalmappa/
Erre írtam ezt a ciklust:
while(SharedData.choosenDatafileFolder.substring(SharedData.choosenDatafileFolder.length() - 1)!="/"){
SharedData.choosenDatafileFolder.substring(SharedData.choosenDatafileFolder.length()-1), "");
}Ez valamiért ezt eredményezi: sdcard/Mappa/Almappa/ (nem az első / jelig töröl)
Miért csinálja ezt?
-
sztanozs
veterán
SharedData.choosenDatafileFolder.substring(SharedData.choosenDatafileFolder.lastIndexOf("/"));
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Dave-11
tag
A csomagon kívüli futtatható osztály mit jelent?
:D Semmi :D
-
Szmeby
tag
válasz Dave-11 #5773 üzenetére
Az osztályokat csomagokba rendezzük, arról gondolom már volt szó. Bizonyára valamilyen csomagban lévő osztályról beszél (pl.: com.dave.proba.MyClass), és most az idézeted egy az adott csomagon kívül eső osztályra tér rá (pl.: com.dave.MyOtherClass).
Egy osztályt futtathatónak nevezhetünk, ha van pl. main metódusa. De a "futtatható" szó akár a Runnable interfészre is vonatkozhat, ami a szálkezelésnél jön elő, és teljesen mást takar.
Amúgy nem tudom, ennyi információból nem lehet megmondani, max találgatni.
Szerintem ne várj érdemi választ egy kontextusból kiragadott mondatra, akarom mondani 4 szóra.Valószínűleg többre mennél a könyv eredeti (angol nyelvű) változatával. Bár nem olvastam még, de sajnos az a tapasztalat, hogy előszeretettel fordítanak le MINDENT (igen, a keyword-öket is) elcseszett magyar kifejezésekre, így totálisan érthetetlenné téve a szöveget. Persze az is lehet, hogy csak nekem tűnik érthetetlennek, mert én az angol neveken szocializálódtam. Sose hívnám az interfészt pl. felületnek. És ez még a megbocsátható elfordítások közé tartozik. Borzasztó miket ki nem találnak.
-
Szmeby
tag
"Vannak ValamiTask osztályaim, amik mindegyike tartalmaz egy doAction metódust, és az tartalmazza az üzleti logikát, valamint a commander meghívását.
[..]
Hogy oldom meg a TaskTest osztály testDoAction metódusában, hogy az ott példányosított Task osztály doAction függvényében meghívott commander osztály mock objektumokat használjon? Tehát két hívásra to"le."Hát leküldöd neki.
Bár nem látom, hol van itt a második réteg.Ezekszerint nem ilyen a design:
public class Task {
private Commander cmd;
public Task(Commander commander) {
cmd = commander;
}
public doAction() {
// using cmd
}
}Tesztelhetőség szempontjából ilyesmi lenne a célravezető. Konstruktor argumentumként adod le neki a mockot, vagy a mockokat használó Commander példányt és azt csinál majd vele, amit csak akar.
[ Szerkesztve ]
-
aronkatona92
csendes tag
Pont most kezdtem olvasni a clean code magyar verzióját és a felület szónál azonnal eszembe jutott a forum. Amíg nem írt konkrét példát addig fogalmam nem lett volna mire gondol a költő
Általában neten szoktam angolul olvasni, de ez most kivétel.
Van még pár gyöngyszem amit tudnál mondani? -
-v-
addikt
válasz aronkatona92 #5778 üzenetére
magyar verzióját
Fasza lehet
-
gygabor88
tag
-
Szmeby
tag
válasz Dave-11 #5784 üzenetére
Ha biztosra akarsz menni, akkor a default package-be teszed.
Ami ugye azt jelenti, hogy az osztály a classpath gyökerébe kerül, és elhagyod az osztály első sorában a package sort.
Habár szerintem is a sereg csomagon kívüliségre gondolt, de furán fogalmaz, az biztos. Ha úgy érzed valami speciális illene ide, akkor csak a default package marad. Ki tudja, lehet, hogy előadáson így nevezte a default package-et. Ha így lenne, de te nem így csináltad, akkor viszont mehetsz reklamálni, mert azt nem úgy hívják és különben is odaírhatta volna, hogy pontosan mire gondol. -
Szmeby
tag
Ha nem akarod mockolni a Commandert, akkor csinálj egy teljesértékű Commander objektumot, amiben persze továbbra is mockolod a mockolnivalót.
Ezt a Commandert pedig nyugodt szívvel leküldheted a tesztelendő osztálynak.
Bár a kódot te látod, neked kell eldönteni, hogy mit lehet és érdemes megcsinálni. Kicsit engem is zavar, hogy több rétegen át kell lemenniük a mockoknak, mert nem lehet másként. -
caindwan
tag
Sziasztok!
Tudnátok ajánlani valamilyen könyvet? Eddig Nagy Gusztáv könyvéből tanultam. -
Dave-11
tag
válasz caindwan #5787 üzenetére
Először én is azzal kezdtem a Java tanulást, de szerintem egy kicsit erős kezdőknek, most nyáron elkezdtem olvasni az Agyhullám - Java című könyvet, ez nagyon jó!
Kicsit lazább hangvételű könyv, vannak benne poénok is, életszerű példák, a leckék végén gyakorlatok és hozzájuk tartozó megoldások.
Csak ajánlani tudom:D Semmi :D
-
nagyúr
válasz WonderCSabo #5789 üzenetére
lol
-
bucsupeti
senior tag
EE témával kapcsolatban lenne kérdésem. Nemigazán vagyok otthon a témában, most kezdek részletesen belemerülni.
A kérdésem az hogy mi a különbség ha EJB-vel vagy ha az nélkül csinálok egy web alkalmazást? Értem hogy az EJB-k azok önállóan futkorásznak a konténerben és ezeket meg lehet szólítani és a publikált szolgáltatásait elérni. Ebben lehet pl valamilyen perzisztenciakezelőn keresztüli adatbázis elérés stb.
Ugyanakkor csináltam próbaként olyan alkalmazást ami Tomcat-en futott, nem volt benne semmiféle EJB és azzal is tudtam Hibernate-el adatbázist kezelni.
Szóval mi a különbség az EJB konténerben és a WEB konténerben futtatott üzleti logika között?
Értem hogy szebb ha elkülönül ez a réteg, de egyéb más előny/hátrány van? Pl többfelhasználós környezetben tud működni a webkonténeres megoldás?"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
RaPiDsHaRe
aktív tag
Hello!
Olvasom az Agyhullam: java címü könyvet. Ebben a kodban még mi a hiba:
Probáltam megkereseni, de nem jöttem rápublic class BeerSong { //14. oldal
public static void main(String[] args) {
int beerNum = 99;
String word = "bottles";
while (beerNum > 0)
{
if (beerNum == 1)
{
word = "bottle";
}
System.out.println(beerNum + " " + word + " of beer on the wall");
System.out.println(beerNum + " " + word + " of beer");
System.out.println("Take one down.");
System.out.println("Pass it around.");
beerNum = beerNum - 1;
if (beerNum > 0)
{
System.out.println(beerNum + " " + word + " of beer on the wall");
}
else
{
System.out.println("No more bottles of beer on the wall");
}
}
}
} -
nagyúr
-
WonderCSabo
félisten
válasz RaPiDsHaRe #5796 üzenetére
Egy hiba mindenképpen van benne. Először kiírja 2x a cuccot, aztán csökkenti a számot és még egyszer kiírja. Ez a végén ahhoz fog vezetni, hogy "1 bottles of beer on the wall" is ki lesz írva.
-
zserrbo
aktív tag
GUI-t készíteni Swing/Awt-vel hogy szokás (pl egy cégnél), GUI tervezővel (pl ami Netbeansben is van) vagy kézzel megírni az egészet? Ha hülyeséget kérdeztem akkor bocs
[ Szerkesztve ]
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Érkezik Magyarországa az LG szuper dizájnos hordozható projektora
- World of Tanks - MMO
- Otthoni hálózat és internet megosztás
- Ukrajnai háború
- Stellar Blade
- AMD off topik: VGA, CPU, APU és minden, ami AMD
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Így építsd a billentyűzeted!
- Linux felhasználók OFF topikja
- Bemutatkozott a Moto G32 4G
- További aktív témák...
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen