Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

c++ yerine obje yonelimli c nin avantaji ?


Fly

Öne çıkan mesajlar

selam,

buldugum cevaplar kapasitesi olumune kisitli cihazlarda obje kullanmak ile kullanmamanin farkindan oteye gidemedi, bir da buraya danisayim

yarim yillik stajim boyunca ugrasacak oldugum projenin implementasyonunda soyle bisey izlemisler, gozetmenime teklif edecegim sunu c++' ye cevireyim diye yeterince mantikli bir sebep olusturabilirsem :


void hede_process(int fd)
{
..
}

struct hede
{
..
void (*process)(int);
};

struct hede hede_instance;
hede_instance->process=&hede_metod;
..
hede_instance->metod(hede_instance,fd);


niye c++ kullanmadiniz diyince performans sorunlari cart curt yaptilar
algilayamadigim sey :

ayni geyigi c++ ile normal bir sekilde yazdik diyelim, lakin

stl kullanmadik
exception hele hic
dynamic allocationdir pointer casttir bunlari c stili hallediyoruz mumkun oldukca, runtime' da su instance hangi tipte yea gibi sorular sormuyoruz
virtual metodlar saniyede 10 milyon kez cagirlmiyor veya hadi onu bile kullanmadik diyelim

bu durumda su kodla ugrasip kanser olmama degecek ne gibi bir avantaji var manuel yolla olustudugumuz obje yoneliminin ?

su anda bildiginiz 4 gb cift cekirdekli islemcili sistemde calisiyor da, bir ihtimal embedded sistemlere aktaracagiz gibisinden bisey demislerdi, gomulu sistemlere yazilim yapanlardan donus alabilirsem ozellikle muhtesem olur
Link to comment
Sosyal ağlarda paylaş

C++ compile edilince, virtual metodları geçersek, yukardaki kodun üreteceği koda benzer bir kod üretecek. C ile nesne yönelimli programlamaya çalışmak, çok çok özel bir sebebi olmadıkça, pek de mantıklı gelmiyor bana.

Ama düzgün çalışan on bin satır kodu da daha rahat anlaşılsın diye C++ a çevirmez kimse. Zorluğundan değil, dünyanın parası. Düzgün otomatize edilmiş test yoksa portun doğru yapıldığını test etmek kolay değil. Uzun vadede getirisi değer mi, onu sadece proje içindekiler bilebilir. Yine de projeye stajyer olarak katılacaksan sana yaptırmayı göze alabilirler belki.
Link to comment
Sosyal ağlarda paylaş

yok, yeni bir arastirma konusuyla ilgili, stabil bir uygulamayi gectim ilk gunden cok basit bir sekilde cokertmeyi basardim

ortalik thread ve soket festivali, ustune ornegin programa gelen bir mesaj 7 farkli dosyada implemente edilmis objelere gelip arada bir onceden ziyaret edilenlere girip cikiyor

sunu production ortamina koyduklarinda 1000 baglantidan mesaj alacaksa onlarla ugrasan 1k thread olacak mesela gozlemledigim kadariyla, bunu poll vb bir seye cevirmek istedigim zaman file descriptor kimden geldi, su objeye hangi asamada metodu bagladik vb sorularin cevabini almak icin dort bes dosya geri gidiyorum, derdim bu hani

yoksa metodlara bir iki cagridan ibaret olsa neyse

stajyer olarak zaten kodu anlayip yeni modul yazmak olacak gorevim, kodu anlarken cevirmeyi teklif edecegim, %5-10 undan fazlasini degistirecegimi zannetmiyorum

da iste ikna edebilmek icin farkli fikirlere ihtiyacim var yukarida saydigim tarzda kodlamaya ek olarak
Link to comment
Sosyal ağlarda paylaş

Onlar kodu çevirsinler diye alınmıyor yalnız. Var olan milyon satır kodları yeniden yazamayacakları için üzerine layer geçiriyorlar. Bi süre sonra o layer da anlaşılamaz hale gelince bi layer daha geçiriyorlar. Hatta sonra bi de 127 layer architecture yaptık diye keklemeye çalışıyorlar. Ama zaman geliyor illa o Cobol kodunda değişiklik yapmak ya da en azından kodu anlayıp debug etmek gerekiyor. O elemanlar da bu iş için alınıyor genelde. Genelde bankalarda.
Link to comment
Sosyal ağlarda paylaş

50 bin satırlık kodu çevirmek yerine. sıfırdan yazmak daha mantıklı bana kalırsa. hele bir de kod karman çorman ve zaman içinde farklı farklı kişilerin eklemeleri çıkarmaları varsa.

Sadece bir ekip ya da bir kişi yazmış olsa yine bir nebze mantığını idrak etmek, çevirmek kolaylaşabilir, ama alakasız kişilerin uzun bir zaman diliminde müdahale ettiği kodlarla uğraşmak pek mantıklı gelmiyor.
Link to comment
Sosyal ağlarda paylaş

Embedded ortamlarda C hala domine ediyor, ben mesela 5.5 senedir c harici baska bisey kullanmadim, kullandirmadilarda. Bu arada asagida bahsedicegim sebebler linux ortami icin gecerli cogunlukla.
En temel sebebi kaynak. Bunun aslini ogrenmek icin linus torvalds'in bilmem kac yilinda neden kerneli c++ ile yazmadiniz diye darlayanlara attigi bir mail var internette. Adamlar denemisler vakti zamaninda.
Bunun disinda gcc c compiler'i cok olgun ve buna bagli olarak debug etmek rahat ve c compiler'i tanimasi daha rahat. Zamanla nasil bir kod urettiginden haberdar sekilde is yapiyorsun.Tecrubeli bi kac tane yazilim mimarlari tanimistim calistigim yerde, herifler kodu yazarken kafada disassemble yapiyordu. Birde c++ degisik bi dil, mesela derleyiciler ne kadar farkli olabilir bi fikir edinmek istiyorsan sura bi goz atmani tavsiye ederim; http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

C yi c++ gibi kullaniyor demissin ama function pointer 'hello world' haricindeki C projelerin olmazsa olmazlarindandir.
Bunun disinda C++ cokda gerekli degil, object oriented mantigini dilin kendisi zorluyor belki ama gtk'ya x-window'a, opengl e, goz atarsan c kullanilarakda cok guzel object oriented yazilabildigini gorebilirsin, onemli olan tasarim neticesinde. Tabi uygulamak biraz daha zor haklisin.

Birde nedense embedded ortamlarda yazilim gelistirenler C'de ne yaptigini iyi biliyor sanki.
Link to comment
Sosyal ağlarda paylaş

derken koca hashtable'lar ve java içeren bir branch girdi işin işine ahah, vazgectim

function pointerları severim de daha temiz yazmak mumkun olsa gerek
biraz da degisken isimleri falan hicbiseyde aciklama yok ondan tiksindim belki de, neyse

fakat 2012 senesinde yeni standardı da geliyor vs derken compilerlar yeterince olgun zannediyordum, hiç aklıma gelmemişti o konuya bakmak, teşekkür ettim
Link to comment
Sosyal ağlarda paylaş

class hede
{
void metod();
void metod2();
...
void metodN();
}

/////////////////////////////

struct hede
{
void(*metod)();
void(*metod2)();
...
void(*metodN)();
};

void metod(struct hede*);
void metod2(struct hede*);
...
void metodN(struct hede*);

komik bir şey söyleyeyim, teorik açıdan bakıldığında alttakinin performansı daha düşük olur ve daha önemlisi instance başına N*Pointer size memory overhead yaratırsın. Bu yaptıkları C++ da virtual function kullansan instance başına alacağın 1xPtrSize overheadden bile N kat daha fazla.

performansı da şöyle kötü, eğer bir class'ın metodu virtual değilse işlemcinin o metod çağırıldığında atlayacağı bellek alanı compile time da belli. senin yönteminde atlanacak yeri bulmak için önce bellekteki pointerı okuyup sonra atlayacak, dynamic dispatch gibi. çok bir şey mi? hayır değil, milisaniye mertebesinde bile bir fark yaratmaz ama bu saçmalığı savunmak için "performans hede hödö" diyemezler. adamın ağlnını karışlarım.

değiştirmek için asıl önemli argüman, metodX çağırıldığında o metodX'in instance bazında önceden kestirilemeyecek şekilde değiştirilebileceği ve bunu debug etmenin anlamsızca zorlaşacak olması.

misal kodu modifiye eden yeni yetme bütün değerleri kısa yoldan memset le 0 a eşitlemeye kalkarsa, hatayı bulmak için kafayı sıyırmanız işten değil. ki embedded sistemlerdeki debuggerla bu değişkenin üzerine yazıldığı yeri bulmak için watchpoint falan eklemeye çalışmak, kan getirtir kaaan.

benim tavsiyem kötü bi c programcısının yazdığı koda elleme.
usul usul uzaklaş. yok gibi davran.
Link to comment
Sosyal ağlarda paylaş

hashtable/java basina gelen en guzel sey, dinazor C kodunu refactor e sakin girisme.

Turkiyede staj yaptigini on gorup sunu soyliyebilirim, embedded equipment da C yazilir herkes soyler, c++ daha yavas kalir diyen adamin lafina guvenmen icin bir elin parmaklarini gecmeyen software arch. lardan birinden duymus olman gerekli.

Bu adamlar da telco sektorunde sadece, fyi.
Link to comment
Sosyal ağlarda paylaş

eö yok
yurtdışı ve telekom operatoru :d

routerlara eklenecek uygulamalarda c++ pek yaygın kullanılan bir dil değilse sorumun cevabını almış sayılırım öte yandan, yetkili amcanın şehirdışına çıkması gerekmeseydi ikinci gün vereceği detay buymuş :/
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...