Ev / Emniyet / Java programlama dili oluşturuldu. Java'ya giriş. Bir programlama dili olarak Java'nın avantajları

Java programlama dili oluşturuldu. Java'ya giriş. Bir programlama dili olarak Java'nın avantajları

Java dili. Giriiş.

Uzun bir süre Java dili hakkında bir makalesi olmayan bir bilgisayar dergisini hayal etmek zordu. The New York Times, The Washington Post ve Business Week gibi popüler gazete ve dergiler bile onun hakkında yazdı.

Ulusal Halk Radyosu'nun on dakikalık bir programı bir programlama diline ayırdığını hatırlamak imkansızdır. Bu iyi mi kötü mü bakış açısına göre değişir. 100 milyon dolarlık üretim yatırımı yazılım belirli bir programlama dili kullanılarak mı oluşturuldu?! CNN, CNBC ve diğer medya kuruluşları Java'nın bunu nasıl yapabileceği ve yapacağı hakkında konuşuyorlar ve hala konuşuyorlar.

Bununla birlikte, bu kitap ciddi programcılar içindir ve Java ciddi bir programlama dili olduğu için anlatacak çok şeyimiz var. Bu nedenle, reklam vaatlerinin analizine dalmayacağız ve içlerinde neyin doğru neyin kurgu olduğunu bulmaya çalışmayacağız. Bunun yerine, Java dilini bir programlama dili olarak yeterince ayrıntılı olarak tanımlayacağız (elbette, onu İnternet üzerinde çalışmak için kullanmayı mümkün kılan ve aslında çok fazla reklam yutturmacasına neden olan özellikler dahil). Ardından Java dilinin yapabileceklerini ve yapamayacaklarını açıklayarak gerçek ile hayali birbirinden ayırmaya çalışacağız.

İlk başta, reklam vaatleri ile Java dilinin gerçek olanakları arasında bir uçurum vardı. Olgunlaştıkça teknoloji daha istikrarlı ve güvenilir hale geldi ve beklentiler makul bir seviyeye düştü. Java, istemciler ve sunucu kaynakları (veritabanları gibi) arasında iletişim kuran "ara yazılım" oluşturmak için artık giderek daha fazla kullanılıyor.

Bu önemli uygulamalar şaşırtıcı olmasa da, Java dilinin makine bağımsızlığı, çoklu iş parçacığı ve ağ programlama yetenekleri nedeniyle en yararlı olduğu alan budur. Ek olarak, Java dili gömülü sistemlerde liderliği ele geçirerek taşınabilir cihazlar, sanal kiosklar, araç üstü bilgisayarları ve benzerleri için fiili standart haline geldi. Bununla birlikte, yaygın olarak kullanılan Java programlarını yeniden yazmaya yönelik ilk girişimler kişisel bilgisayarlar başarısız oldu - ortaya çıkan uygulamaların düşük güçlü ve yavaş olduğu ortaya çıktı. Yeni sürümün çıkmasıyla birlikte bu sorunlardan bazıları çözüldü, ancak yine de kabul edilmelidir ki, kullanıcılar genel olarak satın aldıkları programların hangi dilde yazıldığını hiç umursamazlar. Java dilinin ana avantajlarının, mevcut programların yeniden yazılmasında değil, yeni tür aygıtların ve uygulamaların oluşturulmasında ortaya çıkacağına inanıyoruz.

Bir programlama aracı olarak Java dili

Java programlama dili reklam vaatlerini nasıl aştı? Şüphesiz, ciddi programcılar için mevcut olan en iyi dillerden biridir. Java, harika bir programlama dili olma potansiyeline sahiptir, ancak muhtemelen artık çok geç. Yeni bir programlama dili ortaya çıktığında, daha önce oluşturulmuş yazılımlarla uyumluluğunun can sıkıcı sorunu hemen ortaya çıkar. Ayrıca, bu programlarda metinleri kurcalanmadan değişiklikler yapılabilse bile, Java dili gibi halk tarafından bu kadar sıcak karşılanan bir dilin yaratıcılarının doğrudan "Evet, yapabiliriz" demeleri zordur. X sürümünü geliştirirken bir hata yaptınız, ancak Y sürümü daha iyi olacak." Sonuç olarak, daha fazla iyileştirmenin ortaya çıkmasını beklerken, Java dilinin yapısının yakın gelecekte önemli ölçüde değişmeyeceğini belirtmeliyiz.

Açık soru şu: Java dili nasıl geliştirildi?". Bunun, programlama dilinin kendisini iyileştirerek değil, Java dilinde yazılmış programların kitaplıklarını temelden değiştirerek yapıldığı ortaya çıktı. Sun Microsystems her şeyi değiştirdi: tek tek kitaplık işlevlerinin adlarından (onları daha anlamlı hale getirerek) ve grafik modüllerin çalışma yöntemleri (olayların işlenme biçimini değiştirerek ve kısmen işçi programlarını yeniden yazarak) ve Java 1.0'da olmayan yazdırma olanakları gibi dilin yeni özelliklerinin yaratılmasıyla son bulur. hepsinden çok daha kullanışlı bir programlama platformu önceki sürümler Java dili.

Microsoft, Java dili ile ilgili olan J++ adlı kendi ürününü piyasaya sürdü. J++ dili, bayt kodu yürütülürken Java Virtual Machine uyumlu bir sanal makine tarafından yorumlanır, ancak harici kod arabirimleri bu diller arasında önemli ölçüde farklıdır. J++ ve Java dilleri neredeyse aynı sözdizimine sahiptir. Ancak, Microsoft ek dil yapıları oluşturmuştur. Hepsinin değeri oldukça şüphelidir, hariç Windows arabirimi API. Bu dillerin aynı sözdizimine sahip olmasının yanı sıra çekirdek kitaplıkları (dizeler, yardımcı programlar, ağ programlama araçları, çoklu okuma araçları, matematik kitaplıkları vb.) da özünde aynıdır.

Ancak grafik kitaplıkları, kullanıcı arabirimi ve uzak nesnelere erişim bu diller için tamamen farklıdır. Java ile pek çok benzerliği olan ancak farklı bir sanal makine kullanan yeni bir C# dili geliştiren Microsoft, şu anda J++ dilini artık desteklememektedir. Bu kitap J++ veya C#'ı kapsamaz.

Java dilinin faydaları

1) Java dilinin ana avantajlarından biri programların yürütüldüğü platformdan bağımsızlık: Aynı kod Windows, Solaris, Linux, Machintosh vb. işletim sistemlerinde de çalışabilmektedir.
Bu, programlar farklı işletim sistemleri altında daha sonra yürütülmek üzere İnternet üzerinden indirildiğinde gerçekten gereklidir.

2) Diğer bir avantajı ise Java dilinin sözdizimi C++ dilinin sözdizimine benzer ve C ve C++ dillerini bilen programcılar için bunu öğrenmek zor değil. Doğru, Visual Basic dilini bilen programcılar için bu sözdizimi alışılmadık olabilir.

Hiç C++ ile programlama yapmadıysanız, bu bölümde kullanılan bazı terimler sizin için net olmayabilir. Bu durumda, atlayabilirsiniz. 6. Bölümün sonuna geldiğinizde, bu terimler size tanıdık gelecek.

3) Ayrıca, Java - tamamen nesne yönelimli bir dil, C++'dan bile daha fazla. Sayılar gibi birkaç ilkel tür dışında, Java dilindeki tüm varlıklar nesnelerdir. (Nesne yönelimli programlama kullanarak karmaşık projeler geliştirmek kolay olduğundan, eski yapısal programlamanın yerini almıştır. Nesne yönelimli programlamaya aşina değilseniz, 3-6. bölümler size bu konuda ihtiyacınız olan tüm bilgileri verecektir.)

Ancak, C++ dilinin biraz geliştirilmiş başka bir lehçesini geliştirmek yeterli değildir. Java'da hatasız programlar geliştirmenin C++'a göre daha kolay olması çok önemlidir. Neden? Niye? Java dilinin tasarımcıları, C++ ile yazılmış programların neden bu kadar hata eğilimli olduğu konusunda uzun uzun düşündüler. Java diline, en yaygın hataları gizleyecek programlar oluşturma olasılığını ortadan kaldıran araçlar sağladılar. Bunun için Java dilinde aşağıdakiler yapılır.

4) Belleğin açık tahsisi ve serbest bırakılması olasılığı hariç tutulmuştur.
Java dilindeki bellek, çöp toplama mekanizması tarafından otomatik olarak serbest bırakılır. Programcı, yanlış bellek kullanımıyla ilgili hatalara karşı garantilidir.

5) Gerçek diziler tanıtıldı ve işaretçi aritmetiği yasaklandı.
Artık programcılar, prensip olarak, bellekteki verileri silemezler. yanlış kullanım işaretçiler.

6) Atama işlecini eşitlik karşılaştırma işleciyle karıştırma olasılığı ortadan kaldırılmıştır.
Artık if(ntries = 3) dosyasını bile derleyemezsiniz. . . (Visual Basic programcıları burada herhangi bir sorun fark etmeyebilir, çünkü bu hata C ve C++'daki çoğu karışıklığın kaynağıdır).

7) Çoklu kalıtım hariçtir. Bunun yerini yeni bir konsept aldı - Objective C dilinden ödünç alınan bir arayüz.
Arayüz, programcıya, bir programcının çoklu kalıtımdan elde edebileceği hemen hemen her şeyi sağlarken, sınıf hiyerarşilerini yönetmenin karmaşıklıklarından da kaçınır.

Java dilinin karakteristik özellikleri

Basit
yorumlanmış
dağıtılmış
Güvenilir
Güvenli
makineden bağımsız
Nesne odaklı
yüksek performans
çok iş parçacıklı
dinamik
Bilgisayar mimarisinden bağımsız

Son bölümde bu noktalardan bazılarına değinmiştik. Bu bölümde: Java dili kılavuzundan dilin özelliklerini açıklayan alıntılar yapacağız; En son sürümüyle kendi deneyimimize dayanarak, dilin belirli özellikleri hakkında okuyucularla bazı düşünceleri paylaşalım.

Basit

Programlaması kolay, ek eğitim gerektirmeyen ve geçerli uygulama ve programlama standartlarını dikkate alan bir sistem oluşturmak istedik. Bu nedenle, C++'ı bu amaç için uygun bulmasak da Java, sistemi daha erişilebilir kılmak için mümkün olduğunca benzer olacak şekilde tasarlanmıştır. Java dili, yarardan çok zarar getirdiğine inandığımız yeterince kullanılmayan, belirsiz ve belirsiz C++ özelliklerinin çoğunu içermez.

Java dilinin sözdizimi, esasen C++ dilinin sözdiziminin geliştirilmiş bir versiyonudur. Bu dilde başlık dosyaları, işaretçi aritmetiği (ve işaretçilerin kendileri), yapılar, birlikler, operatör aşırı yüklemesi, sanal temel sınıflar vb. (Java ve C++ dilleri arasındaki farklar, kitabın her yerine dağılmış C++ diliyle ilgili notlarda açıklanmıştır.) Ancak geliştiriciler, C++ dilinin tüm eksikliklerini gidermeye çalışmadılar.

Örneğin, Java dilindeki switch deyiminin sözdizimi değişmeden kalmıştır. C++ dilini bilmek, Java dilinin sözdizimine geçmek kolay olacaktır.
Genellikle görsel bir programlama ortamı kullanıyorsanız (Visual Basic gibi), Java dilini zor bulacaksınız.
Sözdizimi genellikle oldukça garip görünür (ifadenin anlamını anlamak zor olmasa da). Daha da önemlisi, Java dilinde çalışırken çok daha fazlasını programlamanız gerekir. Visual Basic dilinin güzelliği, görsel programlama ortamının uygulama altyapısını neredeyse otomatik olarak oluşturmanıza izin vermesidir. Java dilini kullanarak aynı sonucu elde etmek için elle programlamanız gerekir, ancak bu çok daha kısa programlarla sonuçlanır.

Bununla birlikte, "sürükle ve bırak" teknolojisini kullanarak programlar oluşturmanıza izin veren üçüncü tür bir programlama ortamı vardır.

Sadeliğin bir başka yönü de kısalıktır. Java dilinin amaçlarından biri, küçük makinelerde tamamen bağımsız olarak çalıştırılabilen programların geliştirilmesini sağlamaktır. Ana tercüman ve sınıf desteğinin boyutu yaklaşık 40 KB'dir; standart kitaplıklar ve iş parçacığı araçları (özellikle kendi kendine yeten mikro çekirdek) 17:Kb daha alır.
Bu çok büyük bir başarı. Bununla birlikte, GUI destek kitaplıklarının çok daha büyük olduğunu unutmayın.

Nesne odaklı

Basitçe söylemek gerekirse, nesne yönelimli programlama, verilere (yani nesnelere) ve bunlara erişme yollarına odaklanan bir programlama tekniğidir. Bir marangozluk analojisi çizerek, nesne yönelimli zanaatkar, öncelikle yaptığı sandalyeye odaklanır ve bunu yapmak için gereken aletlerle yalnızca ikincil olarak ilgilenir; aynı zamanda nesne yönelimli olmayan marangoz sadece aletlerini düşünür. Java ve C++'ın nesne yönelimli özellikleri temelde aynıdır.

Nesne yönelimi, son 30 yılda değerini çoktan kanıtladı ve onsuz modern bir programlama dili hayal etmek imkansız. Aslında, Java dilinin nesne yönelimli özellikleri C++ ile karşılaştırılabilir. Aralarındaki temel fark, Java dilinin daha iyi bir çözüm bulduğu çoklu kalıtım mekanizmasında ve ayrıca Java dilinin metasınıf modelinde yatmaktadır.

Yansıtma mekanizmaları (Bölüm 5) ve nesne serileştirme (Bölüm 12), hazır bileşenlere dayalı grafiksel kullanıcı arabirimleri oluşturmak için kalıcı nesneler ve araçlar uygulamanıza olanak tanır.

Hiç nesne yönelimli bir dilde programlama yapmadıysanız, Bölüm 4-6'ya yakından bakın. Bu bölümler, nesne yönelimli programlamanın temellerini tanıtmakta ve C veya Basic gibi geleneksel, prosedürel diller üzerinden karmaşık projeler geliştirmek için nasıl kullanılabileceğini göstermektedir.

dağıtılmış

Java, HTTP (Köprü Metni Aktarım Protokolü) veya FTP (Dosya Aktarım Protokolü) dosya aktarım protokolü gibi TCP/IP (İletim Kontrol Protokolü/İnternet Protokolü) protokollerine dayalı veri aktarımı için geniş bir program kitaplığına sahiptir. Java dilinde yazılmış uygulamalar, ve kullanarak ağ üzerinden nesneleri açabilir ve bunlara erişebilir.URL'ler (Tekdüzen Kaynak Konumu - evrensel kaynak adresi) kadar kolay yerel ağ.

Java dili, ağ üzerinde çalışmak için güçlü ve kullanışlı araçlar sağlar. İnternet programlarını başka dillerde yazmayı denemiş olan herkes, ağ bağlantılarını (soket bağlantıları) açmak gibi en zor görevlerin Java'da ne kadar kolay çözüldüğünü görünce hoş bir şekilde şaşıracaktır. Servlet (servlet) olarak adlandırılanlardan oluşan zarif mekanizma, sunucudaki çalışmayı son derece verimli hale getirir.

Servlet'ler birçok popüler uygulama tarafından desteklenir. web sunucuları. (Ağ iletişimi ikinci ciltte ele alınacaktır.) Java dilinde dağıtılmış nesneler arasındaki iletişim, uzak yöntemleri çağırmak için bir mekanizma tarafından sağlanır (bu konu ikinci ciltte de ele alınmaktadır).

Güvenilir

Java dili, her durumda güvenilir bir şekilde çalışması gereken programlar oluşturmak için tasarlanmıştır. Java dilinin odak noktası erken tespittir. olası hatalar, dinamik kontrol (çalışma zamanında) ve hataya açık durumlardan kaçınma... Java ve C++ arasındaki tek önemli fark, Java dilinin, bellek üzerine yazma ve veri bozulma olasılığını ortadan kaldıran işaretçi modelidir.

Bu özellik de çok kullanışlıdır. Java dili derleyicisi, diğer dillerde yalnızca çalışma zamanında algılanan hataları algılar. Ek olarak, kötü bir işaretçi nedeniyle bellek bozulması hatası aramak için uzun saatler harcayan programcılar, ilke olarak Java dilinde bu tür sorunların ortaya çıkamayacağı için çok mutlu olacaklardır.

Açıkça işaretçi kullanmayan Visual Basic veya COBOL dillerinde programlama yaptıysanız, bunun neden bu kadar önemli olduğunu anlamayabilirsiniz. C programcıları çok daha az şanslı. Dizelere, dizilere, nesnelere ve hatta dosyalara erişmek için işaretçilere ihtiyaçları vardır. Visual Basic'te programlama yaparken bunların hiçbiri gerekli değildir ve programcının bu varlıklar için bellek ayırma konusunda endişelenmesi gerekmez. Öte yandan, işaretçiler olmayan bir dilde birçok veri yapısının uygulanması çok zordur. Dizeler ve diziler gibi sıradan yapıların işaretçilere ihtiyacı yoktur. İşaretçilerin tam gücü, yalnızca vazgeçilemeyecekleri yerlerde, örneğin oluştururken ortaya çıkar. bağlantılı listeler. Java programcısı, kötü işaretçilerden, yanlış yerleştirmelerden ve bellek sızıntılarından sonsuza kadar kurtulur.

Güvenli

Java dili, ağ bağlantılı veya dağıtılmış bir ortamda kullanılmak üzere tasarlanmıştır. Bu nedenle güvenliğe çok dikkat edilmiştir. Java dili, virüslere ve kurcalamaya karşı korunan sistemler oluşturmanıza olanak tanır.

İlk baskıda "Asla asla deme" yazdık ve haklıydık. Princeton Üniversitesi'ndeki bir grup güvenlik uzmanı, JDK'nın ilk sürümünün satışa çıkmasından kısa bir süre sonra Java 1.0'daki ilk güvenlik hatalarını keşfetti. Dahası, hem onlar hem de diğer uzmanlar, Java dilinin sonraki tüm sürümlerinin güvenlik mekanizmalarında giderek daha fazla hata bulmaya devam ettiler.

Bu durumun olumlu tarafı, Java Dil Geliştirme Grubu, güvenlik sistemindeki herhangi bir hataya karşı sıfır tolerans ilan etti ve uygulama güvenlik mekanizmasında bulunan sorunları hemen düzeltmeye başladı. Sun, özellikle Java dili yorumlayıcısı için dahili spesifikasyonlar yayınlayarak gizli güvenlik açıklarının bulunmasını çok daha kolaylaştırdı ve bunları bağımsız uzmanlara yaptırdı.

Bu, tüm güvenlik açıklarının yakında keşfedilme olasılığını artırdı. Her halükarda Java dilinin güvenlik sistemini kandırmak son derece zordur. Şimdiye kadar bulunan hatalar neredeyse algılanamaz ve sayıları (nispeten) küçüktür.

Sun'ın güvenlik web sayfası şu URL'ye sahiptir: http://java.sun.com/sfaq/.

Java güvenlik sisteminin oluşmasını engellediği bazı durumlar şunlardır.

1) İnternette yayılan kötü şöhretli "solucan"ın neden olduğu yürütülebilir programın yığın taşması.

2) İşleme ayrılan alanın dışındaki bellek alanlarında hasar.

3) Bu tür dosya erişimini yasaklayan Web tarayıcısı gibi güvenli bir sınıf yükleyici kullanırken yerel dosyaları okuma ve yazma.

Tüm bu güvenlik önlemleri uygundur ve genellikle kusursuz çalışır, ancak sağduyu asla zarar vermez. keşfedilmiş olmasına rağmen şimdiki an Hatalar önemsiz olmaktan uzak olduğundan ve onları bulmanın ayrıntıları genellikle gizli tutulduğundan, Java dilinin güvenliğini kanıtlamanın muhtemelen imkansız olduğu kabul edilmelidir.

Zamanla dile yeni güvenlik özellikleri eklendi. 1.1 sürümünden başlayarak, Java dili dijital olarak imzalanmış sınıflar kavramını tanıttı. Dijital imzalı bir sınıf kullanarak, yazarından emin olabilirsiniz. Eğer ona güveniyorsanız, bu sınıfa makinenizde bulunan tüm ayrıcalıkları verebilirsiniz.

Microsoft tarafından önerilen alternatif bir kod teslim mekanizması, ActiveX teknolojisine dayalıdır ve güvenlik için yalnızca dijital imzaları kullanır. Açıkçası, bu yeterli değil - herhangi bir Microsoft yazılımı kullanıcısı, tanınmış üreticilerin programlarının sıklıkla çöktüğünü ve dolayısıyla veri bozulması riski oluşturduğunu doğrulayabilir. Java dilindeki güvenlik sistemi ActiveX teknolojisinden çok daha güçlüdür çünkü uygulamayı başladığı andan itibaren kontrol eder ve zarar vermesine izin vermez.

mimariden bağımsız

Derleyici, biçimi bilgisayar mimarisine bağlı olmayan bir nesne dosyası oluşturur - derlenen program, Java program yürütme sisteminin kontrolü altındaki herhangi bir işlemcide yürütülebilir. Bunu yapmak için Java dili derleyicisi, belirli bilgisayar mimarisine bağlı olmayan bayt kodu komutları üretir. Bayt kodu, herhangi bir makine tarafından kolayca yorumlanabilecek veya anında makineye bağlı koda çevrilebilecek şekilde tasarlanmıştır.

Değil Yeni fikir. 20 yılı aşkın bir süre önce, hem Niclaus Wirth tarafından geliştirilen Pascal uygulama sistemi hem de UCSD Pascal sistemi aynı teknolojiyi kullanıyordu. Bayt kodlarının kullanılması, program yürütmede büyük bir kazanç sağlar (ancak, çoğu durumda eşzamanlı derleme bunu telafi eder). Java dilinin geliştiricileri, çoğu bilgisayarda harika çalışan bir dizi bayt kodu yönergesi geliştirmekle harika bir iş çıkardılar. modern bilgisayarlar, kolayca gerçek makine talimatlarına çevrilir.

makineden bağımsız

C ve C++ dillerinden farklı olarak, Java spesifikasyonunun uygulama sistemine bağlı hiçbir yönü yoktur. Hem temel veri türlerinin boyutu hem de bunlar üzerindeki aritmetik işlemler iyi tanımlanmıştır.

Örneğin, Java dilinde int türü her zaman 32 bitlik bir tamsayı anlamına gelir. C ve C++'da, int türü, belirli bir derleyicinin geliştiricisi tarafından seçildiği üzere, 16 bitlik bir tam sayı, 32 bitlik bir tam sayı veya keyfi boyutta bir tam sayı anlamına gelebilir. Tek kısıtlama, bir int boyutunun kısa bir int boyutundan küçük ve uzun bir int boyutundan büyük olmamasıdır. Sayısal türlerin sabit boyutu, farklı bilgisayarlarda çalışan programlarla ilgili rahatsızlıkların çoğunu ortadan kaldırır. İkili veriler sabit bir biçimde depolanır ve iletilir, bu da farklı platformlardaki farklı bayt düzeniyle ilgili yanlış anlamaları önler ("big endian/little endian" çatışması). Hatlar saklanır standart boyut Unicode.

Sistemin parçası olan kitaplıklar, makineden bağımsız bir arabirim tanımlar. Örneğin dil, Unix, Windows ve Macintosh işletim sistemleri için soyut bir Window sınıfı ve onun uygulamalarını sağlar.

Windows, Macintosh ve Unix'in on çeşidinde eşit derecede iyi çalışan bir program yazmayı deneyen herkes bunun çok zor bir iş olduğunu bilir. Java sürümü, ortak kullanıcı arayüzü öğelerini çok çeşitli yazılım platformlarına uyarlayan basit bir araç seti sağlayarak bu sorunu çözmek için kahramanca bir girişimde bulundu. Ne yazık ki üzerinde çokça emek harcanan kütüphane farklı platformlarda kabul edilebilir sonuçlar elde etmemize izin vermedi. (Aynı zamanda farklı platformlardaki grafik programlarında da farklı hatalar ortaya çıktı.)

Ancak, bu sadece başlangıçtı. Birçok uygulamada, makine bağımsızlığı, grafiksel bir kullanıcı arabiriminin karmaşıklığından çok daha önemlidir. Java 1.0'ın tanıtımından yararlanan bu uygulamalardır. Ancak, GUI araç seti artık tamamen yeniden tasarlandı ve artık ana bilgisayardaki kullanıcı arayüzüne bağlı değil. Yeni bir versiyon kullanıcı için öncekilerden daha anlamlı ve bize göre daha çekici.

yorumlanmış

Java dili yorumlayıcısı herhangi bir makineye gönderilebilir ve bayt kodunu doğrudan üzerinde çalıştırabilir. Bağlantı düzenleme daha kolay bir süreç olduğu için programlama çok daha hızlı ve verimli hale gelebilir.

Belki bu, uygulama geliştirmede bir avantajdır, ancak alıntı açık bir abartıdır. Her durumda, JSDK'de (Java Yazılım Geliştirme Kiti) bulunan Java dili derleyicisi oldukça yavaştır. (IBM'ler gibi üçüncü türden bazı derleyiciler çok daha hızlıdır.) Yeniden derleme hızı, bir programlama ortamının verimliliğindeki faktörlerden yalnızca biridir. Java ve Visual Basic programlama ortamlarının hızlarını karşılaştırırsanız, hayal kırıklığına uğrayabilirsiniz.

yüksek performans

Genel olarak yorumlanan bayt kodları gereğinden fazla performansa sahipken, daha da iyi performansın gerekli olduğu durumlar vardır. Bayt kodları, uygulamanın çalıştığı belirli işlemci için anında (çalışma zamanında) makine kodlarına çevrilebilir.

Bayt kodlarını yürütmek için bir tercüman kullanılıyorsa, " ifadesini kullanmamalısınız. yüksek performans". Bununla birlikte, birçok platformda, senkronize derleyiciler (tam zamanında derleyiciler-JIT) tarafından sağlanan başka tür bir derleme mümkündür. Bayt kodunu makineye bağlı koda çevirir, sonucu bellekte depolar ve sonra çağırırlar. Bu yorumlama sadece bir kez yapıldığından, bu yaklaşım hızı kat kat arttırır.

Eşzamanlı derleyiciler, makineye özgü derleyicilerden hala daha yavaş olsalar da, en azından yorumlayıcılardan çok daha hızlıdırlar ve bazı programlar için 10 kat, hatta 20 kat hızlanma sağlarlar. Bu teknoloji sürekli gelişiyor ve sonunda geleneksel derleyicilerin asla geçemeyeceği hızlara ulaşabiliyor. Örneğin, senkronize bir derleyici, hangi kod parçasının daha sık yürütüldüğünü belirleyebilir ve yürütme hızı için optimize edebilir.

ÇOKLU OKUMA

Daha iyi etkileşim ve program yürütme sağlar.

Başka herhangi bir programlama dilinde multithreading'i denediyseniz, Java'da yapmanın ne kadar kolay olduğuna hoş bir şekilde şaşıracaksınız. Java dilindeki iş parçacıkları, işletim sistemi izin veriyorsa çok işlemcili sistemlerden yararlanabilir. Ne yazık ki, çoğu platformdaki iş parçacığı uygulamaları büyük farklılıklar gösterir ve Java dili tasarımcıları tekdüzelik elde etmek için hiçbir çaba göstermezler. Tüm makineler için yalnızca arama dizileri için kullanılan kod aynı kalır; Java dili, çoklu iş parçacığı uygulamasını temeldeki işletim sistemine veya iş parçacığı kitaplığına bırakır. (Akışlar Cilt 2'de açıklanmıştır.) Buna rağmen, organizasyon kolaylığıdır. çok iş parçacıklı bilgi işlem Java dilini sunucu yazılımı geliştirme için çok çekici kılar.

dinamik

Birçok yönden Java, C veya C++'dan daha dinamiktir. Sürekli değişen bir ortama kolayca uyum sağlayacak şekilde tasarlanmıştır. Herhangi bir zarara yol açmadan kitaplıklara özgürce yeni yöntemler ve nesneler ekleyebilirsiniz. Java dili, bir programın ilerleyişi hakkında bilgi almayı kolaylaştırır.

Halihazırda çalışmakta olan bir programa kod eklemek istediğinizde bu çok önemlidir. Bunun en iyi örneği, bir tarayıcı tarafından yürütülmek üzere İnternetten indirilen koddur. Java 1.0'da, yürütülen bir programın ilerleyişi hakkında bilgi almak kolay değildi, ancak Java dilinin mevcut sürümü, programcıya, yürütülen programdaki nesnelerin hem yapısını hem de davranışını gösteriyor.
Bu, program yürütülürken nesneleri analiz etmesi gereken sistemler için çok değerlidir. Bu sistemler, GUI araçlarını, akıllı hata ayıklayıcıları, eklentileri ve nesne veritabanlarını içerir.

Java Dili ve İnternet

Fikir basit - kullanıcılar Java bayt kodlarını internetten indirir ve makinelerinde çalıştırır. Web tarayıcılarında çalışan Java programlarına küçük uygulamalar denir. Uygulamayı kullanmak için, Java dilini destekleyen ve bayt kodlarını yorumlayabilen bir Web tarayıcısına ihtiyacınız vardır. Java kaynak kodu, hem dilin kendisinin hem de çekirdek kitaplıklarının yapısının değişmezliğinde ısrar eden Sun tarafından lisanslanmıştır. Ne yazık ki gerçek böyle değil. Netscape tarayıcılarının farklı sürümleri ve internet gezgini destek farklı versiyonlar Java dili ve bu sürümlerin bazıları önemli ölçüde güncelliğini yitirmiştir. Bu talihsiz durum, apletlerin gelişmesinde giderek daha fazla engel oluşturmaktadır. En son sürüm Java dili. Bu sorunu çözmek için Sun, Netscape ve Internet Explorer tarayıcılarına dayalı Java programlarını çalıştırmak için en gelişmiş ortamı sağlayan bir Java Eklentisi geliştirmiştir.

Bir uygulama yüklemek, bir görüntüyü bir Web sayfasına gömmek gibidir. Uygulama, sayfanın bir parçası haline gelir ve metin kapladığı alanın etrafını sarar. Ancak aradaki fark, görüntünün artık canlı olmasıdır. Kullanıcı komutlarına yanıt verir, değiştirir dış görünüş apletin görüntülendiği bilgisayar ile apleti kontrol eden bilgisayar arasında veri aktarımını sağlar.

Bir uygulama yüklemek, bir Web sayfasına resim eklemek gibidir. Uygulama, sayfanın bir parçası haline gelir ve metin kapladığı alanın etrafını sarar. Gerçek şu ki, görüntü "canlıdır". Kullanıcı komutlarına yanıt verir, görünümünü değiştirir ve uygulamayı çalıştıran bilgisayar ile uygulamayı çalıştıran bilgisayar arasında veri aktarır.

Şek. Şekil 1.1, karmaşık hesaplamalar yapan ve molekülleri çizmek için bir uygulama kullanan dinamik bir Web sayfasının iyi bir örneğini göstermektedir. Molekülün yapısını daha iyi anlamak için onu döndürebilir veya fareyi kullanarak yakınlaştırabilirsiniz. Bu tür manipülasyonlar statik üzerinde uygulanamaz internet sayfaları, ancak apletler bunu mümkün kılar. (Bu uygulama http://jmol.sourceforge.net adresinde bulunabilir.)

Pirinç. 1.1. Jmol uygulaması

Uygulamalar, bir Web sayfasına yeni düğmeler ve metin alanları eklemek için kullanılabilir. Ancak, bu tür uygulamaların telefon hattı üzerinden yüklenmesi yavaştır.

Aynı şey Dinamik HTML, HTML formları (Köprü Metni İşaretleme Dili) veya JavaScript gibi bir betik dili ile yapılabilir. Tabii ki, ilk uygulamalar animasyon için tasarlandı: dönen küreler, dans eden çizgi film karakterleri, iddialı metinler vb. Bununla birlikte, yukarıdakilerin çoğu, animasyonlu GIF'ler de oluşturabilir ve dinamik HTML, komut dosyası oluşturmayla birleştiğinde, uygulamalardan çok daha fazlasını yapar.

Yavaş indirme işleminde tarayıcı uyumsuzluğu ve tutarsızlığı sonucunda ağ bağlantıları Web sayfaları için tasarlanmış uygulamalar büyük bir başarı olmamıştır. Yerel ağlarda (intranetlerde) durum tamamen farklıdır. Genelde sorun yaşamazlar verim kanal, bu nedenle uygulamaların indirilme süresi önemli değildir. Yerel ağda istediğiniz tarayıcıyı seçebilir veya Java Eklentisini kullanabilirsiniz. Çalışanlar, ağ üzerinden teslim edilen bir programı yanlış yere taşıyamaz veya yanlış kuramaz ve sistem yöneticisi tüm istemci makinelerini atlamanıza ve üzerlerindeki programları güncellemenize gerek yok. Envanter muhasebesi, tatil planlaması, seyahat geri ödemesi ve benzerleri için çok sayıda program, birçok şirket tarafından tarayıcılar kullanılarak küçük uygulamalar biçiminde geliştirilmiştir.

Biz bu kitabı yazarken, sarkaç istemci tarafı programlamadan sunucu tarafı programlamaya geri döndü. Özellikle, uygulama sunucuları izleme özelliklerini kullanabilir sanal makine Otomatik yük dengeleme, veritabanı bağlantı havuzu oluşturma, nesne senkronizasyonu, güvenli kapatma ve yeniden yükleme ve doğru bir şekilde uygulanması neredeyse imkansız olan ölçeklenebilir sunucu uygulamaları için gereken diğer işlemler için Java. Böylece uygulama oluşturan programcılar, bu karmaşık mekanizmaları kendileri geliştirmek yerine satın alma şansına sahip olurlar. Bu, programcıların üretkenliğini artırdı - sunucuların çalışmasıyla ilgili ayrıntılardan rahatsız olmadan programlarının mantığına odaklandılar.

Java, Sun microsystems'in bir programlama dilidir. Başlangıçta bir programlama dili olarak geliştirildi elektronik aletler, ancak daha sonra sunucu yazılım uygulamaları yazmak için kullanılmaya başlandı. Java programları çapraz platformdur, yani herhangi bir işletim sisteminde çalışabilirler.

Java Programlamanın Temelleri

Java, nesne yönelimli bir dil olarak, OOP'nin temel ilkelerini izler:

  • miras;
  • polimorfizm;
  • kapsülleme.

"Java"nın merkezinde, diğer OOP'lerde olduğu gibi, yapıcıları ve özellikleri olan bir nesne ve bir sınıf vardır. Java programlama dilini resmi kaynaklardan değil, yeni başlayanlar için kılavuzlardan öğrenmeye başlamak daha iyidir. Bu tür kılavuzlarda, özellikler ayrıntılı olarak açıklanır, kod örnekleri verilir. Yeni Başlayanlar İçin Java Programlama Dili gibi kitaplar, adı geçen dilin temel ilkelerini ve özelliklerini ayrıntılı olarak açıklar.

özellikler

Java programlama dilindeki kod bayt koduna çevrilir ve ardından JVM sanal makinesinde yürütülür. Bayt koduna dönüştürme Javac, Jikes, Espresso, GCJ'de yapılır. C dilini Java bayt koduna çeviren derleyiciler vardır. Böylece, bir C uygulaması herhangi bir platformda çalışabilir.

"Java" sözdizimi aşağıdakilerle karakterize edilir:

  1. Sınıf adları büyük harfle başlamalıdır. İsim birkaç kelimeden oluşuyorsa, ikincisi büyük harfle başlamalıdır.
  2. Yöntemi oluşturmak için birkaç kelime kullanılıyorsa, ikincisi büyük harfle başlamalıdır.
  3. İşleme, main() yöntemiyle başlar - her programın bir parçasıdır.

Türler

Java programlama dili 8 ilkel tipe sahiptir. Aşağıda sunulmuştur.

  • Boolean, true ve false olmak üzere yalnızca iki değer alan bir boolean türüdür.
  • Bayt, 1 bayt boyutunda en küçük tamsayı türüdür. Dosyalarla veya ham ikili verilerle çalışırken kullanılır. -128 ila 127 aralığına sahiptir.
  • Kısa, -32768 ila 32767 aralığındadır ve sayıları temsil etmek için kullanılır. Bu türdeki değişkenlerin boyutu 2 bayttır.
  • Int ayrıca sayıların kısaltmasıdır, ancak boyutu 4 bayttır. Çoğunlukla tamsayı verilerle çalışmak için kullanılır ve bayt ve kısa bazen int'ye yükseltilir.
  • Uzun, büyük tamsayılar için kullanılır. Olası değerler -9223372036854775808 ile 9223372036854775807 arasındadır.
  • Float ve double kesirleri belirtmek için kullanılır. Farkları, sayının kesirli kısmında yüksek hassasiyet gerekmediğinde şamandıranın uygun olmasıdır.
  • Çift, "." sınırlayıcısından sonraki tüm karakterleri görüntüler ve kayan nokta - yalnızca ilk.
  • Dize, dizeleri tanımlamak için en sık kullanılan ilkel türdür.

Sınıflar ve Nesneler

Yeni Başlayanlar İçin Java Programlama Dilini Öğrenmede sınıflar ve nesneler önemli bir rol oynar.

Bir sınıf, bir nesne için bir şablon tanımlar, niteliklere ve yöntemlere sahip olmalıdır. Oluşturmak için Class anahtar sözcüğünü kullanın. Ayrı bir dosyada oluşturulmuşsa, sınıf ve dosyanın adı aynı olmalıdır. Adın kendisi iki bölümden oluşur: ad ve uzantı.Java.

Java'da, ebeveynin yöntemlerini devralacak bir alt sınıf oluşturabilirsiniz. Bunun için uzanır kelimesi kullanılır:

  • class classname superclassname() öğesini genişletir;

Yapıcı, açıkça ayarlanmamış olsa bile herhangi bir sınıfın üyesidir. Bu durumda, derleyici kendi başına oluşturur:

  • genel sınıf Sınıf( genel Sınıf()( ) genel Sınıf(Dize adı)( ))

Yapıcının adı, sınıfın adıyla aynıdır, varsayılan olarak yalnızca bir parametresi vardır:

  • genel Puppy(Dize adı)

new() operatörü kullanılarak bir sınıftan bir Nesne oluşturulur:

  • Nokta p = yeni Nokta()

Diğer nesnelerle etkileşime girdiği sınıfın tüm yöntemlerini ve özelliklerini alır. Bir nesne, farklı değişkenler altında birkaç kez kullanılabilir.

    Nokta p = yeni Nokta()

    sınıf TwoPoints(

    public static void main(String args) (

    Nokta p1 = yeni Nokta();

    Nokta p2 = yeni Nokta();

    Nesne değişkenleri ve nesneler tamamen farklı varlıklardır. Nesne değişkenleri bağlantılardır. İlkel olmayan türden herhangi bir değişkene işaret edebilirler. C++'dan farklı olarak, tür dönüştürmeleri sıkı bir şekilde düzenlenir.

    Alanlar ve Yöntemler

    Alanlar, bir sınıf veya nesneyle ilişkili tüm değişkenlerdir. Varsayılan olarak yereldirler ve diğer sınıflarda kullanılamazlar. "." operatörü şu alanlara erişmek için kullanılır:

    • sınıf adı değişkeni

    Statik anahtar kelime ile statik alanlar belirleyebilirsiniz. Bu tür alanlar, genel değişkenleri depolamanın tek yoludur. Bunun nedeni, Java'da hiçbir küresel değişken olmamasıdır.

    Diğer paketlerden erişim elde etmek için değişkenleri içe aktarma yeteneği uygulandı:

    • statik sınıf adını içe aktarın;

    Bir metot, tanımlandığı sınıflar için bir alt programdır. Değişkenlerle aynı düzeyde tanımlanır. Bir işlev olarak belirtilir ve herhangi bir türde olabilir, örneğin geçersiz:

    • sınıf Noktası ( int x, y;

      geçersiz init(int a, int b) (

    Yukarıdaki örnekte, Point sınıfı, bir init() yöntemi olan bir x ve y tamsayısına sahiptir. Yöntemlere tıpkı değişkenler gibi "." operatörü kullanılarak erişilir:

    • point.init();

    init özelliği hiçbir şey döndürmez, dolayısıyla geçersiz tiptedir.

    Değişkenler

    Java programlama dili öğreticisinde, değişkenler ayrı bir yer tutar. Tüm değişkenlerin belirli bir türü vardır, değerleri depolamak için gereken yeri, olası değer aralığını, işlem listesini tanımlar. Değerleri değiştirmeden önce, değişkenler bildirilir.

    Aynı anda birkaç değişken bildirilebilir. Bunları listelemek için virgül kullanılır:

    • int a, b, c;

    Başlatma, bildirimden sonra veya bildirim sırasında yapılır:

    int a = 10, b = 10;

    Birkaç tür vardır:

    • yerel değişkenler (yerel);
    • örnek değişkenler (örnek değişkenler);
    • statik değişkenler (statik).

    Yerel değişkenler yöntemlerde ve yapıcılarda bildirilir, ikincisi başlatılırken oluşturulur ve tamamlandıktan sonra yok edilir. Onlar için erişim değiştiricileri belirlemek ve erişilebilirlik seviyesini kontrol etmek yasaktır. Bildirilen bloğun dışında görünmezler. Java'da değişkenlerin bir başlangıç ​​değeri yoktur, bu nedenle ilk kullanımdan önce atanmalıdır.

    Örnek değişkenler sınıf içinde bildirilmelidir. Yöntem olarak kullanılırlar, ancak bunlara yalnızca nesne oluşturulduktan sonra erişilebilir. Nesne yok edildiğinde değişken de yok edilir. Örnek değişkenler, yerel değişkenlerin aksine varsayılan değerlere sahiptir:

    • sayılar - 0;
    • mantık - yanlış;
    • referanslar boş.

    Statik değişkenlere sınıf değişkenleri denir. Adları büyük harfle başlar ve statik değiştirici ile belirtilir. Sırasıyla sabit olarak kullanılırlar, bunlara listeden bir tanımlayıcı eklenir:

    • son;
    • özel;
    • halka açık.

    Programın başında çalıştırın, yürütme durduktan sonra yok edilir. Tıpkı örnek değişkenler gibi, boş değişkenlere atanan varsayılan değerleri vardır. Sayılar 0 değerine sahiptir, boolean'lar false değerine sahiptir, nesne referansları başlangıçta boştur. Statik değişkenler aşağıdaki biçimde çağrılır:

    • ClassName.VariableName.

    Çöp toplayıcı

    Yeni Başlayanlar İçin Java Programlama Dili Öğreticisinde, otomatik çöp toplayıcı bölümü en ilginç olanıdır.

    Java'da, C dilinden farklı olarak mümkün değildir. elle kaldırma bellekten nesne. Bunun için yöntem otomatik kaldırma- Çöp toplayıcı. Null yoluyla geleneksel silme ile yalnızca nesneye yapılan başvuru kaldırılır ve nesnenin kendisi silinir. Normal kullanım için önerilmese de zorla çöp toplama yöntemleri vardır.

    Kullanılmayan nesnelerin otomatik olarak silinmesine yönelik modül arka planda çalışır ve program etkin olmadığında başlar. Hafızadaki nesneleri silmek için program durur, hafıza boşaldıktan sonra kesintiye uğrayan çalışmaya devam eder.

    Değiştiriciler

    Ayırt etmek farklı şekiller değiştiriciler. Erişim yöntemini belirleyenlere ek olarak, yöntemler, değişkenler ve bir sınıf için değiştiriciler vardır. Özel olarak bildirilen yöntemler, yalnızca belirtilen sınıfta kullanılabilir. Bu tür değişkenler diğer sınıflarda ve işlevlerde kullanılamaz. Public, herhangi bir sınıfa erişim sağlar. Başka bir paketten bir Public sınıfı almanız gerekiyorsa, önce onu içe aktarmalısınız.

    Protected değiştirici, eylemde public'e benzer - sınıf alanlarına erişimi açar. Her iki durumda da, değişkenler diğer sınıflarda kullanılabilir. Ancak genel değiştirici kesinlikle herkes tarafından kullanılabilir ve korumalı değiştirici yalnızca miras alınan sınıflar için kullanılabilir.

    Yöntemler oluşturulurken uygulanan değiştirici statiktir. Bu, oluşturulan yöntemin sınıfın örneklerinden bağımsız olarak var olduğu anlamına gelir. Nihai değiştirici, erişimi kontrol etmez, ancak nesnenin değerlerinin daha fazla değiştirilmesinin imkansızlığını gösterir. Belirtildiği öğenin değiştirilmesini yasaklar.

    Final for field, değişkenin ilk değerini değiştirmeyi imkansız kılar:

      genel statik geçersiz yöntem (String args) (

      son int İsim = 1;

      int İsim = 2;// hata verecek

    Nihai değiştiriciye sahip değişkenler sabittir. Genellikle sadece büyük harflerle yazılırlar. CamelStyle ve diğer yöntemler çalışmıyor.

    Yöntemler için son, kalıtsal bir sınıftaki bir yöntemi değiştirme yasağını belirtir:

      son boşluk myMethod() (

      System.out.printIn("Merhaba dünya");

    Sınıflar için final, sınıf alt öğelerini oluşturamayacağınız anlamına gelir:

      son genel sınıf Sınıfı (

    Soyut - soyut sınıflar oluşturmak için değiştirici. Herhangi bir soyut sınıf ve soyut yöntemin, diğer sınıflarda ve bloklarda daha da genişletilmesi amaçlanır. Değiştirici geçici, sanal makineye verilen değişkeni işlememesini söyler. Bu durumda, basitçe kaydetmeyecektir. Örneğin, geçici int Name = 100 devam etmez, ancak int b devam eder.

    Platformlar ve sürümler

    Mevcut Java programlama dili aileleri:

    • Standart Sürüm.
    • Kurumsal Sürüm.
    • Mikro Sürüm.
    • kart.

    1. SE - bireysel kullanım için özel uygulamalar oluşturmak için yaygın olarak kullanılan ana olandır.
    2. EE, kurumsal yazılım geliştirmeye yönelik bir dizi belirtimdir. SE'den daha fazla özellik içerir, bu nedenle büyük ve orta ölçekli işletmelerde ticari ölçekte kullanılır.
    3. ME - sınırlı güce ve belleğe sahip cihazlar için tasarlanmıştır, genellikle küçük bir ekran boyutuna sahiptirler. Bu tür cihazlar akıllı telefonlar ve PDA'lar, alıcılar dijital televizyon.
    4. Kart - akıllı kartlar, sim kartlar, ATM'ler gibi son derece sınırlı bilgi işlem kaynaklarına sahip cihazlar için tasarlanmıştır. Bu amaçlar doğrultusunda bayt kodu, platform gereksinimleri ve kitaplıkların bileşenleri değiştirilmiştir.

    Başvuru

    Java programlama dilindeki programlar genellikle daha yavaştır ve daha fazla zaman alır. rasgele erişim belleği. Java ve C dillerinin karşılaştırmalı analizi, C'nin biraz daha üretken olduğunu gösterdi. Java sanal makinesinde yapılan sayısız değişiklik ve optimizasyondan sonra performansını iyileştirmiştir.

    Android için uygulamalar için aktif olarak kullanılır. Program, standart olmayan bir bayt kodunda derlenir ve ART sanal makinesinde yürütülür. Derleme için Android Studio kullanılmaktadır. Google'dan gelen bu IDE, resmi Android geliştirme IDE'sidir.

    Microsoft, Java Sanal Makinesi MSJVM'nin kendi uygulamasını geliştirmiştir. Temel çapraz platform kavramını bozan bu tür farklılıkları vardı - bazı teknolojiler ve yöntemler için destek yoktu, yalnızca Windows platformunda çalışan standart dışı uzantılar vardı. Microsoft, sözdizimi ve genel işleyişi Java'ya çok benzeyen J# dilini yayımladı. Resmi spesifikasyona uymadı ve sonunda standart Microsoft Visual Studio geliştirici araç setinden kaldırıldı.

    Java programlama dili ve ortamı

    Yazılım geliştirme aşağıdaki IDE'lerde gerçekleştirilir:

    1. NetBeans IDE'si.
    2. Tutulma IDE'si.
    3. IntelliJ FİKİR.
    4. jGeliştirici.
    5. iOS için Java.
    6. Geany.

    JDK, Oracle tarafından bir Java Geliştirme Kiti olarak dağıtılır. Derleyici, standart kitaplıklar, yardımcı programlar, yürütme sistemi içerir. Modern entegre geliştirme ortamları, JDK'ya güvenir.

    Netbeans ve Eclipse IDE'de Java programlama dilinde kod yazmak uygundur. Bunlar ücretsiz entegre geliştirme ortamlarıdır, tüm Java platformları için uygundur. Python, PHP, JavaScript, C++ ile programlama için de kullanılır.

    Jetbrains'ten IntelliJ IDE iki sürüm halinde dağıtılır: ücretsiz ve ticari. Birçok programlama dilinde kod yazmayı destekler, daha da fazla programlama dili uygulayan geliştiricilerin üçüncü taraf eklentileri vardır.

    JDeveloper, Oracle'dan başka bir geliştirmedir. Tamamen Java ile yazıldığı için tüm işletim sistemlerinde çalışır.

giriiş

Bu çalışma, günümüzün en umut verici programlama dillerinden biri olan Java diline ayrılmıştır. "Java" adı verilen teknoloji, abartmadan, yazılım geliştirme endüstrisinde devrim niteliğinde olarak adlandırılabilir.

Sıralama, PHP, C++ vb. diğer programlama dillerinde uygulanabilir. Java'da çok daha karlı. Detaylar aşağıda tartışılmıştır. Yenilik, bu dilde ve bu yorumda daha önce bir sıralama programının uygulanmamış olması gerçeğinde yatmaktadır.

Görevi uygulamak için, bir program yazmak için bir algoritma önerildi. Ayrıca, bu algoritma Java'da uygulandı.

Java programlama dilinin açıklaması

Java'nın genel özellikleri

Sıralayıcı programı yazmak için Java dili seçilmiştir. Java, Sun Microsystems tarafından 1991'den beri geliştirilen ve 23 Mayıs 1995'te resmi olarak yayınlanan nesne yönelimli bir programlama dilidir. Başlangıçta, yeni programlama dili Oak (James Gosling) olarak adlandırıldı ve tüketici elektroniği için geliştirildi, ancak daha sonra Java olarak yeniden adlandırıldı ve küçük uygulamalar, uygulamalar ve sunucu yazılımı yazmak için kullanılmaya başlandı.

Java programlama dili, var olan diğer dillere benzemez. Tarayıcılar aracılığıyla WWW'deki bilgisayarlarda çalışmayı kolaylaştırmak için tasarlanmıştır. Günümüzde her bilgisayarın bir tarayıcısı vardır. Buna karşılık, her tarayıcı Java'yı destekler. Bu, dünya çapında depolanan belgeleri görüntüleyebileceğiniz ve bir bağlantıya tıklayarak ağ üzerinden aktarılacak ve bilgisayarınızda çalışacak bir Java programını etkinleştirebileceğiniz anlamına gelir.

Java dilinin ana avantajlarından biri, programların üzerinde çalıştığı platform ve bilgisayar türünden bağımsız olmasıdır. Böylece Windows, Linux, FreeBSD, Solaris, Apple Mac vb. işletim sistemleri altında aynı kod çalıştırılabilir. Bu, programlar küresel İnternet üzerinden indirildiğinde ve çeşitli platformlarda kullanıldığında çok önemli hale gelir. Java programlama dili sadece statik metinler ve grafiklerle değil, çeşitli dinamik nesnelerle de çalışabilir.

Java'nın bir diğer eşit derecede önemli avantajı, C++ programlama dili ile olan büyük benzerliğidir. Bu nedenle, C ve C ++ sözdizimine aşina olan programcılar için Java'yı öğrenmek kolay olacaktır.

Ayrıca Java tamamen nesne yönelimli bir dildir, hatta C++'dan bile daha fazla. Sayılar gibi birkaç ilkel tür dışında, Java dilindeki tüm varlıklar nesnelerdir.

Java'da hata içermeyen programlar geliştirmenin C++'a göre çok daha kolay olması da önemlidir.

Mesele şu ki, Sun şirketinden Java dilinin geliştiricileri, C ++ dilinde programların temel bir analizini gerçekleştirdiler. Kaynak kodun "darboğazları" analiz edildi ve bu da tespit edilmesi zor hataların ortaya çıkmasına neden oldu. Bu nedenle, Java dilini en yaygın hataları gizleyecek programlar oluşturabilecek şekilde tasarlamaya karar verildi.

Bunun için şunlar yapıldı:

geliştiriciler, belleği açıkça ayırma ve boşaltma olasılığını ortadan kaldırdı.

Örneğin, Java'daki bellek, çöp toplama yoluyla otomatik olarak serbest bırakılır. Programcının, belleğin yanlış kullanımından kaynaklanan hatalara karşı sigortalı olduğu ortaya çıktı.

gerçek dizilerin tanıtılması ve işaretçilerin yasaklanması.

Artık programcılar, işaretçilerin yanlış kullanımı nedeniyle verileri bellekten silemezler.

Eşitlik için atama işlecini karşılaştırma işleciyle karıştırma olasılığı hariç tutulmuştur. Kural olarak, "=" işaretiyle ilgili sorun, sıklıkla C ve C ++ 'da tespit edilmesi o kadar kolay olmayan mantıksal hatalara yol açar. Özellikle büyük programlarda.

çoklu kalıtım tamamen hariç tutulmuştur. Bunun yerini yeni bir konsept aldı - fikri Objective C dilinden ödünç alınan bir arayüz.

Arayüz, programcıya, bir programcının çoklu kalıtımdan elde edebileceği hemen hemen her şeyi sağlarken, sınıf hiyerarşilerini yönetmenin getirdiği karmaşıklıklardan da kaçınır.

En son sürüm, gelişmiş güvenlik, Mozilla Rhino betik dili için gelişmiş destek, gelişmiş masaüstü entegrasyonu ve grafik arayüzler oluşturmaya yönelik bazı yeni özellikler ekleyen sürüm 1.6'dır.

Java ve Microsoft

Aşağıdaki şirketler, .NET ile de ilgilenmelerine rağmen, çoğunlukla Java (J2EE) teknolojilerine odaklanmaktadır: IBM, Oracle. Özellikle Oracle DBMS, bileşeni olarak bir JVM içerir ve DBMS'yi Java dilinde, örneğin saklı yordamlar dahil, doğrudan programlama yeteneği sağlar.

Ana Özellikler

Program örneği

"Merhaba Dünya!" yazan program:

Genel sınıf HelloWorld ( public static void main(String args) ( System .out .println ("Hello, World!" ) ; ) )

Şablonların kullanımına bir örnek:

Java.util.*'i içe aktarın; public class Örnek ( public static void main(String args) ( // Bir şablondan bir nesne oluşturun. Liste dizeler = yeni LinkedList () ; strings.add("Merhaba" ) ; strings.add("dünya" ) ; strings.add("!"); for (String s: strings) ( System .out .print(s) ; System .out .print (" " ) ; ) ) )

Anahtar Fikirler

ilkel tipler

Java dilinde yalnızca 8 skaler tip vardır: boolean, byte, char, short, int, long, float, double.

İlkel türler için sarmalayıcı sınıflar

İlkel türlerin uzunlukları ve değer aralıkları standart tarafından tanımlanır., uygulama değil ve tabloda verilmiştir. Karakter türü, yerelleştirme kolaylığı için iki bayt yapıldı (Java'nın ideolojik ilkelerinden biri): standart oluşturulduğunda, Unicode-16 zaten vardı, ancak Unicode-32 yoktu. Sonuçta tek baytlık bir tür kalmadığından, yeni bir bayt türü eklendi. Float ve double türleri özel değerlere sahip olabilir ve "sayı değildir" (

Bir çeşit Uzunluk (bayt olarak) Aralık veya değer kümesi
mantıksal Tanımsız doğru yanlış
bayt 1 −128..127
karakter 2 0..2 16 -1 veya 0..65535
kısa 2 -2 15 ..2 15 -1 veya -32768..32767
int 4 -2 31 ..2 31 -1 veya -2147483648..2147483647
uzun 8 −2 63 ..2 63 -1 veya yaklaşık olarak −9.2 10 18 ..9.2 10 18
batmadan yüzmek 4 -(2-2 -23) 2 127 ..(2-2 -23) 2 127 , veya yaklaşık olarak -3,4 10 38 ..3,4 10 38 , ayrıca , , NaN
çift 8 -(2-2 -52) 2 1023 ..(2-2 -52) 2 1023 , veya yaklaşık olarak -1,8 10 308 ..1,8 10 308 ve ayrıca , , NaN

Java'nın ideolojik gerekliliklerinden biri ve başarısının nedenlerinden biri olan dili platformdan bağımsız hale getirmek için bu tür katı bir standardizasyon gerekliydi. Bununla birlikte, platform bağımsızlığıyla ilgili küçük bir sorun hala devam etti. Bazı işlemciler, sonuçların ara depolanması için 10 baytlık kayıtlar kullanır veya başka yollarla hesaplamaların doğruluğunu artırır. Java'yı mümkün olduğunca birlikte çalışabilir hale getirmek için farklı sistemler, içinde erken sürümler hesaplamaların doğruluğunu artırmanın herhangi bir yolu yasaklandı. Ancak, bu daha yavaş performansa neden oldu. Platform bağımsızlığı uğruna, özellikle programların çalışmasını yavaşlatarak bunun bedelini ödemeleri gerekiyorsa, çok az kişinin doğruluğun bozulmasına ihtiyaç duyduğu ortaya çıktı. Çok sayıda protestodan sonra bu yasak kaldırıldı, ancak kesinlik geliştirmeyi devre dışı bırakmak içinstrictfp anahtar sözcüğü eklendi.

Matematiksel İşlemlerde Dönüşümler

Java dili aşağıdaki kurallara sahiptir:

  1. İşlenenlerden biri double türündeyse, diğeri de double türüne dönüştürülür.
  2. Aksi takdirde, işlenenlerden biri float türündeyse, diğeri de float türüne dönüştürülür.
  3. Aksi takdirde, işlenenlerden biri long türündeyse, diğeri de long türüne dönüştürülür.
  4. Aksi takdirde, her iki işlenen de int türüne dönüştürülür.

Son kural, Java'yı eski uygulamalardan ve C++'dan ayırır ve kodu daha güvenli hale getirir. Örneğin, Java dilinde, kodu çalıştırdıktan sonra

Kısa x = 50 , y = 1000 ; int z = x*y;

z değişkenine 50000 değeri atanır, -15536 ​​değil, C ve C++'ın umutsuzca modası geçmiş uygulamalarının çoğunda olduğu gibi. Sürüm 7'den beri MS VC++ tarafından ve diğer birçok modern derleyici (gcc , Intel C++, Borland C++, Comeau, vb.) tarafından derlenen bir programda, değer de 50000 olacaktır.

Nesne Değişkenleri, Nesneler, Başvurular ve İşaretçiler

Java dili yalnızca dinamik olarak oluşturulmuş nesnelere sahiptir. Ayrıca, nesne tipi değişkenleri ve Java'daki nesneler tamamen farklı varlıklardır. Nesne türü değişkenleri referanslardır, yani dinamik olarak oluşturulmuş nesnelere örtülü işaretçilerdir. Bu, değişken bildiriminin sözdizimi ile vurgulanır. Örneğin, Java'da şunu yazamazsınız:

çift ​​a[ 10 ] [ 20 ] ; b(30) ;

Çift a = yeni çift [ 10 ] [ 20 ] ; Foo b = new Foo(30 ) ;

Atamalar, alt programlara geçişler ve karşılaştırmalar sırasında nesne değişkenleri işaretçiler gibi davranır yani nesnelerin adresleri atanır, kopyalanır ve karşılaştırılır. Ve bir nesne değişkenini kullanarak bir nesnenin veri alanlarına veya yöntemlerine erişirken, hiçbir özel başvuru işlemi gerekmez - bu erişim, nesne değişkeni nesnenin kendisiymiş gibi gerçekleştirilir.

Nesne değişkenleri, basit sayısal türler dışında herhangi bir türdeki değişkenlerdir. Java'da açık işaretçiler yoktur. C, C++ ve diğer programlama dillerindeki işaretçilerin aksine, Java'daki referanslar yüksek derece kullanımlarındaki ciddi kısıtlamalar nedeniyle güvenli, özellikle:

  • int türündeki bir nesneyi veya başka herhangi bir ilkel türü bir işaretçiye veya başvuruya dönüştüremezsiniz ve bunun tersini de yapamazsınız.
  • Linkler üzerinde ++, −−, +, − işlemleri veya herhangi bir aritmetik işlem yapılması yasaktır.
  • Referanslar arasındaki tip dönüştürme katı bir şekilde düzenlenir. Dizi başvuruları dışında, yalnızca devralınan bir tür ile onun alt öğesi arasındaki başvuruların dönüştürülmesine izin verilir ve devralınan türden devralınan türe dönüştürme, çalışma zamanında açıkça belirtilmeli ve anlamlılık açısından kontrol edilmelidir. Dizi referans dönüştürmelerine, yalnızca temel türlerinin dönüştürmelerine izin verildiğinde ve boyut çakışması olmadığında izin verilir.
  • Java'da adrese teslim (&) veya adrese teslim (*) işlemleri yoktur. Java'daki yıldız işareti çarpma anlamına gelir, hepsi bu. Ve işareti (&) yalnızca "bitsel ve" anlamına gelir (çift ve işareti "mantıksal ve" dir).

Java'da özel olarak getirilen bu tür kısıtlamalar nedeniyle, fiziksel adresler düzeyinde doğrudan bellek manipülasyonu imkansızdır (her ne kadar hiçbir şeye işaret etmeyen referanslar olsa da: böyle bir referansın değeri null ile gösterilir).

Yinelenen bağlantılar ve klonlama

Nesne değişkenleri başvuru değişkenleri olduğundan, atama nesneyi kopyalamaz. Yani yazarsan

foo foo, bar; ... çubuk = foo;

daha sonra adres foo'dan bar'a kopyalanacaktır. Yani foo ve bar aynı hafıza alanını, yani aynı nesneyi işaret edecektir; foo tarafından başvurulan nesnenin alanlarını değiştirmeye çalışmak, bar tarafından başvurulan nesneyi değiştirir ve bunun tersi de geçerlidir. Sadece bir tane daha almanız gerekiyorsa kopyalamak kaynak nesnede, nesnenin bir kopyasını oluşturan yöntemi (C++ terminolojisinde üye işlev) clone() yöntemini veya bir kopya oluşturucuyu kullanın.

clone() yöntemi, sınıfın Cloneable arabirimini uygulamasını gerektirir (arayüzler için aşağıya bakın). Bir sınıf, Klonlanabilir arayüzü uygularsa, varsayılan olarak clone() tüm alanları kopyalar ( küçük kopya). Kopyalamak yerine alanları (alanlarıyla birlikte vb.) klonlamak istiyorsanız, clone() yöntemini geçersiz kılmanız gerekir. clone() yöntemini tanımlamak ve kullanmak genellikle önemsiz bir iş değildir.

Çöp toplama

Java dilinde, bir nesneyi bellekten açıkça kaldırmak mümkün değildir - bunun yerine çöp toplama uygulanır. Çöp toplayıcıya belleği serbest bırakmak için bir "ipucu" vermenin geleneksel hilesi, bir değişkeni null olarak ayarlamaktır. Ancak bu, nesnenin değiştirildiği anlamına gelmez. hükümsüz, kesinlikle ve hemen silinecektir. Bu teknik, yalnızca nesneye yapılan başvuruyu kaldırır, yani işaretçiyi bellekteki nesneden ayırır. Bu durumda, kullanılan değişkenlerden veya nesnelerden en az bir referans onu işaret ettiği sürece, nesnenin çöp toplayıcı tarafından silinmeyeceği akılda tutulmalıdır. Zorunlu çöp toplamayı başlatma yöntemleri de vardır, ancak bunların çalışma zamanı tarafından çağrılacağı garanti edilmez ve normal kullanım için önerilmez.

Sınıflar ve Fonksiyonlar

Java prosedürel bir dil değildir: herhangi bir işlev yalnızca bir sınıf içinde bulunabilir. Bu, "işlev" veya "üye işlev" kavramlarının olmadığı Java dilinin terminolojisiyle vurgulanır (İng. üye işlevi), ama sadece yöntem. Standart işlevler de yöntemler haline geldi. Örneğin, Java'da sin() işlevi yoktur, ancak Math sınıfının bir Math.sin() yöntemi vardır (sin()'e ek olarak cos() , exp() , sqrt() içerir) , abs() ve diğer birçok yöntem).

Statik yöntemler ve alanlar

Sin () (ve diğer benzer işlevleri) her çağırmanız gerektiğinde Math sınıfından (ve diğer benzer sınıflardan) bir nesne oluşturmamak için, kavram statik yöntemler(İngilizce) statik yöntem; bazen Rusça'da bunlara statik denir). Statik bir yöntem (açıklamada static anahtar sözcüğüyle işaretlenmiştir), sınıfından bir nesne oluşturulmadan çağrılabilir. Bu nedenle, kişi yazabilir

Çift x = Matematik .sin(1) ;

Matematik m = yeni Matematik(); çift ​​x = m.sin(1) ;

Statik yöntemler üzerindeki kısıtlama, bu nesnede yalnızca statik alanlara ve yöntemlere erişebilmeleridir.

Statik alanlar, C++ ile aynı anlama sahiptir: her birinin yalnızca bir örneği vardır.

kesinlik

final anahtar sözcüğü, bir değişkeni, yöntemi veya sınıfı tanımlarken farklı anlamlara gelir. Son değişken (sabit olarak adlandırılır), bildirildiğinde başlatılır ve daha fazla değiştirilemez. Nihai yöntem, kalıtım yoluyla geçersiz kılınamaz. Son sınıfın hiç mirasçısı olamaz.

Soyutlama

Java'da, açıkça nihai veya özel olarak bildirilmeyen yöntemler, C++ terminolojisinde sanaldır: temel ve kalıtım sınıflarında farklı tanımlanmış bir yöntemi çağırmak her zaman bir çalışma zamanı kontrolüne sahiptir.

Java'daki soyut yöntem (soyut tanımlayıcı), parametrelerin ve dönüş türünün belirtildiği, ancak bir gövdenin belirtilmediği bir yöntemdir. Türetilmiş sınıflarda soyut bir yöntem tanımlanır. C++'da aynı şeye saf sanal işlev denir. Bir sınıfın soyut yöntemleri tanımlayabilmesi için, sınıfın kendisinin de soyut olarak bildirilmesi gerekir. Soyut sınıf nesneleri oluşturulamaz.

arayüzler

Java'daki en yüksek soyutlama derecesi arayüzdür. Tüm arabirim yöntemleri soyuttur: soyut tanımlayıcı bile gerekli değildir. Arayüz bir sınıf değildir. Bir sınıf miras alabilir veya genişletmek(genişler) başka bir sınıf veya uygulamak(uygular) arayüzü. Ek olarak, bir arayüz başka bir arayüzü devralabilir veya başka bir arayüzü genişletebilir.

Java'da bir sınıf birden fazla sınıfı miras alamaz, ancak herhangi bir sayıda arayüzü uygulayabilir.

Arabirimler, yöntemlere parametre olarak geçirilebilir, ancak kendi türlerinde nesneler oluşturulamaz.

İşaretçi arayüzleri

Java'da, uygulanacak yöntemleri içermeyen, ancak JVM tarafından özel bir şekilde işlenen bazı arabirimler vardır. Bunlar arayüzlerdir:

  • java.lang.Cloneable
  • java.io.Seri hale getirilebilir
  • java.rmi.Uzak

Java'daki şablonlar (jenerik)

Java 5'ten başlayarak, dilin genel bir programlama mekanizması vardır - dıştan C++ şablonlarına yakın olan şablonlar. Sınıfların ve yöntemlerin açıklamasında özel bir sözdizimi kullanarak, açıklama içinde kullanılabilecek tür parametrelerini alan türleri, parametreler ve yöntemlerin dönüş değerleri olarak belirtebilirsiniz.

// Genel sınıf bildirimi sınıf GenericClass ( E getFirst() ( ... ) geçersiz ekle(E nesne) ( ... ) ) // Kodda jenerik bir sınıf kullanmak Genel Sınıf var = yeni GenericClass () ; var.add("qwerty"); String p = var.getFirst();

Sınıfların, arayüzlerin ve yöntemlerin genel bildirimine izin verilir. Ek olarak, sözdizimi, parametre türlerinin sınırlı bildirimlerini destekler: formun yapısının bildiriminde bir gösterge A, B, C vb. arabirimlerini ve yapıyı uygulamak için T tipi parametresini gerektirir. tip parametresi T'nin bir C tipi veya atalarından biri olmasını gerektirir.

C# şablonlarından farklı olarak, Java şablonları çalışma zamanı tarafından desteklenmez - derleyici yalnızca herhangi bir şablon içermeyen bayt kodu oluşturur. Java'da şablonların uygulanması, C ++ 'da benzer mekanizmaların uygulanmasından temel olarak farklıdır: derleyici, bir şablonun kullanıldığı her durum için ayrı bir sınıf veya şablon yöntemi varyantı oluşturmaz, ancak yalnızca aşağıdakileri içeren tek bir bayt kodu uygulaması oluşturur: gerekli tip kontrolleri ve dönüştürmeler. Bu, Java programlarında şablonların kullanımına ilişkin bir dizi kısıtlamaya yol açar.

Sınıf Üyeliği Kontrolü

Java'da, bir nesnenin hangi sınıfa ait olduğunu açıkça kontrol edebilirsiniz. Foo örneğiof Foo ifadesi, foo nesnesi Foo sınıfına veya soyundan geliyorsa veya Foo arabirimini uyguluyorsa (veya daha genel olarak Foo'nun devraldığı arabirimi uygulayan bir sınıfı miras alıyorsa) doğrudur.

Ardından, tüm nesneler için tanımlanan getClass() işlevi, Class türünde bir nesne döndürür. Bu nesneler karşılaştırılabilir. Örneğin, foo.getClass()==bar.getClass(), foo ve bar nesneleri tamamen aynı sınıfa aitse doğru olacaktır (ancak bu, bunların iki özdeş nesne olduğu anlamına gelmez).

Ek olarak, herhangi bir türden Class türünde bir nesne şu şekilde elde edilebilir: Integer.class , Object.class .

Ancak, sınıfların doğrudan karşılaştırılması her zaman sınıf üyeliğini kontrol etmenin en iyi yolu değildir. Bunun yerine genellikle isAssignableFrom() işlevi kullanılır. Bu fonksiyon, Class tipi bir nesne üzerinde tanımlanır ve Class tipi bir nesneyi parametre olarak alır. Bu nedenle, Foo, Bar sınıfının bir atasıysa, Foo.class.isAssignableFrom(Bar.class) çağrılması true değerini döndürecektir. Tüm nesneler Object türünün torunları olduğundan, Object.class.isAssignableFrom() çağrısı her zaman true değerini döndürür. Class türündeki bir nesnenin belirtilen işlevleriyle birlikte, isInstance() (instanceof'a eşdeğer) ve cast() (bir parametreyi seçilen sınıfın bir nesnesine dönüştürür) işlevleri de kullanılır.

Sınıf Kitaplıkları

Yazılım geliştirme araçları

  • JDK - Java SE ve Java EE platformları için bir dizi kitaplığa ek olarak, bir derleyici içerir Komut satırı javac ve komut satırı modunda da çalışan bir dizi yardımcı program.
  • NetBeans IDE, tüm Java platformları için ücretsiz bir IDE'dir - Java ME, Java SE ve Java EE. Java geliştiricisi Sun Microsystems tarafından Java ve diğer dillerde (, C++, Fortran, vb.) yazılım geliştirme için bir temel olarak tanıtılır.
  • Java SE ve Java EE. Eclipse'de Java ME platformunun desteklenmesi için çalışmalar devam etmektedir. C, C++, Fortran vb. yükseltilir.)
  • IntelliJ IDEA, Java SE, Java EE ve Java ME platformları için ticari bir geliştirme ortamıdır.

notlar

  1. java (İngilizce). Merriam-Webster Çevrimiçi Sözlüğü. Merriam Webster. - "Java" kelimesinin İngilizce telaffuzu. Erişim tarihi: 5 Haziran 2009.
  2. Robert Tolksdorf. Java Virtual Machine JVM için programlama dilleri. araştırma GmbH'dir. - JVM için alternatif dillerin ve dil uzantılarının çevrimiçi kataloğu. Erişim tarihi: 5 Haziran 2009.
  3. Microsoft Java Sanal Makine Desteği. Microsoft (2003-09-12). - MSJVM destek programı hakkında Microsoft'un resmi açıklaması. Erişim tarihi: 5 Haziran 2009.
  4. Todd Hoff Amazon Mimarisi (İngilizce) (2007-09-18). - Java teknolojileri kullanılarak Amazon mimarisinin tartışılması. Erişim tarihi: 6 Haziran 2009.
  5. Amazon Elastic Compute Cloud (Amazon EC2) . Amazon Web Hizmetleri LLC. - Bir web hizmeti olarak Amazon EC2 teknolojisinin ve yeteneklerinin açıklaması. Erişim tarihi: 6 Haziran 2009.
  6. Todd Hoff eBay Mimarisi (İngilizce) (2008-05-27). - eBay mimarisinin Java platformunda tartışılması. Erişim tarihi: 6 Haziran 2009.
  7. Randy Shoup, Dan Pritchett eBay Mimarisi (İngilizce) (PDF). SD Forumu 2006(2006-11-29). - eBay mimari gelişiminin tarihi hakkında sunum. Erişim tarihi: 6 Haziran 2009.
  8. Allen Kıç Yandex CTO'su Ilya Segalovich ile Özel Röportaj (İngilizce) . Merkez Ağları (2008-01-14). - Yandex CTO'su Ilya Segalovich ile röportaj. Erişim tarihi: 6 Haziran 2009.
  9. Anatoly Orlov Yandex.Arama mimarisi (Rusça) (PowerPoint). Yekaterinburg'daki JUG toplantısının materyalleri(2008-05-24). Erişim tarihi: 6 Haziran 2009.
  10. Brian Guan LinkedIn Blogu. Blog Arşivi. Grails LinkedIn'de. (İngilizce) . LinkedIn.com (2008-06-11). - Grails Java teknolojisine dayalı LinkedIn sisteminin oluşturulma tarihi. Erişim tarihi: 5 Haziran 2009.
  11. OracleJVM ve Java Saklı Yordamlar. Oracle Inc.. - Oracle DBMS sunucusunun bir parçası olarak Java teknolojilerine adanmış Oracle portalının bir bölümü. Erişim tarihi: 5 Haziran 2009.
  12. Object.clone() yönteminin belgelerine bağlantı

Edebiyat

  • Monakhov Vadim Java Programlama Dili ve NetBeans Ortamı, 2. Baskı. - St.Petersburg .: "BHV-Petersburg", 2009. - S. 720. - ISBN 978-5-9775-0424-9
  • Joshua Bloch. Java. Etkili programlama = Etkili Java. - M .: "Lori", 2002. - S. 224. - ISBN 5-85582-169-2
  • Java 2. Professional Kitaplığı, Cilt 1. Temel Bilgiler = Core Java™ 2, Cilt I -- Temel Bilgiler. - 7. baskı - M .: "Williams", 2007. - S. 896. - ISBN 0-13-148202-5
  • Kay S. Horstmann, Gary Cornell. Java 2. Uzman Kitaplığı, Cilt 2. Programlama İpuçları = Core Java™ 2, Cilt II – Gelişmiş Özellikler. - 7. baskı - M .: "Williams", 2007. - S. 1168. - ISBN 0-13-111826-9
  • Bruce Eckel. Java Felsefesi = Java'da Düşünme. - 3. baskı - St. Petersburg: "Piter", 2003. - S. 976. - ISBN 5-88782-105-1
  • Herbert Schildt, James Holmes. Java Programlama Sanatı = Java Sanatı. - M .: "Diyalektik", 2005. - S. 336. - ISBN 0-07-222971-3
  • Lubos Bruga. Hızlı Java: Pratik Ekspres Kurs = Luboš Brůha. Java Hotová řešení.. - M .: Bilim ve Teknoloji, 2006. - S. 369. - ISBN 5-94387-282-5

Java, SunMicrosystems tarafından geliştirilen bir programlama dilidir. Java uygulamaları genellikle özel bayt kodunda derlenir, böylece bilgisayar mimarisinden bağımsız olarak herhangi bir Java sanal makinesinde (JVM) çalışabilirler. Resmi çıkış tarihi 23 Mayıs 1995'tir. Günümüzde Java teknolojisi, statik Web sayfalarını etkileşimli, dinamik belgelere dönüştürmek ve dağıtılmış, platformdan bağımsız uygulamalar oluşturmak için araçlar sağlar.

Java programları, bayt kodunu işleyen ve talimatları yorumlayıcı olarak donanıma ileten bir program olan Java Virtual Machine (JVM) tarafından yürütülen bayt koduna çevrilir.

Programları bu şekilde yürütmenin avantajı, bayt kodunun programlardan tamamen bağımsız olmasıdır. işletim sistemi ve ilgili sanal makinenin bulunduğu herhangi bir cihazda Java uygulamalarını çalıştırmanıza izin veren donanım. Bir diğer önemli özellik Java teknolojisi, programın yürütülmesinin tamamen sanal makine tarafından kontrol edilmesinden dolayı esnek bir güvenlik sistemidir. Programın ayarlanan izinlerini aşan herhangi bir işlem (verilere yetkisiz erişim veya başka bir bilgisayara bağlanma girişimi gibi) anında iptale neden olur.

Çoğu zaman, sanal makine kavramının dezavantajları, sanal makine tarafından bayt kodunun yürütülmesinin Java dilinde uygulanan algoritma programının performansını azaltabilmesi gerçeğini içerir. Son zamanlarda, Java programlarını yürütme hızını biraz artıran bir dizi iyileştirme yapılmıştır:

Sınıf sürümlerini makine koduna kaydetme yeteneği ile bayt kodunu doğrudan program çalışması sırasında makine koduna çevirme teknolojisinin (JIT teknolojisi) uygulanması,

Standart kütüphanelerde platform odaklı kodun (native code) yaygın kullanımı,

Hızlandırılmış bayt kodu işleme sağlayan donanım (örneğin, bazı ARM işlemciler tarafından desteklenen Jazelle teknolojisi).



Dilin ana özellikleri:

Otomatik bellek yönetimi;

Olağanüstü durumların üstesinden gelmek için genişletilmiş yetenekler;

Zengin giriş/çıkış filtreleme araçları seti;

Dizi, liste, yığın vb. gibi bir dizi standart koleksiyon;

Ağ uygulamaları oluşturmak için basit araçların mevcudiyeti (RMI protokolünün kullanılması dahil);

HTTP istekleri yapmanıza ve yanıtları işlemenize izin veren sınıfların varlığı;

Çok iş parçacıklı uygulamalar oluşturmak için yerleşik dil araçları;

Birleşik veritabanı erişimi:

Bireysel SQL sorguları düzeyinde - JDBC, SQLJ'ye dayalı;

Java Data Objects ve Java Persistence API'ye dayalı olarak bir veritabanında saklama yeteneğine sahip nesneler kavramı düzeyinde;

Şablon desteği (1.5 sürümünden itibaren);

Programların paralel yürütülmesi.

1.4.3 C# programlama dili

Haziran 2000'de Microsoft'un bağırsaklarında doğan yeni bir programlama dili hakkında bilgi sahibi olundu. O bir parçası oldu yeni teknoloji Microsoft, .NET'i aradı ("Dot Net" olarak telaffuz edilir). Bu teknoloji çerçevesinde farklı programlama dillerinde yazılan programlar (Common Language Runtime, CLR) için tek yürütme ortamı sağlanmaktadır. Bu dillerden biri, bu ortamdaki ana dil C#'dır (C#, "C diyez", "C diyez" okuyun). Dilin adıyla elbette C++ ile ilişkisini vurgulamak istediler çünkü # kesişen iki artıdır. Ama hepsinden önemlisi, yeni dil Java'ya benziyor. Ve hiç şüphe yok ki, ortaya çıkmasının nedenlerinden biri Microsoft'un Sun'ın meydan okumasına cevap verme arzusuydu.

C#'ın yazarları resmi olarak isimlendirilmese de, dil kılavuzunun ön baskılarından birinin başlık sayfasında, 1996'da Microsoft'a taşınan Turbo Pascal ve Delphi'nin yaratıcısı Anders Hejlsberg ve Scott Wiltamuth belirtiliyor.

Birleşik program yürütme ortamı, Java sanal makinesinin bayt koduyla neredeyse aynı rolü gerçekleştiren ara dil IL'nin (Ara Dil - ara dil) kullanımına dayanır. .NET teknolojisi içerisinde kullanılan çeşitli dillerden derleyiciler, programları IL koduna çevirir. Java bayt kodu gibi, IL kodu da varsayımsal bir yığın bilgisayarın talimatlarını temsil eder. Ancak IL'nin tasarımında ve kullanımında da bir fark vardır.

Birincisi, JVM'den farklı olarak, IL tek bir programlama diline bağlı değildir. Microsoft.NET'in ön sürümleri, C++, C#, Visual Basic için derleyiciler içerir. Bağımsız geliştiriciler, diğer dilleri o dillerden derleyiciler oluşturarak IL koduna ekleyebilirler.

İkincisi, IL programatik yorumlama için değil, daha sonra makine kodunda derleme için tasarlanmıştır. Bu, önemli ölçüde daha yüksek performanslı programlar elde etmenizi sağlar. IL kodunu içeren dosyalar, optimize edici bir derleyicinin çalışması için yeterli bilgiyi taşır.

C# basit, modern, nesne yönelimli bir dildir. güvenli sistem C ve C++ türetilmiş türleri. C#, C ve C++ bilen programcılar için uygun ve anlaşılır olacaktır. C#, Visual Basic'in üretkenliğini C++'ın gücüyle birleştirir." Bu kelimeler C#'ın açıklamasını başlatır.

Düşünmek teknik özellikler dil:

Derleme birimi bir dosyadır (C, C++, Java'da olduğu gibi). Dosya bir veya daha fazla tip tanımı içerebilir: sınıflar (sınıf), arayüzler (arayüz), yapılar (struct), numaralandırmalar (enum), ad alanları üzerindeki dağılımlarının belirtilmesiyle veya belirtilmemesiyle temsilci türleri (temsilci);

Ad alanları (ad alanı), program nesnelerinin görünürlüğünü düzenler (C++'da olduğu gibi). Ad alanları iç içe olabilir. Bu nesnenin ait olduğu ad alanını açıkça belirtmeden program nesnelerinin kullanılmasına izin verilir. Kullanım yönergesinde (Turbo Pascal'da olduğu gibi) bu ad alanının kullanımına ilişkin genel bir söz yeterlidir. using yönergesinde (Oberon dilinde olduğu gibi) ad alanı adları için takma adlar vardır;

Temel veri türleri: 8 bit (sbyte, byte), 16 bit (kısa, ushort), 32 bit (int, uint) ve 64 bit (uzun, ulong) işaretli ve işaretsiz tamsayılar, tek gerçekler (float ) ve çift (çift) hassasiyet, Unicode karakterler(char), boole tipi (bool, tamsayılarla uyumlu değil), 28 önemli basamak kesinlik sağlayan ondalık tip (decimal);

Yapılandırılmış türler: sınıflar ve arabirimler (Java'daki gibi), tek boyutlu ve çok boyutlu (Java'dan farklı olarak) diziler, dizeler (dize), yapılar (sınıflarla neredeyse aynı, ancak öbek üzerine yerleştirilmemiş ve kalıtım olmadan), numaralandırmalar, uyumsuz tam sayılarla (Pascal'da olduğu gibi);

Delege türleri veya basitçe "temsilciler" (Modül-2 ve Oberon'daki yordamsal türler, C ve C++'daki işlev işaretçileri gibi);

Türler, referans türlerine (sınıflar, arabirimler, diziler, temsilciler) ve değer türlerine (temel türler, numaralandırmalar, yapılar) ayrılır. Referans tipindeki nesneler dinamik bellekte (yığın) tahsis edilir ve referans tipindeki değişkenler aslında bu nesnelerin işaretçileridir. Değer türleri söz konusu olduğunda, değişkenler işaretçiler değil, değerlerin kendileridir. Örtük tür dönüştürmelerine, yalnızca tür güvenliğini ihlal etmedikleri veya bilgi kaybına neden olmadıkları sürece izin verilir. Temel türler dahil tüm türler, diğer tüm türlerin temel sınıfı olan nesne türüyle uyumludur. Değer türlerinin, kutulama adı verilen nesne türüne örtülü bir dönüşümü ve açık bir ters dönüştürme - kutudan çıkarma vardır;

Otomatik çöp toplama (Oberon ve Java'da olduğu gibi);

14 öncelik düzeyine sahip kapsamlı işlem seti. Yeniden tanımlama işlemleri (Algol-68, Ada, C++'daki gibi). İşaretli ve işaretsiz operatörler ile tamsayılar üzerinde işlem yaparken taşma kontrolünü kontrol edebilir;

Değer parametreleri, referans parametreleri (ref) ve çıkış parametreleri (out) içeren yöntemler. ref ve out sözcükleri, yalnızca yöntemin açıklamasında değil, çağrılırken de parametreden önce yazılmalıdır. Çıktı parametrelerinin varlığı, tanımlama atamalarının yürütülmesini kontrol etmenizi sağlar. Dilin kurallarına göre, herhangi bir değişkenin kullanılmaya çalışılmadan önce bir değeri olması garanti edilmelidir;

Kontrol ifadeleri: if, switch, while, do, for, break, continue (C, C++ ve Java'da olduğu gibi). "koleksiyonun" her öğesi arasında dolaşan foreach ifadesi, goto jump ifadesinin birkaç çeşidi;

İstisna işleme (Java'da olduğu gibi);

Özellikler - erişim alanlarla aynı şekilde gerçekleştirilen (bir değer atayabilir veya alabilirsiniz), ancak dolaylı olarak get ve set alt yordamları (Object Pascal'da olduğu gibi - girdi) tarafından uygulanan sınıfların (nesneler) öğeleri Delphi sisteminin dili);

Dizin oluşturucular, nesnelere dizilerle aynı şekilde erişmenizi sağlayan sınıfların (nesneler) öğeleridir (içinde bir dizin belirleyerek). köşeli parantez). Örtük olarak adlandırılan get ve set rutinleri tarafından uygulanır. Örneğin, bir dizinin karakterlerine erişim (okumak için), standart dizi sınıfı için bir dizin oluşturucunun uygulanması nedeniyle bir dizinin öğeleri olarak gerçekleştirilebilir;

Olaylar, tanımlandıkları sınıfın dışında yalnızca += ve -= işlemlerinin geçerli olduğu, nesneler için olay işleyici yöntemleri eklemenize veya kaldırmanıza izin veren, prosedürel bir türdeki (temsilciler) sınıfların (alanlar veya özellikler) öğeleridir. bu sınıfın;

İşaretçiler ve adres aritmetiği kullanan güvenli olmayan (güvenli olmayan) kod, programın güvensiz değiştirici ile işaretlenmiş bölümlerinde yerelleştirilir;

C ve C++'dan farklı olarak yalnızca koşullu derleme olanakları sağlayan bir ön işlemci.

Elbette, C#'ın tartışılan eksiklikleri, dili beklentilerden hiç mahrum etmez. Birçok yönden C++'a tercih edilir. Yeni bir dilin ortaya çıkmasıyla tanınan C++ diliyle ilgili genel memnuniyetsizlik, C#'ın başarısı için ana ön koşullardan biridir.

C# ile Java'yı karşılaştırdığınızda birçok benzerlik görebilirsiniz. Doğru, Java sistemleri çok platformluysa, C# uygulaması yalnızca işletim sistemi için mevcuttur. Windows sistemleri ve sadece bir tane. Ancak, ağırlığına rağmen, dilin diğer sistemler için uygulanması beklenebilir. Ek olarak, tek bir program yürütme ortamına sahip Microsoft .NET platformunun kendisi, başta UNIX sistemleri olmak üzere alternatif mimarilere yükseltilebilir.

C#, Java'dan daha gerçekçi bir dil gibi görünüyor. Java'dan farklı olarak kendi kendine yeterlidir. Yani başka dillere başvurmadan C# ile herhangi bir program yazabilirsiniz. Bu, doğrudan donanıma erişim sağlayan "güvenli olmayan" kod bloklarının varlığı nedeniyle mümkündür. Java'da, düşük seviyeli tesislere erişim, diğer dillerde programlanması gereken "yerel yöntemler" (yerel yöntemler) kullanmalıdır.

Ve elbette, C # için beklentiler, öncelikle Microsoft'un onu tanıtmak için göstereceği çabalarla ilgilidir.