Şimdi Ara

Java danışma

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
28
Cevap
0
Favori
572
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • Java ogrenmeye calısıyorum. Ayrıntı sorularda kendisine danışabilecegim detaycı bir arkadaş var mı?

    Ornek soru:
    C dili le programlama yaparken "int main (void) {...}" şeklinde programımızı yazıyoruz. Javadaysa bu main fonksiyonumuz bir class ın içinde tanımlanıyor. Bu durum bana garip geliyor. Javada aslında main fonksiyon yerine main bir class var ve main fonksiyon dediğimiz şey de bu main class içindeki en kapsamlı/üst fonksiyon mu?

    Ornek soru 2:
    C dili ile programlama yaparken "int main (void) {...}" yazıyoruz. Bu demek ki main fonksiyonumuz input almayacak (void olduğu için) ve integer return edecek. Peki "int main(int argc, char *argv[])" ne anlama geliyor? Integer ve karakter (string?) input edecek ama nereden edecek? Galiba komut isteminden (linuxta terminal) programı çalıştırıken girilen parametreleri algılamak için boyle yazıyoruz. Peki bu main fonkiyonu ikinci bir main fonksiyon ile çağırıp int ve char parametlerini bu ikinci main fonksiyondan almak mumkun mu?

    Ornek soru 3:
    Constructor denilen şeye ne gerek var? Zaten fonksiyon tanımladığımızda ne iş yapmasını istediğimiz belli değil mi? Compiler bu constructor ı neden otomatikman tanımlamıyor? Syntax'ta constructor ın gorulmesinin sebebi ne?

    Şimdiden teşekkurler.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-288644A72 -- 8 Ocak 2018; 4:57:41 >







  • Java da main isimli static metod var. Eger runnable bir jar olusturduysan, jvm ilk calistiracagi metoda buradan karar veriyor. Javada farkli paketlendirmeler var uygulama turune gore, war , jar , ear vs gibi. JAR icin, eger runnable ise, en az bir class ( birden fazla da olabilir ) static void main metodu icermeli. Bunu baska bir class ile de cagirabilir ( 2. Soru ) ama niye boyle bir sey yapmak isteyesin ? Aldigi argumanlar da senin dedigin gibi command line argumanlari. Buna ek olarak jvm argumanlari ile de baslatabilirsin uygulamani.



    Constructor a object oriented dilde ihtiyacin var. Class bir sablon yalnizca, nasil instantiate edecegine sen karar verirsin. Her seyi fonksiyonlarla hallederek OO programlama yapmis olmazsin :)



    Mobilden yaziyorum, cok detay veremedim.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 1. Java'da herşey object oriented, bu nedenle class tanimlamak mecburi. main() metodu static tir, o kisim onemli. Bir programi baslatmak icin launcher a icinde static main metodu olan bir class i arguman olarak belirtmen lazim. Istersen gelistirdigin yazilimdaki class larin birden fazlasinda main metodu olabilir, sorun cikartmaz, cunku launcher a onlardan sadece birini gonderebilirsin.

    2. Java sorusu degil bu.

    3. Object oriented kavramlari calisman lazim, Java'da fonksiyon yoktur, sadece metod var. Sürekli C ile kıyaslayarak Java öğrenemezsin.



    < Bu mesaj bu kişi tarafından değiştirildi seyfi84 -- 8 Ocak 2018; 9:38:23 >
    < Bu ileti mini sürüm kullanılarak atıldı >
  • 1- Main fonksiyonu derlenmiş programın başlangış noktası olarak şarttır. programın başlayacağı main'i içeren sınıf oluşturulmaksızın programın çalışabilmesi için main statik tanımlanıyor olmalı. Derlenmiş program deil de yorumlanan / interpreted program ile çalışırsan main şart olmayabiliyor, yani ilk satırdan itibaren kodlar sırayla yorumlanarak çalıştırılıyor.



    3- constructor 2. soruda sorduğun argümanların sınıflara uygulanmış hali denilebilir ve cok kullanışlı bir özelliktir. Yani gereklidir.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Cevaplayan arkadaşlara teşekkurler. Yalnız yazdıklarınızı ancak bir yazılım muhendisi anlar :D Bizim bolumde bu kadar anlatılmıyor :P

    Jar nedir jvm nedir, statik tanımlama nedir, metod nedir bunlara bakmak lazım.

    Ama şimdilik şoyle anladım (revivo nun cevabına gore): Eger statik bir main fonksiyonu tanımlarsam class'a gerek duymuyorum.

    Constructor da olay su galiba, biz olusturduğumuz class ı ne şekilde kullanacağımıza constructor ile karar veriyoruz. Yani diyelim ki object oluştururken iki input girersem şöyle işlem yap, 3 input girersem şöyle yap gibi. Bu da tek class'ı farklı işler için kullanmaya olanak tanıyor.

    Seyfi sen de extra bilgi vermişsin, birden fazla class içinde main çağırılırsa sıkıntı olmaz diye.(Bu arada javada fonksiyon değil method diyoruz galiba). Launcher kodu satır satır okuduğu için mi sorun çıkmıyor? Yani her satır okunurken kendi içinde değerlendiriliyor demek mi istiyorsun? Dolayısıyla makine diline (10101011) a indiğimizde main veya başka method ayrımı kalmıyor?




  • quote:

    programın başlayacağı main'i içeren sınıf oluşturulmaksızın programın çalışabilmesi için


    Yanlis. Sinif daima olusturulur, olusmayan sey nesne/instance.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • birden fazla sinif icinde main cagrilir demedim, main olabilir dedim.
    C'de birden fazla main olursa linker hata verir, fakat Java'da oyle linker yok, hersey dinamik olarak yuklenir. dynamic dispatch, class loading...



    < Bu mesaj bu kişi tarafından değiştirildi seyfi84 -- 9 Ocak 2018; 11:18:17 >
    < Bu ileti mini sürüm kullanılarak atıldı >
  • seyfi84 S kullanıcısına yanıt
    Aynen, orada anlam eksikliği var, yazarken toparlayamadım :|

    < Bu ileti mini sürüm kullanılarak atıldı >
  • seyfi84 S kullanıcısına yanıt
    Doğru. Ben de onu kastetmiştim, yazarken oyle yazmışım. Peki bu dynamic liği nasıl sağlamış Java, neden C de bu durum yok?

    (Bir tahminde bulunmak istiyorum: Java methodların isimlerine takılmıyor, method ne zaman çağırılırsa o zaman işleme sokuyor. C ise once bir sınıflandırma ve hiyerarşi oluşturuyor. Bu hiyerarşinin referans noktası da main isimli fonksiyon. mu?)
  • Temel seviyede de olsa c++ ta biraz zaman geçirseydin java çok basit gelirdi. C struct'u ile c++ class'ı arasındaki ilişki, oradaki evrim bütün sorularının cevabıdır.
  • quote:

    Orijinalden alıntı: elektro_gadget

    Temel seviyede de olsa c++ ta biraz zaman geçirseydin java çok basit gelirdi. C struct'u ile c++ class'ı arasındaki ilişki, oradaki evrim bütün sorularının cevabıdır.

    Ya aslında ders gereği 3 ay kadar C++ ile zaman geçirdim. Pek oturmamıştı o zamanlar.

    Şoyle mi?
    - C object oriented değil (buna klasik diyelim)
    - C ++ klasik ama object oriented ogeler taşıyor. Klasik bazlı object oriented?
    - Java tamamıyla object oriented. Main bile Class'ın içinde (dolayısıyla main ancak bir object oluşturulduğunda çağırılıyor).

    Ayrı bir soru olarak:

    Javada cok method var (sallıyorum "setout.ln.xdrag()" gibi ). Hani bir yabancı dil ogrenirken vocabulary ogrenmek lazım ya. Javada da oyle. Bu kadar cok methodu nasıl aklınızda tutuyorsunuz? Veya yapmak istediğiniz bir işi yapan bir methodun kutuphanelerde olup olmadığını nereden biliyorsunuz? 2 gunde yazılacak bir method belki library'de vardır?




  • Java, kod nesne yönelimli olarak yazılsın diye bazı zorlamalar yapıyor ama oop olup olmadığı tamamen programcıya bağlı. Bir metodu class içine yazınca oop olmuyor o. Java .ötünü yırtsa c++ kadar oop yazılamaz.
  • quote:

    Orijinalden alıntı: elektro_gadget

    Java, kod nesne yönelimli olarak yazılsın diye bazı zorlamalar yapıyor ama oop olup olmadığı tamamen programcıya bağlı. Bir metodu class içine yazınca oop olmuyor o. Java .ötünü yırtsa c++ kadar oop yazılamaz.

    Basit bir kod uzerinden anlaşılır bir ornek verebilir misin? Hem Java da hem C++ da yazıp?



    < Bu mesaj bu kişi tarafından değiştirildi Guest-288644A72 -- 9 Ocak 2018; 18:24:19 >
  • Detaylı olmuş. Eyvallah. Ama biraz karmaşık geldi.

    Başka bir şey sorayım. C deki struct baya baya oop değil mi?
  • Son paragafla ilg olarak: Bir pakette (Java package) onlarca sınıf ve her bir sınıfa ait (sembolik rakam olarak) 100 metod ve (sembolik rakam) 30 değişken (Java'daki ifadesiyle 'field') varsa o 100 metod ve değişkeni akılda kimse tutmaz, sadecehttps://docs.oracle.com/javase/7/docs/api/ 'de o uygulamada kullanılabilecek sınıflara ve içeriğine bakar ve uygun bir sınıfı projeye dahil edip (=import) IDE'nin onları otomatik olarak getirmesini sağlayıp uygun metodları kullanır.



    Örneğin Internetteki sayfaları çekip konsola yazdıran bir HTTP istemcisi yapacağım diyelim, java.net paketindeki HttpURLConnection sınıfını import ederim, sayfayı çekmeden önce sayfa var mı yok mu kontrol için



    quote:



    import java.net.URL;

    import java.net.HttpURLConnection;

    import java.io.*;



    URL url = new URL(theUrl);

    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

    if ( urlConnection.getResponseCode(); == HttpURLConnection.HTTP_OK)

    {

    System.out.println("sayfa var");

    // etc etc...}







    tarzında birşeyler yazarım, oradaki getResponseCode metodu ve HTTP_OK değişkenini aklımda tutamam, duruma göre tahmin ederim yani Oracle docs'taki başlıklara göre veya IDE'min getirdiği seçenekler arasından uygun olan bir tanesini seçer ve öyle devam ederim, vs. vs..

    < Bu ileti mini sürüm kullanılarak atıldı >




  • Eyvallah. Yani ozetle, hangi kutuphanenin (paketin) ne iş yaptığını az cok biliriz, ona gore koda ekleriz, kod derleyicimizin otomatik tamamlama ozelliğini kullanarak da gerekli methodu kullanırız mı diyorsun?



    < Bu mesaj bu kişi tarafından değiştirildi Guest-288644A72 -- 9 Ocak 2018; 21:12:37 >
  • quote:

    Java tamamıyla object oriented. Main bile Class'ın içinde (dolayısıyla main ancak bir object oluşturulduğunda çağırılıyor).


    Hayir, Java tam anlamiyla Object Oriented degil. Primitive type lar bozar OO paradigmasini.

    main metodu cagrildiginda, main metodunu iceren class instantiate edilmez. Bu sebeple static olur main metodu, return etmez (void).

    200 tane main metodu tanimlarsin istersen, jar'i olustururken manifest'e hangi class'in main metodunu ilk cagiracagini soylersin. Boylelikle ayni kod base'inden farkli Runnable Jar'lar elde edilebilir.

    API'den arastirabilirsin yapman gereken is neyse, Oracle dokumantasyonu gayet iyi. Ayrica Java icin haddinden fazla kutuphane var, yapmak istedigin cogu seyi yapan bir kutuphane zaten vardir buyuk ihtimalle. Bir sure yazdiktan sonra zaten API'yi ogreniyorsun.

    < Bu ileti tablet sürüm kullanılarak atıldı >




  • Mephalay M kullanıcısına yanıt
    Saol. Jar daha onceden yazılmış kodların, dataların vs. ziplenmiş haliymiş. Bir yerde kutuphane gibi. Pek oyle değil galiba.

    API dediğin de eclipse gibi kodu yazdığımız ortamlar herhalde. Değilmiş. Tam da anlayamadım. Onceden hazırlanmış classlar gibi bir tanımı var. Jar dan farkını oturtamadım.
    Instantiate etmek de o class a ait bir object uretmek demek galiba. Main taşıyan class instantiate edilmiyorsa, demek ki Java derleyicisi main ifadesini gorduğu zaman otomatikman diyor ki burası (bu Class) kodun başlangıcı. Eger birden fazla main olursa da bizim derleyiciye kodun nereden başlayacağını (hangisinin en Main main olduğunu) belirtmemiz gerekiyor ki buna manifestation deniyor.

    Primitive type da int, double, char vs imiş. "Bunlar object değil,o yuzden Java da 100 de 100 object oriented değil" diyorsun. Peki bu primitive typeları objectleştirmek mumkun değil mi? Machine Language uzerinden bu primitive typeları da class olarak oluşturup Javayı 100 de 100 object oriented hale getiremez miyiz?



    < Bu mesaj bu kişi tarafından değiştirildi Guest-288644A72 -- 10 Ocak 2018; 4:2:9 >




  • Rica ederim.

    Evet Jar compressed edilmis bir dosya turu. API, programlanabilir herhangi bir komponentin arayuzu. Yani Java arabaysa, direksyon, kontak, el freni vs API. Programlayabildigin herhangi bir seyin sana bakan yuzu. Arka planda ne oldugunu encapsule etmek icin. Jar ile hic bir alakasi yok.https://docs.oracle.com/javase/7/docs/api/ --> Java 7 API 'si mesela. Class 'lar ve metodlarin ne yaptigi, nasil cagrildigi burada dokumente edilmis. Herhangi bir programlama dili ogrenirken en degerli sey bu kisim.

    Primitive type'lari obje haline getirebilirsin. Buna autoboxing deniliyor. Tam tersi islem de unboxing. Ornegin:

    int x = 9;
    Integer y = x;

    Su durumda compilera, y Objesini primitif bir tipe esitlemesini soyledin. Arka planda JVM autoboxing yapar.

    Her seyin bir object olmasi bir programlama yaklasimi. Makine kodu seviyesine indikten sonra zaten ortada obje mobje kalmaz : ) Registerlar, instructionlar vs.

    Java'da primitif data tiplerinin bulunmasi tercihini muhtemelen performans kaygisi ile yaptilar. Zira ayni datanin primitif hali daha az memory tuketir, surekli "autobox" , "unbox" yaparsan program yavaslar. Bunlar tabi dikkate alinacak yavasliklar degil ama boyle bir tercih yapmalarinin sebebi bu olabilir. Bilmiyorum acikcasi, tahmin yurutuyorum.

    Birden fazla main metodu varsa derleyiciye degil, jar'i olusturacak olan "build" komutuna soyluyorsun. Derleyici icin degisen bir sey yok. Command Line'dan derleme icin javac,jar build etmek icin de "jar" komutu kullaniliyor. Main class ile ilgilenen kisim "jar" komutu. "javac" icin bu bilgi bir sey ifade etmiyor. Onun olayi baska.

    < Bu ileti tablet sürüm kullanılarak atıldı >




  • Mephalay M kullanıcısına yanıt
    O zaman soyle diyorum. Java kodu yazarken işimizi kolaylaştıran, onceden hazırlanmış classlar, methodlar API oluyor. Yazdığım programı/aplikasyonu ziplediğim zamansa onu Jar a donusturmus oluyorum. Yani Jar, programı/aplikasyonu saklamanın bir yolu.

    Her seyin bir object olmasi bir programlama yaklasimi. Makine kodu seviyesine indikten sonra zaten ortada obje mobje kalmaz : ) Registerlar, instructionlar vs.


    Cok dogru. Java: aslında bizim (human) yazım yaklaşımımız. Java compiler: bu yaklasımı machine language a donduren birim. Compiler olmazsa Java olmaz. Javanın olmaması da Java compiler diye bir şeyi anlamsız kılar. Ikisi de birbirine bağlı, birbiriyle var oluyorlar. Normalde basit gelir ama şu an cok epik geldi.

    Aslında daha sorarım da sınırları zorlamayayım.

    Verdiğiniz bilgiler için teşekkur ederim.
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.