Ödev 3 ( Übung 3 ) + Scriptum Kapitel 3 + Scriptum Kapitel 4
* * * * * Scriptum Kapitel 3 :
Kapitel 3 - Nesne Tabanlı Kavramlar
3.1.3 Veri SoyutlamaŞekil 3.1 'de, yöntemleri nesne değişkenleri etrafında düzenlenir.Bu düzenleme göstermek içindir ki bir dışYöntemleri ve değil değişken nesne oluşur. SüreSen dışarıdan doğrudan dizinin öğeleri erişebilirsinizdışında doğrudan bir nesnenin değişkenlere erişmek istiyorolabilir.
Sadece onu mesajları veren, nesneye erişmek gerekirgönderir. Bir mesaj yürütülmesi için nesneye bir çağrıbu yöntemlerden birini ve hakkında bilgiler içerenYöntem hangi gerçek parametreleri yürütülecek. AslındaMesaj gönder bir çağrı başka bir şey değildirBir nesne yöntem. Nesne tabanlı programlama kullanılırbir (prosedürel programlama kıyasla) birazbiz büyük ölçüde birbirleri ile ilgili olduğunu açıklığa kavuşturmak için farklı terminolojiyapmak birbirleriyle iletişim bağımsız nesnelere var.Rağmen mesajı ve yöntemini çağırır arkasında biteryaklaşık aynı mekanizmalar koymak, bu pragmatik kullanımıFakat terminoloji olarak farklı. Bir düşünürmesaj ilk etapta şüphesiz biten belli bir tarafındanIyi tanımlanmış bir algoritma bir kısmı idam edildi, fakat birhangi yöntemi neden sadece bir fikir vardır. Olarak,bölüm 3.3 'de bakın, biz tarafından yöntemi biliyorhaber değil ayrıntılı olarak, genel olarak, yürütme gelir.Bu noktada Java somut bir örnek uygun olacaktır. Bu yüzdenAma bir sorun var: Java, nesneler, doğrudan ifade yokancak sınıfların örneklerini olarak çalışma zamanında sadeceüretilen - Bölüm 3.2 bakın. Bu nedenle, hala burada soyut ile olmalıdırIçerik örnekleri. Biz bir nesne olduğunu bir olduğunu varsayalımkoordinatların iki boyutlu sistemde renkli nokta.Bu nesne noktaya başvuru adlı bir değişken yatıyor.Punkt.verschiebe ile (1.2, -1.0) bu öğeyi göndermekmesaj (1.2, -1.0) taşıyın. Noktasına yanıt içinyöntemi, void move (çift, çift) tarafındançalışır ve (muhtemelen) 1.2 birimleri tarafından görevinden sağ veaşağı doğru bir birim. Metod bir sonuç döndürürse,sonra bir mesaj geri bir cevap verir. Bu yüzden şıkBiz () tarafından nesnenin rengini, mesaj () ve punkt.farbeSonuç olarak nesne yöntemi dize renk () bir şekillenmeya da bir dize (belki de "kırmızı") return cevap.Nesnesi olarak koordinatları ve renk mağaza içinde Formubelirlenir, biz bilmiyoruz. Bu tür ayrıntılar içinde kaybolurbiz dışarıdan nesneyi görüntülemek için. Kolaylığı nedeniyleÖrneğin biz nesne olarak, ancak tahmin edebilirsinizgörünümü içinde görünebilir. Bu fikir, ancak aldatıcı olabilir.Belki koordinatları kutupsal koordinatları olarak saklanır
3.1 nesnedeğil Kartezyen koordinatlar daha - bilmiyoruz. Bu aynı zamandabaşka bir problem, temsil biçimi değiştirmek için.Biliyoruz sadece gereken Kartezyen hareket parametreleriniKoordinat sistemi gösterilir.Genellikle bir nesne içeriğinin büyük bir kısmı, dışarıya görünmezve biz de iç görünüm zor olduğunu tahmin edebilirsiniz. ÖrneğinGerekli sürücü için bir araç sürüş değilkenBu gibi taşınır hangi eklemleri ve bağlantı parçaları bilmek,direksiyon taşırken beklenen etkisini göstermektedir. Dış görünümüdireksiyon temsil eden bir nesne yalnızca karşılık gelenDireksiyon simidi. Bir direksiyon çalışması öğrendi ve uygulanabilir olarakgerekir, bu yüzden değil, tabii ki bir nesnenin kullanımıdireksiyon iç işleyişi buna bilinmemektedir bileonun ihtiyacı var. Tamamen farklı beceri inşaat için gerekli olanbir direksiyon sistemi. Bu kendine yönlendirmek bir araca gerek yokturmevcut fonksiyonel direksiyon ile kullanıcı, sürece olabilirsağlayabilir. Dış görünümünden farklı olarak işlev görürBir nesnenin iç görünümü. Bu sadece kullanıcı alırGerekli yöntemleri sağlamak için nesne kullanın.Bir nesne genelde bir kara kutu (Almanca terim "siyahKutusu "neredeyse kullanılır) anladım. Bu gördüğünüz anlamına gelirKutunun dışında şekli değil, içerikleri sadece - bir idealizeİç ve arasındaki farkı göstermek için DiyagramıBir nesnenin dış görünümü. Idealize oldukça olarak arasındaki ayrımuygulama, ancak yine. Bazen bir nesne olarak adlandırılırYani bir kutu olarak, içerik bölümleri yakından bakınca gri kutu,görülebilir. Bu muhtemelen bir akıllı telefon ile karşılaştırabilirsiniz.Çoğunlukla, size bir arama veya düzeni başka şeyler yapmak ne kadar biliyoruzaçıkça kılavuzda açıklanmıştır yapar. Ama bazenzaman iç uygulama detayları da belirgindirBir uygulamaları ayırmak için nasıl bakmak için sorun sürüyoryazılım hataları bazen yazar veya.Nesnelerin özelliklerini altında açıklanmıştırVeri soyutlama kavramı özetledi. Bu konuda aslında biriki yönü - Encapsulation ve Veri gizleme - sadece kombine kendiFaydaları oynayabilir. Veri Gizleme altında saklandığı anlamına gelirBunların ayrıntılarını iç ya da önleyerek doğrudan erişimDışarıdan Ayrıntılar. Bu ilkelerin uygulanması için, ayırt
Şekil 3.2: Sol nesne değişkenleri ile bir kapsül olarak bir nesnenin iç yapısıve yöntemler sundu. Yöntem bildirimleri açık gri bulunmaktadırve uygulamaları koyu gri tutulur. Veri soyutlama doğruşematik olarak gösterilmiştir. Veri ve yöntemlerin uygulanmasıdış görünümüne ait ve içinde gizli değildir. Iç durumu,nesne değişkeni değerlere göre belirlenen değilgörünür. Yöntem bildirimleri sadece nesnenin arayüzü,ve soyut açıklamaları oluşur, dışarıdan görülebilir.Nesne (oklar olarak gösterilir) uygun içeren iletiler yanıtNesnenin durumunu bağlıdır yanıtları.Uygulanması bir nesnenin Arayüzleri. Uygulamabir iç eşdeğer, her arabirim bir dış görünüm.Çoğul olarak görülebilir, her nesne de birkaç farklı olabilirArayüzler, biz Bölüm 3.3 göreceğimiz gibi.Bir arabirim bir nesne anladığı mesajları tanımlar ve(Geniş anlamda ve soyut bir şekilde) bir ileti nesnesi olaraktepki verir. Örneğin bir arabirim belirttiği bir nokta-Mesajları taşımak için Nesne (uygun argümanlar) verenk anlamak için ve noktası kayması tarafından belirlenenKartezyen koordinatlarda Üniteleri, ya da renk geribir dizge olarak nokta yanıt. Başka bir arayüz olabilirsadece (uygun bir açıklama ile) mesaj taşımak. Seti Çeşitli arabirimler aynı kullanımına izin1703.2 sınıf ve örnekleriFarklı amaçlar için nesne. Nesnenin uygulanmasıayrıntılı olarak eksik arabirimleri açıklanan davranışı belirlerolmak. Koordinatları iç temsil açıklamasıbir noktası nesnesi uygulama bir parçasıdır.3.2 sınıf ve örnekleriJava dahil olmak üzere birçok nesneye dayalı diller bir sınıf kavramı içerir:Her nesne tam olarak bir sınıf yapısına aitnesne - Uygulanması - ayrıntılı olarak anlatılmaktadır. A sınıfıÇalışma zamanında yeni nesneler için bir plan olarak görülebilirBu sınıf oluşturulabilir. Nesne tabanlı programlamaBiz esas olarak yazmak ve sınıflarda aynı anda düşünmekBu gibi uygun için planları çizim mimar olarak nesneler,Düşünme Binası.3.2.1 Değişkenler ve YöntemleriBir örnekle başlayalım: Bir program, bu sayı, bu nedenleSınıf türü noktası nesneler. Bir nokta bir pozisyon tarifiki Kartezyen iki boyutlu koordinat sistemindeKoordinatlar kayan nokta sayıları ile tanımlanır. Bir debasit değişken aşağıdaki gibi Java sınıf nokta gibi görünebilir:class Nokta {double x / / x koordinatıint y / / y koordinatı}Sınıfın bu tanımına dayalı olarak, yeni noktalar oluşturulabilir.Sınıf noktasının Aşağıdaki satırlarda kullanılır:Nokta p / / referans türüdürp = new Point () / nokta / yeni bir örneğiniHer sınıf bir başvuru türüne karşılık gelir. İlk satır nedenle ilanbir nesne tipi noktası, bir referans değişken pTip nokta içerebilir. Tek basamaklı yılının ikinci satırındaÖnek yeni operatör tipine noktası bir nesne oluşturur. IşlenenBu operatör oluşturmak için nesne sınıfının adıdır.
3 Nesne Tabanlı Kavramlar0.0 0.0Nesnex yrefpŞekil 3.3: p değişken türü Point nesneye başvuru içerenParantez önemi, biz Bölüm 3.2.4 de olacak. Girmek Atama operatörünün sağ tarafındaki ifadenin dönüş değeriYeni oluşturulan nesneye bir referanstır. Sizdenp değişkeni atanır - Şekil 3.3.Bir programda sınıfın nesne herhangi bir sayıda oluşturabilirsinizolmak. Ifade new Point () Her bir değerlendirme için dönersınıf Point yeni bir nesne. Biz bir sınıfın nesneleri çağrıBir sınıfın da örneklerini, bir örneklerinin gibi birTip konuşuyor. Genellikle bir sınıfın sadece adını kullanırveya nesnelerin adını yazın. Örneğin, bir konuşuyor"Bir nokta" ya da "nokta" nın ne zaman bir örneği veyabirden fazla örneğini öğe söyledi. Terminoloji ile ilgili olarakDikkat: (belirli veya belirsiz) makaleler ileBu çoğul, üzerinde terimdir bir terim ya da eğer daha önceönceki haber vermeden ve bir tür ya da tekil aksine bir nesnebir sınıf. Bir kere buna alışması, konuşma bu şekilde yapartamamen apaçık ve doğal.Prensip olarak, nokta operatörünü kullanarak bir nesnenin içeriğine erişim". 'Olası. Sol terim nesnesine bir başvurudurve sağ başvurulan nesne içerik adıdır. Bu yüzdenBu da nesne değişkenleri noktanın px ve py ile yapabilirsinizErişim değişkenler s. Listeleme 3.4 dışında bunu nasıl kullanıldığını gösterirNesne Değişkenleri ve kann.1 okuyun1In Listeleme 3.4, diğer birçok listelerinde tanımlanan çeşitli sınıflar vardır. Aslındaher sınıf ayrı bir dosyada olması gereken (ayrı biten. java)sınıf ile aynı adı. Birkaç sınıfları netlik Listeleme artışçok küçük örnek programlar. Ama programlama uygulama boyutları ile çokortalama sınıf büyüklüğü tamamen uygunsuz dosya birden fazla sınıf vardır.1723.2 sınıf ve örnekleriListeleme 3.4: Negatif Örnek: doğrudan erişim noktası ve nokta test cihazıclass Nokta {double x;iki y;}class Test {noktapublic static void main (String [] args) {Nokta p;p = new Point () / / ilk noktap.x = 1.0;p.y = 1.5;Nokta q;q = new Point () / / ikinci noktaq.x = 2.1;q.y = -1.2;System.out.println ("Nokta 1: (" + px + "," py + ")");System.out.println ("Madde 2: (" + qx + "," kı + ")");}}Doğrudan erişim istenmez. Veri soyutlama amacıylaBu talepler engelledi ve yerine uygun arabirimleri olmalıdırtanımlanabilir. Şu anda belirlenen nokta olarak, eldedoğrudan erişimi olmayan. Rağmen Listeleme 3.4 kodBu derleyici tarafından tercüme edilebilir bu anlamda doğruve zamanında biz ondan ne beklediğinizi, o yine de bir yokbunu nasıl değil bir örnek. Doğrudan isteklerzor programının genişletilmesi ve korunmasıdır. AtBu küçük örnek bize fark etmez, ama büyük içinProgramları bir şey uzun vadeli ciddi sorunlara yol açar.Biz Bölüm 3.1 'de gördüğümüz gibi, gerçek amacıbir nesne tek bir birim haline verileri ve yöntemleri özetlemek için- Kapsülleme ilkesi. Biz 3,5 Liste bunu. Eknesne değişkenleri işaret eden iki yöntem içerir. Bunun anlamı, birSınıfını konumunu değiştirmek için bir konumda şimdi kendini Noktası(Yöntem: hareket) ve kökeni olan uzaklığıKoordinat sistemi (distanzZumUrsprung) belirlemek. Yardımı ile
Listeleme 3.5: Encapsulation: Nesne değişkenleri ve yöntemleri bir birimi1 sınıf nokta {2 double x = 0.0;3 çift y = 0.0;45 void move (çift deltaX, çift deltaY) {6 x = x + deltaX;7 y = y + deltaY;8}910 çift distanzZumUrsprung () {11 dönüş Math.sqrt (x * x + y * y);12}13}1415 nokta class test {16 public static void main (String [] args) {17 nokta p;18 p = new Point ();19 p.verschiebe (1.0,1.5);20 p.verschiebe (1.0, -1.5);2122 System.out.println (p.distanzZumUrsprung ());23}24}Bu iki yöntem, doğrudan dışarıdan, artık gereklinesne değişkenleri erişim.hat 18 yeni nokta oluşturmak, değişkenleri xve 0.0 ile başlatılan yeni nesnenin y gibi Bildiriler gösterildiğihatları 2 ve 3 gösterisinde değişkenler. Doğrultusunda aramaDeğişken p nesnesi (elde olanı 19 NedenlerP hareket ile Nesne içeriği) yöntemine başvuruyor1.0 ve 1.5 çalışır mevcut parametreleri. Bu mesaj söylemekmove (1.0,1.5) s. gönderilir Hatları 6. ve 7. alınyeni değer atamaları ile nesnenin değişkenler.Yönerge ile yöntem yürütme tamamlandıktan sonraHat 20 devam ediyor. Değişkenler x ve y bile varyöntem daha fazla, onlar yerel değişkenler olmadığı için, ancak nesne değişkenleri.Hat 20, ileti (1.0, -1.5) taşınırp tekrar gönderilir ve böylece aynı hamlenin yöntemine1743.2 sınıf ve örnekleriDiğer cari parametreleri ile nesne denir. Bu yol açarhatları tekrar 6 ve 7 çalıştırmak olduğunu. Değişkenler x vey şu anda dahil, değerler son vardiya eldesaklandı - 1.0 ve 1.5. Bu değerlerparametreler eklenir. Daha sonra x ve y Diewert 2.0 ve 0.0 içerir.Ana yöntem bir nokta oluşturur ve iki kez ertelendi sonrahat 20 deyimi çıktı 2.0 üretmektedir.Listeleme 3.5 sürümü için Encapsulation çok daha iyidirŞekil 3.4 'de gibi. Yine de, bu cihazlar, mükemmel değildirdoğrudan bir değişkenleri x ve y için, hala mümkün olacaktır çünküBir neden olsa bile, erişim noktasını seçin. Veri soyutlama içinelde etmek için, biz Veri Gizleme gerekir. Hedef olarakBiz x ve dış y kere görünürlüğünü kontrol edebilirsiniz. Önlemek3.2.2 GörüşYerel değişkenler farklı olarak, nesne değişkenleri programında her yerdegeçerli, nesnesine bir başvuru yeri vardır. Yani, eğer ptip noktasının bir nesneye bir referans, o zaman biz biliyoruznesne değişkenleri p.x ve p.y. vardır Nesne değişkenleri ömrünesnenin ömrü karşılık gelir. Için depolama alanıNesne değişkeni ayrılan zaman yeni operatörü üzerinden nesneoluşturulur. Kavramsal olarak, ilk ömrünün sonuna sona erdiProgram yürütme. Ancak, göreceksiniz, o hafıza alanınesnelerin hangi erişim bile mümkün artıkDaha önce sistem tarafından otomatik olarak serbest bırakılabilir.Yerel değişkenlerin kapsam görünürlük bölge ile uyumlukatılıyorum. Buna karşılık, nesnenin görünürlüğünü çeşitli değişkenlerkapsamıyla sınırlı olmak. ÖrneğinDeğiştirici ile Listeleme 3.6 'da iki nesne değişkenleri x ve y, özel belirttikleri sağlar ki dış değişkenlersınıf Point, görünür değildir ve bu nedenle erişilemezBu geçerli olmasına karşın, nokta her durumda bu nedenle vardır.Özel değiştirici tüm bildirimler ve tanımlar erişebilirsinizyöntemleri, özellikle bir sınıf içinde uygulanmalıdır.O emin yaptığı bildirimleri ve tanımlarısınıf içinde kurulan adını görebilir. Benzer
Listeleme 3.6: Veri soyutlama, dış ve iç ayırmapublic class Nokta {Özel double x = 0.0;Özel int y = 0.0;public void move (çift deltaX, çift deltaY) {x = x + deltaX;y = y + deltaY;}kamu çift distanzZumUrsprung () {dönüş Math.sqrt (x * x + y * y);}}public class test {noktapublic static void main (String [] args) {Nokta p;p = new Point ();p.verschiebe (1.0,1.5);p.verschiebe (1.0, -1.5);System.out.println (p.distanzZumUrsprung ());}}Ayrıca kamu değiştirici nasıl kullanabileceğinizi özel, içinürünleri bildirimleri ve tanımları tarafından ithal sağlarOnlar geçerli nerede İsimler, her yerde görebilir, hangi temelde birTüm program. Iki hareket yöntemleri veListeleme 3.6 'distanzZumUrsprung her yerde bu nedenle görülebilir veherhangi bir yerde herhangi bir nesneye mesaj ekleyebilirsinizGönder noktası yazın.Listeleme 3.6, iki sınıf, kamu olarak tanımlanan ancakTanımlar başka bir sınıf değildir. Bu özel bir durumdur. Bu yüzdensınıflar her yerde hem sınıflar hem de tür olarak tanımlanmıştır.Buna karşılık, özel sınıf olarak tanımlanan ancakmevcut tanımları görünür dosya içinde. Bu nedenle,Diğer sınıflarla birlikte kullanıldığında özel sınıflar sadece yararlıdırbir dosyada tanımlanır. Tersine, daha açık olabilirAynı dosya türü Sınıflar.176
3.2 sınıf ve örnekleriKamu ve özel yanı sıra, iki değişik görüş vardır.Varsayılan veya paket görünürlük, otomatik olarak varbiz görünürlüğünü artırmak için bir değiştirici belirtmezseniz zaman. Düzenlemek İşte mevcut paket içinde görünür isimleri vardıraynı dizinde tüm Java kaynak dosyaları içinde.Küçük Java programları için, biz paket görünürlüğü ile gelenKamu dışı yerine, ancak daha büyük programlar ve sınıflar içinçeşitli programlarında yer almalıdır, paket görüş olduğunubelirli amaçlar için nadiren ve sadece yararlı. Bizim başlayalımbile daha büyük projeler için bir programlama stiline alışmakuygundur. Bu nedenle her zaman değiştiriciler gibi bir başlangıç programcı olmalıdır. Yazmak Tek istisna durumlarda olan bizmutlaka görüş paketi gerekiyor ve bu bizim kararpaket görünürlük için gerekçe. Bu böyle olmak zorunda değilbiz sadece bir değiştirici yazmak unutmak. gerçeğiDördüncü varyant görünürlük değiştirici koruma kullanır.Bu isimler aynı pakette ve görülebilen tüm sınıfları bulunmaktadırtanımları ve bildirimleri elde edildiği sınıf, biz daha sonra anlaşma bu yüzden. Ayrıca bu varyant görünürlükyaygın olarak kullanılmaz.Görünürlük kontrol bize kolayca iç ve ayrı sağlarDış görünümü. Ancak, ayırma anlaşma için tasarlanmamıştırbir nesne içinde ve başka görünür dışında sadece.Daha ziyade, ile, kod duran sınıf bağlıdırnesne erişim. Bu ayrımı netleştirmek için,biz sınıf Point aşağıdaki yöntemi ekleyin:kamu çift mesafe (Point p) {çift dx = x - p.x;çift dy = y - p.y;dönüş Math.sqrt (dx * dx + dy * dy);}Uzaklıkta bir nokta içinde olduğundan, bu şekilde olabilirNesne değişkenleri x ve y için elbette erişim RağmenAyrıca, bir yol, nesne değişkenleri px, py güveniyordiğer nesne aittir. P tipi noktası olduğu için bu izin verilir: içindesınıf, biz sınıftaki tüm erişim işaret etmelidirNokta bile özel içerik, ilan ya da tanımlanmıştır. Ne zaman
noktadan mesafesinde değildir istiyoruz, biz değilx ve y ve hala p.x p.y. kullanarak Görünürlük ile ilgili olarakBu yüzden nesne ama bir şey olduğu meselesi değildirsadece sınıf ne bir şey bekliyor. Bu kontrol formuGörünürlük bize daha fazla özgürlük ve daha hassas kontrol sağlar. RağmenBu çözüm, bazen karışıklığa yol açabilir. Son olarak, düşünmekBiz çoğunlukla nesneleri ve onların iç ve dış görünümlerinde.Uygulamada, nesne değişkenleri hemen hemen her zaman özel bildirilirolmak. Ama aynı zamanda özel yöntemleri için çok kullanışlıdır. Bir örnek:kamu çift pfadlaenge (Point [] ps) {double toplam = 0.0;for (int i = 1, i <ps.length; i + +)toplam + = ps [i-1] mesafe (ps [i]).;toplam dönmek;}DieMethode, sınıf noktada ve bir yol uzunluğunu hesaplardizi ps tüm noktalarından çalışır. Bu yukarıda kullanacakmesafe yöntemi tanıtıldı. Dışarıda pfadlaenge isenoktası kullanmanız gerekir, bu yöntem özel olarak tanımlanamazolmak, kamu yani. Ancak, sadece mesafe iseyol uzunluklarının hesaplanması için ve dış noktasına ihtiyacınızbiz özel değiştirici kullanmalısınız kaldırma çağrısı değil,değil halk. Genel olarak, mümkün olduğunca az dışarıgörülebilir.Acemi programcılar genellikle çok dışına, daha iyi olacağını düşünüyorum, görünür kılmak için, böylece program geliştirme sırasında eğergerekli olması halinde, kolayca erişebilirsiniz. ArkasındaAncak, temelde yanlış bir yaklaşım etkilemiştir. Iç ayırmave dışarıdan görünmez özellikle de dış nedenleri,Bir sınıfın uygulama ayrıntılarını her zaman değişebilir. Eğerdışında görünür kılan çok üzerinde, bu avantaj kaybolur. Eğerözel yöntemler sınıf dışında ama bir noktada tanımlanankullanmanız gerekir, buna kamu-özel sektör tarafından, genellikle kolaydır. Değiştirin Ancak, genellikle dışarıya, büyük maliyetli bir iştirgerçeği değiştirmek için görünür yöntemleri. Veri öğrenmelidirlerGizlenmesi bir sınırlama olarak, ancak kalmaması için büyük bir fırsat olarakgelecek değişiklikler ve geliştirmeler için.1783.2 sınıf ve örnekleriJava ile yazılmış ders kitapları açık ya da nesne yönelimli olursaProgramlama tanıtmak, bir çoğu gibi yöntemlerin örneklerini bulurBu (sınıf dönem bir parçası olarak):public void Setx (çift newX) {x = newX;}kamu çift GetX () {return x;}Sözde alıcı ve ayarlayıcı yöntemleri vardır ki sadece birNesne değişken veya set sorgu. Bu tür yöntemlerle alın, nesne değişkenleri erişmek için de özel olarak değişken kendisibildirilmiştir. Ders kitapları nedeniyle, sırf bu örnekleri kullanmakSadelik. Programlama uygulamada belirleyici ve alıcı olmalıYöntem, çünkü onlar aracılığıyla, mümkün olduğu gibi, yararlarını önlemek içinVeri büyük ölçüde kaybetti gizlenmesi.Biz Bölüm 2.3.1 gördüğümüz gibi, Java azından engellerbir program noktası, aynı adı taşıyan birçok yerel değişkenleri, geçerlivardır. Ancak, bu sadece yerel değişkenler için geçerlidir. Java yasal olduğunubir yerel değişken (veya resmi bir parametre) ile aynı ada sahipbir nesne değişkeni var. Bu durumda, nesne değişkeniyerel değişkenler kaplı. Bu bir Varialbe üzerinde iseniz anlamına gelirAdı kere, bir yerel değişken değil nesne değişkeni alır.Daha sonra göreceğimiz gibi, yine yolları vardırDeğişken erişim nesne. Bununla birlikte, nesne değişkenleri tavsiye edilir veyerel değişkenler farklı tanımlamak için.3.2.3 Kimlik ve eşitlikAynı anda bir sınıf exitieren Genellikle birden çok nesne. Takip ederekKod satırları sınıf Noktası iki nesne oluşturur:Nokta a1 = new Point ();Nokta a2 = new Point ();a1.verschiebe (1.0,2.5);a2.verschiebe (1.0,2.5);Bu satırları çalışma sonucu Şekil 3.7 'de gösterilmiştir.Aynı şeyi Koordinaten.Wir iki nesne vardırIki nesne eşit, ama aynı değildir.Aşağıdaki satırları aksine, sadece bir nesne oluşturulur. Ancak,Bu nesne başvurusu iki değişken vardır.
Nokta b1 = new Point ();Nokta b2 = b 1;b1.verschiebe (1.0,2.5);b2.verschiebe (1.0,2.5);Bu talimatları sonucu Şekil 3.8 'de gösterilmiştir.Her iki değişken, biz aynı nesneyi konuşun. Bu nedenle, tarafındantalimatları, iki kez ertelenen aynı noktada. Biz demek ki ikib1 ve b2 başvurulan ya da kısa bir süre Objekte2 aynı b1 vardırve b2 aynıdır.Yukarıdaki rakamlar aşağıdaki özellikleri göstermektedirDaha önce Bölüm 1.3.3 de tartıştık Nesne:Identity (kimlik): Bir nesnenin değişmeyen kimliği gereğidir,Bu, yeni operatör tarafından yaratılışı almasıgörülemeyebilir. Eğer, örneğin, new Point ()iki kez, farklı iki nesne olsun yürütürKimlikler. Onun kimliği hakkında nesne başvuruda bulunabilir,Bu yüzden ona bir mesaj gönderin. Basit bir kimlik olabilirbellekte nesnenin adresi olarak düşündüm. Ama bu birkimlik korunmuş olduğu, sadece bir basitleştirme, zamanBiz aynı nesne çoğul konuşmak 2Meist özelliği "aynı" olmasına rağmenaçıkça bir nesneyi sadece ilgili olduğunu ifade etti.1803.2 sınıf ve örnekleri2.0 5.0Nesnex yrefrefb1b2Şekil 3.8: Birden fazla değişken tarafından başvurulan aynı nesneyeÖrneğin adres değişiklikleri, içinde nesne hareketÇöp toplama kenarında Bellek optimizasyonu (hangi) Artık erişilebilir nesneler belleği serbest. En azındangeçerlidir: Eğer aynı alan için çok sayıda başvurugelin, başvuruda bulanan nesnelerin aynıdır. Osadece bir nesne içerir - Şekil 3.8 bkz.Devlet (state): Devlet denWerten değişkenleri oluşurBirlikte nesne. Genellikle yeni değer verilerek birnesne değişkenleri olarak değiştirildi. Iki nesne eşit (eşit)aynı devlet (ve aynı davranışı ifade zamanaynı sınıf tarafından) var. Nesneler de eğer eşit olabiliraynı değillerdir - Şekil 3.7 görmek, o zaman kopyalarıdırbirbirinden. Aynı nesnelerin Devletleri bağımsız olabilirBirbirinden değiştirilmesi, eşitlik kaybolur. Kimlikdevlet değişiklikler kaybettiği olamaz.Davranış (davranış): Bir nesnenin davranışını nasıl, ne bir mesaj alırken nesne davranırkarşılık gelen yöntemini çağıran nesne yapar. One yapılır bağlıdır• Mesajı, bu nedenle birlikte yöntem adıMevcut parametreler,• adı verilen yöntemi (daha doğrusu, bu uygulamaYöntem ya da soyut bir fikir)• ve nesnenin durumunu.
Iki nesne aynı davranışı olduğunda aynı mesajve aynı durumda aynı şeyi (ve bu özelliğiolası tüm mesajları ve koşulları) için geçerli. DavranışBir nesnenin, nesnenin sınıfı - özelsınıfta yöntemi tanımları ile - tanımlanır. Iki nesneAynı sınıfı her zaman aynı davranışı olacaktır. Ama aynı zamandaFarklı sınıfların iki nesne aynı davranışı olabilirvar. Göreceğimiz gibi, nesne yönelimli olupOldukça önemli bir davranış etkileri Programlama.Bu sürece, başka bir nesne gibi davranırBir mesaj, nesne anlayan bir sınırlıdır;diğer nesne ilave mesajları anlamak olabilir.Iki ilişkisel operatörler "==" ve "! =" Iki karşılaştırEşitlik türleri hakkında temel değerleri - Bölüm 2.2.2 bakın. Uygulamalınesneler (başvuru türleri yani örnekleri) için, onlar karşılaştırmakAncak, kimlik değil, eşitlik nesneler. Örneğin, teslimb1 == b2 (Şekil 3.8) bir sonucu olarak doğrudur, ama a1 == a2 (Şekil3.7) yanlış döndürür.(Örneğin, Java sistemi tarafından tanımlanan her sınıf içindeString), bu sınıfın bir nesnenin, yöntemini eşit bulmakeşitlik için başka bir nesne ile karşılaştırır. Karşılaştırma yöntemlerieşitlik için, kendilerini kendi sınıflarında gerekirtanımlamak - Bölüm 3.4.3 bakın.Eşitlik ve kimlik arasındaki fark önemlidir veBu iki terimin karışıklık ortak bir acemi hatadırdar bize bir örnek verebiliriz.String s = "Sonuç =" + (1 + 1);Dize t = "result = 2";If (s == t) / / yanlışSystem.out.println (s.equals (t)) / / trueDeğişken s dize, çalışma zamanında hesaplanır ikenbir değişmez olarak t tanımlanır. Çünkü onların farklı kökenliBu iki dizeleri aynı ama eşit değildir. Sonuç olarak== False sonuç olarak döndürür s, t, ama s.equals (t) doğru olarak değerlendirilir.Dikkatsizlik ya da bilgisizlik kolayca rağmen, s == t yazabilirsinizEğer eşitlik için dizeleri karşılaştırmak istiyorsanız, ve harikalaro zaman neden aynı değillerdir. Sadece dizeleri olmalıdırher zaman kullanarak asla bunları karşılaştırmak eşittir "==".1823.2 sınıf ve örnekleriListeleme 3.9: kurucu tarafından başlatmapublic class Nokta {Özel int x;Özel int y;kamu Nokta (int InitX, çift inity) {x = InitX;y = inity;}...}3.2.4 Bağlam ve BaşlatmaYeni nesneleri işlenen olarak, yeni operatör tarafından oluşturulanoluşturmak için nesne sınıfı yok. Örneğin, üretirnew Point () sınıfı Point bir nesne döndürür. Bu sadece bir parçasıdırgerçeği. Önemli bir soru nesne değişkenleri başlatma ilgilidir.Doğrudan Listeleme ve beyanı da başlatma3.5 ve 3.6 sadece çok basit durumlarda mümkündür, çünkü sınıfın, çevre ile ilgili herhangi bir bilgi oluşturmak için nesne olduğunesnesi kullanılmalıdır. Yani her yeni oluşturulan noktasıkoordinat sisteminin orijini olması beklenen bir şey değildirhaklı bir varsayım.Bu sorun, kurucular tarafından çözüldü. Listeleme 3.9 tanımlargibi değerler ile başlatma gerçekleştiren bir kurucuresmi parametreler mevcuttur. Bu nesnenin noktada yeni bir varyant, yeni bir Point (1.3,2.7) tarafından üretilen eğer başlangıç noktasıkoordinatları 1.3 ve 2.7 olarak yatırılmış olmalıdır. Var yeni işlenennesne türünün yanındaki ve güncel parametrelerini oOluşturucu iletilir. Bu yapıcı arama eşdeğerdirbir yöntemini çağırarak benzer. Farklı yöntemler gibidirKurucular, ancak nesne oluşturma sırasında çağrılan, hiç deZaten başlatılmış bir nesne. Sözdizimsel farklı kurucularhiçbir sonuç türü belirtilen bu yöntemve sınıf olarak ismini karşılar. Yapıcı gövdesindebir yöntem gövdesinde olduğu gibi temelde aynı olabilir.
Hatta sınıfların bir kurucu olmadan örnekleri oluşturulur.Herhangi bir yapıcı tanımlanmışsa, aşağıdaki otomatik olarak varsayılan olarakHerhangi bir parametre ile yapıcı madde olmadığı kabul edilir:public class name () {}Varsayılan kurucu kullanarak, hariç bütün nokta-türevleri olannew Point () ile mümkün Listeleme 3.9, o üreten bir nesne döndürür.Listeleme 3.9 'da nokta varyant buna izin vermez, çünkü sadeceyapıcı mevcut iki parametre vardır.Bir sınıf birkaç yapıcı olabilir. Örneğinbiz Listeleme 3.9 için aşağıdaki Kurucular ekleyebilirsiniz:kamu Point () {public Nokta (Point p) {x = 0.0, x = p.x;y = 0.0, y = p.y;}}Böylece yürütme () yeni bir nokta aynı sonucu sağlaryeni bir Point (0.0,0.0), ve yeni nokta (p) bir kopyasını döndürürbir nokta s. Derleyici parametre sayısı esas alınarak kararve yeni terim yapıcı parametre tiplerikullanılır.Genellikle farklı şeyler için ise aynı isimde, aşırı konuşmave derleyici bir seçim parametrelerini dayanmaktadıruygun olmalıdır. Java'da, kurucular sadece fazla ücret ama olamazve yöntemleri. Bu nedenle mümkün birkaç yöntem aynı olduğunuİsimler, eğer sayı veya tür yöntemleriresmi parametreleri birbirinden farklıdır.İki 3.9 Markalar dönüşebilir Listeleme eklendiaşağıdaki gibi kısa tanımlar:kamu Point () {public Nokta (Point p) {Bu (0.0,0.0), bu (p.x, p.y);}}Bu örneklerde, bu çok özel bir anlamı vardır: AçıklamaBu (...) aynı sınıfta başka bir kurucu çağırır.Iki parametre ile parametresiz yapıcı, kurucu haykırıyorgör. Çünkü kurucular evet bu çağrı için özel sözdizimi, gerekliNormal yöntemleri gibi çağrılabilir değildir. Bir deyim1843.2 sınıf ve örnekleriBu formun bir gövde içinde ilk ifadesi olarak (...) gerekirOluşturucu başka yerde kullanılabilir.Aynı etrafında arayarak bu (...) ile alabiliryapmanın bir (ideal özel) yolu nedir gerçekBaşlatma gerçekleştirir. Her yapıcı aynı yöntemini çağırır.Aşağıdaki örnek, (madde parçası olarak), bu seçeneğin yanındaki görüntülerBu kullanmanın tamamen farklı bir şekilde başlatmak için:kamu Point (double x, double y) {this.init (x, y);}private void init (double x, double y) {this.x = x;this.y = y;}İşte bu sahte değişken olarak kullanıldığı, bu nedenle benzer bir şeybir değişken bir değer atayamazsınız hangi. IçeriğiBu, şu anda olduğu nesneye bir referanstır veyer alır. Init yapıcı, (x, y) mesaj gövdesindeböylece başlatılmış olan yeni nesneye, bu gönderdi.Bunun yerine this.init (x, y) de kısaca init (x, y) olarak yazabilirsinizMesaj nesneye otomatik olarak gönderildiği sizeBaşka alıcı belirtilirse, an yer almaktadır.
basit bir yöntem çağrısı karşılık gelir.Resmi olarak yapıcı ve yöntemi init her ikisi deNesne değişkenleri noktası gibi parametreleri aynı adıyani resmi parametreleri Objektvariablen3 kapağı - bölümüne bakın3.2.2. Isimleri x ve y de resmi parametrelerdeğil nesne değişkenleri. Init yönteminde biz bunu kullanınhala this.x ve this.y denilen nesne değişkenleri, erişimBu değişken üzerinden erişilebilir, nesne değişkenleri çok.Çalışma süresi (yakında daha detaylı olarak düşünün bir kısıtlama ile AtŞu anda ve hangi nesne) olarak her zaman açıkBunun bir içeriğe sahiptir. Bir kurucu içinde, nesneBu başlatılıyor. Bir yöntem içinde, o nesne3 ° için özellikle resmi parametreleri veya yerel göre, nesne değişkenleri tavsiye edilmezDeğişkenler gizlemek. Bu örnekte sadece göstermek için bunu nasılHala bu şekilde gizli nesne değişkenlerini erişebilirsiniz.
hangi mesaj yöntemin yürütme gönderildiyapılan (iletinin alıcı gibi) vardır.Sözde değişken bu bir referans olarak saklamak için çoğunlukla kullanılırŞu anda olduğu nesne, güncel olarakParametreler için. Örneğin, ifadeNokta p = new nokta (this);(Yukarıda anlatılan bir parametre ile kurucu kullanarak)Şu anda, ve koyar noktasının bir kopyasıgelen değişken p kopyalayın.Bölüm 3.2.2 biz yöntem pfadlaenge bir örnek vartanımlanır. Bu örnek bölümde en yöntemleri aksine, nesne üzerinde herhangi bir yere bu yöntemi kullanır hangiYöntemidir. Ne de bir nesne değişkeni erişilirbu denilen bir yöntem. Bununla birlikte, bu yöntem olmalıdırErişimi olarak tanımlanan Sınıf noktası (bir varyantı) özelMesafe yöntem gereklidir. Gibi yöntemler pfadlaenge olabilirstatik değiştirici bu belirlemek için sağlanabilir ileBu gibi gerekli değildir:public static double pfadlaenge (Point [] ps) {...}Statik yöntemler bu tür kullanılamaz. Bizbir mesajı değil, üzerinde, statik yöntemleri çağrısınıf entsprchenden bir nesne göndermek, ancak tekSınıfa doğrudan mesaj gönderinçift l = Punkt.pfadlaenge (...);Sınıf nokta içinde biz, sınıf adını atlayabilirsinizNormal yöntemini çağırır sonuç bu yüzden, biz Bölüm 2 gözlenenbirkaç kez gördük.Statik yöntemler basitleştirilmesi için kullanılır. Bir ortak kullanımbir prosedür bu eski bu yana, ancak kaçınılmalıdırProgramlama tarzı öneriyor. Modern bir nesneye yönelik olarakTarzı Programlama, her zaman, böylece tekrar erişimStatik yöntemler uygun değildir.186
3.2 sınıf ve örnekleriÖnemli bir özel durum için, statik bir ihtiyaçYani ana yöntemi. Bu yöntem olmaksızın mümkün olmazdıBir Java programı çalıştırın. Bu yöntem (hariç gerekirFormal parametre) isimleri daha doğrusu şu şekilde tanımlanmalıdır:public static void main (String [] args) {... }Bu yöntemi içeren Sınıflar mümkün olup, hangi anlamına geliredebileceği tercüme sınıfta java ana sınıf adıylaYürütme getirin. Diğer tüm sınıflar yürütülebilir değildir.Yöntemleri ve nesne değişkenleri ek olarak ilan statik olarakolmak. Bu değişkenler değil örneklerini, daha sonra sınıfın kendisi vardırsınıf. Bu nedenle, değişkenler de sınıf değişkenleri denir. HerSınıf değişken sırasında sınıf nesne değişkenleri başına sadece bir kez varnesne başına bir kez mevcuttur. Bu fark ile ilgili yaparSınıf değişkenleri zor ve hata eğilimli. Özel durumlar dışında olmalıdırBen sınıf değişkenleri çok değil kullanın.3.2.5 SabitlerSınıf değişkenleri: Ancak, yukarıdaki kuralın önemli bir istisnası varbu her zaman aynı olması, statik ve kesin olarak ilan edilirOnlar bir nesne ya da sınıfa ait fark etmez değer şekildevardır. Örneğin, bu sabit değerleri isim verebilirsinizŞekilde tanıtılması:public static final çift PI = 3.14;Tüm program boyunca böyle, değişkenler olarakher zaman aynı değere sahip, gerçekten gerçek "değişken" değilDaha mantıklı DesWortes - Diewert değişiklik olamaz. BirBu nedenle biz de hazır içerecek şekilde sabitler bahseder. IçinIsimleri yazmak için normal değişkenler Farklılaşmagenellikle sadece büyük harflerle. Terminolojik sabitleri vartanımlı - sadece bildirilmemiş - çünkü onların değerleri ve son kezbelirlenecektir. Bu sabitleri kullanımı önerilebilir olduğunuBu programların okunabilirliği artırır çünkü. SüreEğer genel olarak normal değişkenler bildirmek gerekir, halka açıktırSabit tanımları genellikle yararlıdır. Sadece bizim örnekte olduğu gibi PI olanÖnceden tanımlanmış Matematik sınıfında, ancak maksimum doğruluk ile.Math.PI derken değeri doğrudan erişebilirsiniz
Listeleme 3.10: Bir Aufzähltyps örneğipublic class {EnumExampleenum mevsim {BAHAR, YAZ, SONBAHAR, KIŞ;public int değeri () {(this.ordinal dönüş) + 1;}}public static void main (String [] args) {System.out.println (Jahreszeiten.valueOf ("Yaz"));{: (Jahreszeiten.values () j mevsim) içinSystem.out.println (j + "=" + j.wert ());}}}Bir sınıf tanımı özel bir formu Aufzähltyps bir tanımı(Enum). Aufzähltypen yerde küçük bir kullanılabilirNesnelerin sabit miktarda gereklidir. Sınıf tanımı başlıyornesnelerin bir listesini anahtar kelime enum sabiti sonrasınıf tanımının geri kalanı izledi.Liste Aufzähltyp 03:10 de mevsim ile bir sınıf tanımlarsabit BAHAR, YAZ, SONBAHAR ve KIŞ dört örneğini.Önceden tanımlanmış metodu değerleri (), bir Aufzähltyps tüm nesneleri döndürürilişkili nesne için bir dize valuesOf (string)ve) (ordinal bir nesnenin atom numarasıdır. Nesneler bulunmaktadır0 ile tanımının Sipariş başlayarak ardışık olarak numaralandırılmalıdır.Bu sadece bir Aufzähltyps tüm elemanları üzerinde bir döngü olabilirolmak. Program şu çıktıyı üretir:YAZBAHAR = 1YAZ = 2= 3 GÜZKIŞ = 4Aufzähltypen sadece sabit nesneleri içerebilir bu yana, varBurada değil ayrıntı sınıf tanımı ilgili kısıtlamalar,alınır.Genel olarak, ortak bir sayısı sabit tür kullanımı, ya da çokmantıksal olarak ilgili sabitleri önlemek için, genellikle bu yanaBirden fazla şubesi kullanılabilir. Biz bölüm 3.3.2 de belirtildiği gibi1883.3 arayüzleri ve dinamik bağlamagöreceksiniz, oldukça eskimiş gibi birden fazla şubesi karşılamakprosedürel programlama tarzı. Bu avantaj, yerine daha modernDinamik bağlama gibi nesne yönelimli kavramları kullanarak -aşağıdaki bölüme bakın.3.3 arayüzleri ve dinamik bağlamaBölüm 3.1.3 biz her nesne birden çok arabirimi olan bahsettiolabilir. Ancak, gibi, bir sınıf tanımı sağlar, yani bölüm 3.2, görünürlük kontrol tanıtıldıancak kendi arayüzleri gereksinimlerine bağlı olarak. Java sağlarAyrı bir dil kavram olarak Arayüzü. Hakkında arayüzler keyfi olabilirkarmaşık arayüzü yapılar ve bu nedenle net ayrımlarını açıklamakBir nesne tabanlı program parçaları arasındaki tanıtmak. Ilkbiz arabirimleri belirtilen nasıl düşünüp araştırmakönemli bir teknik özellik olarak daha sonra dinamik bağlama,biz arayüzlerin etkin kullanımı için gerekli gerekir.Son olarak, ne arayüz yapıları ile anlaşmaolumlu, ve ne elde edebilirsiniz.Arabirim Açıklama için 3.3.1 ArayüzleriListeleme 3.11 ve Listeleme 03:12 basit arayüz örnekler vermekBelirtilen Sadece bir yöntem. İlk bakışta bir bakarArabirim neredeyse bir sınıf tanımı gibi tanımı, ancak içerdiğitam yöntemler olmayan yöntemler aslında sadece imzalar.Arayüzlerin açıklaması için bilmeniz gerekmeznasıl yöntemler iyice tanımlanmıştır. Şu an için, sadece o biliyorBelirli bir imza ile yöntemleri mevcuttur. Tüm yöntemlerstatik olarak her yerde görünür (yani halk) değil, bir arayüzü vardırkabul edilmeyecektir. Yine de açık olduğundan, kelime gerekkamu, statik, yazmak ve elbette yasak sahiptir değil. Öylebir yöntem imzası ile yalnız seçmek zor ya da imkansızneden bu yöntem kullanılır. Bu nedenle, açıklama kullanımıYöntemlerin açıklaması.Arabirimleri yöntem imzaları ek olarak sabitler gibi olabilirPI değişkenlerin tanımlandığını statik ve final
Listeleme 3.11: hareketli bir nesnenin Arayüzüortak arabirim Draggable {/ / Nesne sağa deltaX birimleri taşımak için/ / Ve (pozitif parametre için) Oden sonra birimleri deltaY için/ / Ya da solunda ve altında (negatif parametreler için)void move (çift deltaX, çift deltaY);}Listeleme 3.12: kökenli mesafe ölçüm bir nesnenin Arayüzüortak arabirim mesafe ölçümü {/ / Kaynak mesafe geri verdistanzZumUrsprung çift ();}(Ve dolaylı olarak kamu) ve bildirim doğrudan başlatılırolmak. Diğer değişkenler izin verilmez.Listeleme 3.13 Bu iki arayüzleri, bir sınıfın bir örneğini göstermektediruygulanmaktadır. Uygulanan arabirimleri, sınıf tanımı olmalıdırAnahtar kelime sonra, virgülle ayırarakuygulayan verilmiştir. Derleyici kontrolleri tüm olmadığınıKarşılık gelen arabirim yöntemi tanımlarında İmzalarsınıftır. Çünkü ihtiyaç Listeleme noktası 03:13 de sınıfYöntem ve arabirimleri gibi distanzZumUrsprung hareketKamu ve statik değil tanımlar. Buna ek olarak, aynı zamanda tabii ki olabilirek yöntemler ve değişkenler tanımlanır ya da beyan edilecek. Bir deArayüz tanımlı sabitler ancak bir kere de, gerekSınıf tanımlanmış olup, kolayca okumak için erişilebilir.Fonksiyon diyagramı ardından arasındaki ilişkiyi göstermektedirListeleme 3.13 sınıflar ve arayüzler:Hareketli mesafe ölçümüտրNoktaTüm yöntemlerden imzaları bu örneğe işaret edebilirBir arabirim koyun:1903.3 arayüzleri ve dinamik bağlamaListeleme 3.13: birden çok arabirimi uygulanmasıpublic class Nokta Gezer, mesafe ölçümü {uygularÖzel double x, y;kamu Nokta (int InitX, inity) {x = InitX;y = inity;}public void move (çift deltaX, çift deltaY) {x = x + deltaX;y = y + deltaY;}kamu çift distanzZumUrsprung () {dönüş Math.sqrt (x * x + y * y);}kamu çift mesafe (nokta) {çift dx = x - p.x;çift dy = y - p.y;dönüş Math.sqrt (dx * dx + dy * dy);}}ortak arabirim {AufFlaechevoid move (çift dX, çift dY);distanzZumUrsprung çift ();çift mesafe (Point p);}Yerine Taşınır noktası ve mesafe ölçümü sadece arayüzü iseAufFlaeche uygulanan, sonuç bu basit yapısı:AufFlaeche↑NoktaUygulamada, bu şekilde, ancak, ama değilListeleme 3.14 gibi. Ardından uzanır anahtar kelimeIçeriğini birlikte kavisli içeriğiyle arayüzleri isimleriParantezler arayüz oluşturur. Tıpkı yukarıda kas kitlesini
Listeleme 3.14: koordinat sisteminde bir nesnenin ArayüzüAufFlaeche {mesafe ölçümü, ortak arabirim Draggable genişletir/ / Nokta p mesafe hesaplamaçift mesafe (Point p);}tanım 03:14 üç yöntem Listeleme tanımı belirtir. EkAma aynı zamanda arabirimleri girmiş daha yapıya sahiptir:Biliyoruz ki iki arayüz AufFlaeche Taşınır veUzun mesafe ölçümü. Bu noktada Listeleme yapıldı varsayalım03:13 şöyle uygulanır:public class Nokta {AufFlaeche uygular...}Daha sonra arabirimini AufFlaeche nokta uygular, ancak sadecearayüzü Draggable ve mesafe ölçümü. Her4: türü noktasının Nesne bu nedenle en az dört arayüzleri olanÜç arayüzleri arayüzleri oluşur. En belirginArayüz onlar, herkes tarafından görülebilir içerik noktasına karşılık gelenAyrıca AufFlaeche yapıcı belirtilen yöntemlere ek olarak içerir.Aşağıdaki diyagram arayüzü yapısı gösterilmektedir:Hareketli mesafe ölçümüտրAufFlaeche↑NoktaHer arabirim başvuru türüne karşılık gelir. Birkaç olan bir nesneAynı arayüzü olduğu gibi birçok çeşidi vardır. DeğişkenMovable Type de yazın gelin bir nesne içerebilirNokta her bir örneği de Hareketli bir örneği olduğu içinolduğunu. Benzer şekilde, bir ki resmi bir parametre bir şekildemesafe ölçümü tip tip gerçek bir parametresi vardır4in bölüm 3.4 göreceğiz ki her sınıfta en az bir ek arayüzarabirimi belirtilen sınıf nesnesine karşılık geldiğidir.1923.3 arayüzleri ve dinamik bağlamaAufFlaeche geçmek, çünkü AufFlaeche her örneğiMesafe ölçümü örneği. Ancak, her örneği gerekirHareketli ile mesafe ölçümü örneği olabilir. Eğerbir alt yukarıda grafik bir yol (oklar boyunca) olarakbir üst düzey kutusuna, sonra biri olabilirBir değişken karşılık gelen alt türü örneğiyüksek sabit tip depolar.Bu özellik, bir nesnenin, aramalar çok tip var kibir polimorfizmi (Almanca, "çeşitlilik" ile ilgili). olanakları Ofpolimorfizminin, özellikle içeren polimorfizmi ile(Çünkü başka türde bir tip örneğinin her örneğiTip) da nesne yönelimli, alt polimorfizm denirSürekli icra Programlama. Ikinci dönemAslında gelen bu tür T bir alt tipi olarak her tip Uo (oklarla parça) U grafik oluşur iseT bir yol, bu durumda Örneğin U. T süpertür denen konumundadırnokta AufFlaeche bir alt tipi olduğu. Ama nokta aynı zamandaiyi mesafe ölçümü itibariyle hareketli bir alt tipi.Ayrıca AufFlaeche da Hareketli bir alt tipi vemesafe ölçüm. Tersine, Movable Type bir şemsiyeNokta ve AufFlaeche. Polimorfizminin kullanımı kolaylaştırmak içinaynı alt veya üst tip herhangi bir türüne ek olarakkendisi. Bireysel üstünde bir alt ve supertype noktasıdır. HerBir değişkenin türünün bir alt örneği değişken kullanılabilirsaklanır.Alt polimorfizminin avantajları, etkili olmazAynı arabirim birkaç farklı uygulamaları varsaorada. Listeleme Disk sınıf 3:15 olarak uygulanırArabirimi AufFlaeche gelin. Bir noktası farklıbir genişleme bir dilim olduğunu dairesel diskin yarıçapıayarlanır. Yöntemleri ve mesafe distanzZumUrsprungKalkış noktası arasındaki ya da önceden belirlenmiş uzaklığı hesaplamakdisk ve en yakın nokta. Bu nedenle bir geri 0.0 sağlamakköken veya belirli nokta disk açıksa. En azındanher şeyden daha disk detaylı olarak iki yöntem olunnoktasına karşılık gelen yöntemler. Disk ile birlikte SonuçlarıAşağıdaki grafik türünü göz önünde bulundurun - bu bir diyagram denirTipi ilişkileri:
Listeleme 3.15: arabirimleri Devamı uygulanmasıpublic class AufFlaeche disk {uygularÖzel double x, y, r;kamu disk (çift InitX, inity çift, çift yarıçapı) {x = InitX;y = inity;r = Math.abs (radius) / / negatif olamaz}public void move (çift deltaX, çift deltaY) {x = x + deltaX;y = y + deltaY;}kamu çift distanzZumUrsprung () {return (new Point (0.0, 0.0)) this.entfernung;}kamu çift mesafe (Point p) {Nokta q = yeni nokta (x, y);double d = q.entfernung (p);; - Math.max (r, 0.0 d) dönüş}}Hareketli mesafe ölçümüտրAufFlaecheրտZamanlama ayarıListeleme 3.16 biçimlilik kullanımında bir örnek göstermektedir.V parametre olarak türünde bir nesne yöntemi hareketHareketli erwartet.Mehr Eğer v üzerinde bu noktada gerekSadece belirtilen yöntem Taşınır de denir, çünkü bilmekolduğunu. Bir arama gerçek bir parametre her hareket gibitüründeki herhangi bir nesne, örneğin Hareketli kullanılabilir,noktası yazın veya disk, aynı zamanda diğer uygulanmasındanHareketli arayüzü, bilinmeyen olmakihtiyacı var. Benzer şekilde, gibDistanzAus biçimsel parametreleri1943.3 arayüzleri ve dinamik bağlamaListeleme 3.16: Arayüz kullanımı örneğipublic class {FlaechenTesterprivate static void move (Hareketli v) {v.verschiebe (1.5,2.5);}private static void gibDistanzAus (mesafe ölçümü d) {System.out.println (d.distanzZumUrsprung ());}public static void Testi (AufFlaeche f) {for (int i = 0; i <5; i + +) {hareket (f);gibDistanzAus (f);}}public static void main (String [] args) {çoğu (new Point (0.0, 0.0));en (yeni disk (0.0, 0.0, 2.1));}}hiçbir şey bu nesne hakkında bilinen bu yana mesafe ölçüm tipi,Bu distanzZumUrsprung bir yöntem verir gibi, ihtiyaç.Test yöntemi, type f AufFlaeche bir parametre gerektirirhareketli ve gibDistanzAus hem de bir argüman olarak f adlandırılan bu yanave AufFlaeche Hareketli bir alt tipi ve olmakgibDistanzAus edilir. Bir nesnenin ana çoğunda tiptedirGelin ve disk adı verilen bir tür. Bu yüzden sadece ihtiyaçfarklı nesneler üzerinde hesaplamalar yapmak için bir yöntemyürütmek için. Bu Programmieraufwand.Wie azaltır bizdaha sonra göreceksiniz, bu da bakım kolaylaştırır.3.3.2 Dinamik BağlamaListe gibDistanzAus 03:16 yöntemin daha yakından bakıldığındav.distanzZumUrsprung tarafından hangi yöntem sorunu () yükseltirBugüne kadar adı verilecek - nokta tanımlanan yöntem veyahatta belki de disk olanlar, ya da tamamen farklı. EşsizBu kadar cevap. GibDistanzAus kullanıldıktan sonra
distanzZumUrsprung adı verilen bir yöntem yapılabilirbir dahaki sefere aynı adı taşıyan başka. Duruma göre değişirresmi parametre d standları hangi nesneden. Aslında,genellikle göndererek sağlanan neden bu belirsizlik bir sebebiBir nesneye bir mesaj konuşmak ve bir arayarakYöntem. Biz bunu genel olarak çağırmak için yöntem biliyorumdeğil. Yöntem yapıldığı hakkında karar veriyornesnesi biz mesaj göndermek için. Nesnesi tarafından iseyeni nokta (...) olarak distanzZumUrsprung olduğu oluşturuluryeni disk (...) aracılığıyla oluşturur çalışıyorsa tanımlanan noktasonra cam olarak tanımlandı.Bu örnekte olduğu gibi, genellikle yöntem yürütülecek bu olurzaten derleyici tarafından belirlenir ve her zaman aynı değildir,ancak alıcı tarafından mesaj Farklı her zaman, bağlıolabilir. Yöntem yürütülecek eğer biri, dinamik bağlama konuşuyorçalışma zamanında örnekte olduğu gibi tespit ve statikDerleyici zaten yürütülecek yöntem biliyorsa, Kravat.Referans değişkenler (resmi parametreler) nesne yönelimli olupSadece bir tür daha fazla dil. Bu hangi şimdi kısaca içinTanımladığımız bir değişkenin türü aslında ilan türüdürdeğişkenlerin, değişken bildiriminde belirtilen tür, yaniolduğunu. Değişken dinamik tipi (halk dilinde de vardırsık sık da) gerçek ya da gerçek tipi adı verilen değişkenlerin içeriğinibağlıdır: dinamik tip sınıf karşılık, kendi gibiNesnenin örnek değişken oluşturuldu. Örneğin,her zaman gibDistanzAus biçimsel parametresi d ilan tipMesafe ölçümü. Eğer (...) point d yeni bir nesneoluşturuldu, sonra gelin d dinamik türüdür ve eğernesne yeni disk (...), sonra dilim tarafından oluşturuldu.Bir değişkenin belirtilen türüne sırasında her zaman aynı kalır, olabilirzaman içinde değişim dinamik yazın. Dinamik bağlama içindinamik türü her zaman kullanılır.Listeleme 3.17 dinamik bağlama nasıl kullanılabileceğini bir örnek gösterilmektedirolabilir. Arayüzü, değerlendirme için iki yöntem belirlerdeğerlendirme Üç tür uygulanmaktadır. YöntemPosta yoluyla bağlantı dinamik kullanılan test1 testi,resmi b parametresi gönderilebilir.1963.3 arayüzleri ve dinamik bağlamaListeleme 3.17: dinamik bağlama kullanarak örneği - tavsiye{Ortak arabirim değerlendirmegeçiş () void;Dize toString ();}public class {ödül değerlendirme uygularpublic void pass () {return true;}public String toString () {Return "fark ile geçti";}}Geçti {public class değerlendirme uygularpublic void pass () {return true;}public String toString () {"pass" return;}}başarısız public class {değerlendirme uygularpublic void pass () {return false;}public String toString () {"başarısız" return;}}public class Test1 {public static String testi (değerlendirme b) {String s = "test" + b.toString () + "";if (b.bestanden ())s dönüş + "Tebrikler!";başkas dönüş + "Belki bir dahaki sefere";}}Her görev dinamik bağlama ve koşullu ile yapılırTalimatları (özellikle tablolar anahtarı) çözülebilir. 3.18 gösterir Listeleme
Listeleme 3.18: Dinamik Cilt Önleme - önerilmezpublic class Test2 {public static final int ÖDÜL = 1;public static final int PASS = 2;public static final int NICHT_BESTANDEN = 5;public static String testi (int b) {String s = "test";String s = "Something Fläsch gitti.";switch (b) {ÖDÜL durum:s + = "ayrımı ile";PASSED durum:s + = "geçti";e = "Tebrikler!";break;NICHT_BESTANDEN durum:s + = "başarısız";e = "Belki bir dahaki sefere";break;}s + s + "" return;}}Test1 Listeleme 03:17 çözülmesi görevin daha kısa çözümolduğunu. Biraz programlama deneyimi ile, daha düşünmeden edemiyorÇözüm Listeleme 3.17 Listeleme olanlar 03:18 daha iyi olurdu. Ancak, bu birkesinlikle durumda. Bir yandan, arayüz ve sınıfları üzerindeGenel kullanım için tasarlanmış arayüz, uygulamak içinsadece test sınıf üretmek için bir araç olarak. Test yöntemiListeleme 3.17 olarak, Şekil 3.18 olanlar anlamlı olarak kısa, çünkü ana görevleridiğer sınıflar tarafından kabul edilecek. Eğer birGenişletilmiş Örneğin, bir bekleyebilirsiniz ki kod büyük bir kısmı03:17 eklenir Listeleme, Listeleme 3.18 ekleme göre daha kısadırİlk durumda, daha önceden var olan sınıflara çünkükullanılabilir. 03:18 kısa listenin avantaj olabilirTers çalışan programın geliştirilmesi sırasında.Hata Öte yandan, Listeleme 3.18 olarak çözüm de oldukça duyarlı:• anlamlı bir dize yoktur döndürülür zaman1, 2 veya 5 arama farklı bir argüman ile test edin. Ayrıca1983.3 arayüzleri ve dinamik bağlamavarsayılan ise: şube Bu durumlarda müdahale olur,hala ne daha uygun dize bilmiyorumonlar geri dönebilir. Bu sorun bir çözüm varzaten güvenli derleyici bu yana, bağlayıcı değil dynmaischem tarafından,sadece değerlendirme örneklerini çağırdı testiolduğunu. Ancak, bir emin olmalısınız argüman olarak hiç boşgeçirilir.• Listeleme 3.18 olarak kod bazı olanaklar nedeniyle, oldukça kompaktKod satırları kaydetmek için kullanıldı. Iki HakkındaAyrım ve olgular büyük oranda oluşanortak kod yürütülür. Ne yazık ki, bu ekonomiOkunabilirlik maliyeti. Biri olarak varsaymak gerekirgelecek program programın yanlış parçaları değiştirirve böylece yanlışlıkla değiştirilmesi. HerTek Liste 3.17 sınıf, ama anlamak çok daha kolayve böylece daha az hata eğilimli.Listeleme 03:18 programın • Çeşitli yönleriyle iç içe.Böylece, aynı switch deyimi atama önemsersonunda değerlendirme (ler) ve metin (ler). Böyle birBu, okumak için daha zor, çünkü sadece sorunluaynı zamanda, çünkü her iki yönü için ortak kontrol akışıkolayca program değişiklikleri ve küçük geliştirmeler ile kaybolurbüyük değişiklikler Bu nedenle büyük olasılıklaçizilebilir. Arayüzü, diğer taraftan bir mantıksal yapı belirtmeniz gerekirçok çeşitli yönleriyle iç içe böyle daha iyiönlenebilir. Bu, farklı bir ortama programı basitBir sınıf ekleyerek, örneğin genişletmek için yollarıNichtBeurteilt.Bu tür sorunlar için tipik bir örnek değil, görünürgenel olarak (özellikle birden fazla), birlikte program dalları ilesık sık. Özet olarak, hemen hemen bu dinamik bağlayıcıdırher zaman anahtar ifadelerin kullanılması daha iyi ya da karşılıklı birif ifadeleri iç içe. Bu tür talimatlar önceyazar, biri nasıl görev yerine düşünmelisinizdinamik bağlama çözebilir. Dinamik bağlayıcı yanı sıra sağlarBirden fazla program dalları için talimatlar.Bu durumda olduğu gibi, yol undWeise geliştirir öğretimi
Değerlendirme↑ տKatılan katılmamamışր ↑ տOrada ödül geçti olmasaydı↑ ↑ ↑ ↑ ↑U2 G4 S1 B3 N5Şekil 3.19: değerlendirmelerin uzmanlık tip diyagramve arayüzler bölünür, genellikle programın yapısına sahipve bakımı.Dinamik bağlama birden yürütülmesine dallanma nedeniylestatik Binden.Manchmal daha az verimli olduğu eineWinzigkeitBu nedenle bir dinamik bağlama bırakmak için cazip olduğunu. RağmenDinamik bağlama yürütme biraz daha etkilidirYani koşullu tarafından Anweisung.Wenn statik bağlayıcı anahtarıTalimatları aldım, size verimlilik toplamı muhtemelen varkaybetti. Dinamik bağlama konusunda Verimliliği hususlar olmalıdırBöylece temelde bir kenara bırakın.3.3.3 Uzmanlık ve ikameBölüm 3.3.1 'de gördüğümüz nasıl kullanımıPCI veri yolu ve alt ilişkiler kurmak için diyagramları tanıtmakolabilir. Tip diyagramları bir program yapısını belirlemek ve vardırbu nedenle büyük önem taşımaktadır. Programlama uygulama ihtiyacıSürekli bazı yapılar için tip diyagramları ve bizi inşave diğer yapılar karşısında entscheiden.Wir araçlara ihtiyaç duyarBir program için grafik ne kadar iyi bir tip görmek içinuygundur. Burada bahsetmek istiyorum bu tür araçlar.İki yakından ilgili araçlar anlayış varuzmanlık olarak ve kullanımında diyagramları türüGerçek dünyaya analojiler.Açıklamak için, Şekil 3.19 'tür grafik kullanın. OBurada kullanılan terimler ile olduğunu görmek kolaydırgerçek dünya, bu ürünlerin erişim ve Teilnahmebstätigun-can2003.3 arayüzleri ve dinamik bağlamagen oluşur. N5 ile S1 kısaltmalar tuwien de yaygındır"Yeterli değil" ile "çok iyi" kısaltması. Çünkü reel benzetmeDünya belli ki ne bu terimler için açıklamalar olduğunuvardır. Koşulları arasındaki ilişkiler açıktır:Bu bir alt bir supertype U tek bir ok gösterilirT, U ve T U özel bir varyantı ise bu nedenle bir uzmanlık olduğunuT. örnekte, genel kavram değerlendirilmesideğerlendirmelerin çok farklı olabilir. Özel bir şey(alınan hiçbir bölümü aksine) katıldı veGeçti daha da özeldir. Arasında daha da özel ayrımıBu B3 gibi özel notlar gibi değerlendirmeler, biz örnek ihtiyaçdeğil. Yukarıdan aşağıya doğru, grafik terimleri her zamandaha özel. Bazen bir-bir ilişki söz. ÖrneğinGeçti B3 tür bir değerlendirme ve Geçti olduğunuTür bir değerlendirme yer aldı. Daha genel bir tarifDiyagram türü uzmanlık yazın. Buna ek olarak, ayrıca, uygulanması gerekenBu, yöntemlerin imzaları en azından tüm alt türlerinisupertypes tarafından belirlenen gerekir.En azından erken tasarım aşamasında (Bölüm 1.6.1 bakınız) yokYöntemleri belirlenmiş türleri yoksa. Yine deHatta sadece uzmanlık temelinde bir grafik türü oluşturabilirsinizgerçek dünyaya benzetme olarak. Bu ihtiyatlı isedevam, yöntemlerin imzalar daha sonra muhtemelen birbirine uygun.Yoksa, bir şey gözden kaçan ve yapıları var. Uyum Bu arada, uzmanlık olabilir degerçek yaşamla mukayeseler birincil düşünce kalıbı ile bizher zaman tip diyagramları gelişiminde tutmak gerekir.Kolayca ayrıntılı şemalar yazmaya başlayın o olabilirçizer. Belki diyagram üzerinde türü için temel olduListe oluşturulması 03:17 kullanılır. Ancak, yazıyordudiyagram ihmal kod türlerini çok çünkügerekli değildir. Belki kodu yalnızca 03:17 Listeleme içindebir ara aşama temsil eder ve daha sonra başka türlü ekler. OŞu anda sadece biri gerekir: her ikisi de aynı anda doğru olabilirtürlerinin küçük bir bölümünü, ek türleri daha sonra gerekli olabilir.Bir gerçek dünyada uzmanlaşma ve konsantre tasarım olunEğer birinden her şeye başlamak için nispeten kolay, genişletmek içingörev çözmek için kesinlikle gerekli olarak daha geniş bir perspektif,gerekli olacaktır.
Uzmanlaşma ile ilgili bir diğer önemli kavramikame prensibi: Bir tip U olmadığını ve alt içintip U onun nesneleri her yerde kullanılırsa bir tür T, neredeTip T Nesneler beklenebilir. Bu yakından Ersetzbarkeitsprinzip biruzmanlık alanı olan bir özel durum T verknüpft.Wenn U, temsilyazın U her nesne daha sonra da T türünde bir nesnedir veAyrıca her tip U herhangi bir nesne kullanabilirsiniztek tip T. beklenen olduğu Uzmanlaşma ifade ile karşılaştırıldığındaErsetzbarkeitsprinzip ama daha yakın şartları. Ne zamanO zaman, U T bir uzmanlık olarak kabul olup olmadığı net değilErsetzbarkeitsprinzip net bir yanıt verir.Ersetzbarkeitsprinzip alt türü ilişkileri için önemli olan, çok doğrudan ifadeÖnemli: Eğer bir örneği ile bir program parçaSupertype iş, o zaman bu program aynı zamanda bir oynayacakBir alt fonksiyon örneği. Program parça hazırlanırkensadece supertype düşünmek gerekiyor ve hangi bilmek gerekmezOrada alt tipleri vardır. Ama alt tiplerinin tanıtılması için gerekliBiz Ersetzbarkeitsprinzip yerine olduğundan emin olun. Genelsonra birlikte türleri uygun. Örneğin, yöntem yazmakSınıfların bilmeden 03:16 Listeleme gibDistanzAusarabirimi mesafe ölçümü uygulamak. Ama yazarkenBu nokta ve disk gibi sınıfların biz uygun değil sadece varArayüz uygulamak değil, aynı zamanda emin olmak için deBelirtilen mesafe ölçüm yöntemi aslında distanzZumUrsprungBu arayüz açıklandığı gibi nasıl çalıştığını - Listeleme 3.12 bakın.Yöntem kökeni çok mesafe iade etmelidir.Bir grafik yapısı açıklanan tip tip hiyerarşisi denir.Bu olduğu için bu adı uygun değil seçildimutlaka gerekir, bir de hiyerarşik bir yapıya sahip değilÜst yazın aşağı ve yapı devam ediyordallı. Bölüm 3.3.1 biz hiyerarşik olmayan örnekler varYapıları görüldü. Bazen tek bir tür hiyerarşi yerine konuşuyorAyrıca bir miras hiyerarşisinin. Bu ad miras geliyornesneye yönelik dillerde biz Bölüm 3.4 öğretilenolmak. Ne yazık ki, bu terim genellikle yanlış anlaşılır:Baba AnneտրÇocuk202
3.4 KalıtımBu şema hiçbir türü veya miras hiyerarşisi gösterir, çünkü çocukanne ve babanın bir uzmanlık olamaz. Miras kavramıBu bağlamda, hiçbir şey gerçeği ile ilgisi çocuklarınebeveynleri soyundan. Göre tip çocuğun bir nesne,gerçek dünyadan deneyim, eş zamanlı olmayan bir kişiAnne ve baba kendini olabilir. Uzmanlık veErsetzbarkeitsprinzip birer beklenebilir. Bu tür diyagramlartipleri, nesneler korelasyon her zaman ayarlayın.Aşağıdaki iki şekil hala net hangi bir tür ya da yapmak gerekirVeraset hiyerarşi olmalı ve ne değildir:Tek hücreli hayvan↑ ↑Memeli dinozor↑ ↑Kuş kediSoldaki hiyerarşisinin evrimsel gelişme gösterirKuş dar için dinozor üzerinde protozoa. Bu, bir tür veya miras hiyerarşisi değilbir kuş aynı anda dinozorlar yok ve protozoa çünküolabilir. Önemli değil bir kuş ya da genetikDinozor ve enfekte protozoa. Tüm bireysel öğrenme ile bir program birimi,kolu dinozorlar ve kuşlar vardır olabilir boğulmuş olabilir.
Sağ tarafta Hiyerarşi Öte yandan temsil, bir tür veya miras hiyerarşisi varbiz her kedi bir memeli olduğunu biliyorum, çünkü birMemeli bir hayvandır. Tüm hayvanlar kolları bir program birimiolabilir elbette, tüm memeliler ve kediler işleyebilir.3.4 KalıtımEn ünlü ve de en sık yanlış anlaşılan kavramlardan birinesne yönelimli programlama miras. Obaşka bir sınıftan türetilmiş bir sınıftır. Hatta miras yoluylabirlikte benzer tür hiyerarşileri oluşturabilirsinizArabirimler Bölüm 3.3 gördük. Buna ek olarak, uygunbaşka bir sınıfta tanımlanan yöntemlere mirasSınıf çok yöntemleri miras, devralmaya. Bu programlama deneyimi bir sürü alırGenellikle arasında yapılan çatışma anaiyi tip hiyerarşileri ve yöntemlerin verimlerinin mirasçıları kurulması.
Başarılı bir türetilmiş sınıf olarak B3: Listeleme 3.20Geçti {public class değerlendirme uygularpublic void pass () {return true;}public String toString () {"pass" return;}}Geçti {public class B3 genişletirpublic String toString () {adil \ "geçti" "\ ile" return;}public int toInt () {3 dönmek;}}Sınıfların 3.4.1 türetilmesiVeraset anlamak kolay bir örnektir. Listeleme 03:20değerlendirme ile, sınıf B3 türetilmiştir GeçtiListeleme 3.17 alınmıştır. Sınıf definiert5 Geçişiki yöntem ve toString vardı. Çünkü mirasMadde geçti B3 bu iki yöntem miras uzanır.Ancak, hatta bir B3 aynı imza ile toString yöntemi tanımlanmışOlarak geçti. B3 miras yöntemi ile GeçtiB3 toString geçersiz aynı yöntemi ile tanımlanır.Ayrıca, yöntem Pass, toInt B3 tanımlıoluşmaz. Sınıf B3 her örneği toString varve aynı zamanda B3 tanımlanan ve toInt yöntemi geçtiOlarak in tanımlanan Geçti Ayrıca B3 bir alt tipi olmasıdırGeçirilir. Türetilmiş sınıf (denir, çünkü bu mümküntemel sınıf yöntemleri mirasçıları tarafından aynı zamanda alt sınıfı) (yanisınıf en azından) olarak da adlandırılan üst sınıf, türetilen5man da geçti diyor vurgulamak için iki yöntem uygularYöntemleri vücutta Tabloların mevcuttur, bu nedenle aslında yöntemleriIlan ve tanımlanır Sadece bu değil.2043.4 KalıtımListeleme 3.21: Bir dilim - Listeleme 3.15 - türetilmiş sınıfpublic class {color diski uzanırRGB kodu olarak diskin özel r uzun / / renkkamu renkli disk (çift InitX, çift inity,Çift yarıçapı, int farbeRGB) {super (InitX, inity, yarıçap);r = farbeRGB;}public int renk () {r return;} / / OK/ / Kamu çift mesafe (Point p) {/ / Dönüş (new Point (x, y)) uzaklık (p).;/ /} / / Sözdizimi hatası: x ve y görünmez!}lüks belirtilen belirtilen tüm yöntemleri. BuArabirimleri uygulama sınıflarının türetme benzer saygı(Olmalarının haricinde herhangi bir sınıf, yalnızca bir başka sınıfından türetilen bu) 'dir. Bu Şekil 3.19 'da diyagram parçası olarak B3 yazabilirsinizanlamak ve N5 S1 S1 ile analog tanımlanabilirN5 ve başarısız bir ödül elde edilir.Listeleme 3.21 olarak miras örnek nesne değişkenlerini nasıl başa gösterirve kurucular. Sınıf değişkenleri renkli disk mirasdisk ve yöntemleri. Göstermek için Beyantam olarak nasıl olduğunu renkli dilim bir nesne değişkeni r,Disk değişken. Hiçbir çatışma iki nedeni bu sonuçları elde etmek için:Bir yandan, r disk özel bir ilan (ve r gibidirrenk tekerleği, ama burada değil) ve bu nedenle dışdiskten görünmez. Renkli disk, x, y ver disk erişilebilir değil. Öte yandan, bir alt yapabilirsinizOnlar üst sınıfla aynı adı paylaşan rağmen, değişken bildirmemiras ve görünür değişkenleri bu durumda da maske varBu değişkenler arasında üst sınıfın sınıf ilan etti. Herhangi bir şekilde kullanımır renk tekerleği için renk tekerlek anlamına gelirdeğişken ilan etti. X ve y görünmez olduğu için, uzaklık olabilirdeğil (Liste uncommented 03:21 gibi) üzerine yazılır.
Geçersiz kılmak için Listeleme 03:21 dan / / atlanması mesafe içinbiz, x ve y renkli disk görünür ihtiyaçBöyle bir disk değişkenleri bildirerek:; double x, y, r korumalıDeğişkenler olarak türetilmiş sınıfları görünür korumalı ilan etti.Ancak, değişkenlere doğrudan erişim olduğu üst sınıftakiilan, kötü bir programlama uygulama temsil etmektir edildiBu nedenle mümkün werden.6 ise, kaçınılmalıdırYapıcılar değişken başlatılması için birincil derecede etkilenir.Elbette gerekli olduğunu kurucular için erişimDeğişkenler da özel var. Çünkü sınırlamalarıDiskin renk yapıcı görünürlüğüÜst sınıf değişkenleri kendisi başlatılamadı miras. ÖzelYapıcı ilk satırında (...) Süper deyim aramalarıÜst sınıf yapıcısı başlatılırken amacı. Böyle birBildirimi, (...) olarak yerine bu olabilir - bölümüne bakın3.2.4 - sadece bir kurucu gövdesinde ilk ifadesi olarak. Oluşabilir Sınıf herhangi bir durumda, ilk kurucuidam, ve ancak ondan sonra gövdesinde diğer durumlardırOluşturucu yürütülecek. Eğer süper (...) ile bir kurucuHatta bu (...) ile), (örtülü olarak süper başlamadan önce denirgerçek kurucu yürütür. B3 listesinde haykırıyor03:20 örtülü bir varsayılan kurucu B3 () de olurÜst sınıf geçti mevcut örtülü bir varsayılan kurucu ()auf.7 bu yapıcı (...) ile başlıyorsa, başka bir şeydirAynı sınıfta yapıcı yürütüldüğünde, başında bir de birSınıf yapıcısı yürütür. Bir sınıfın her örneği bu nedenleüst tip hiyerarşisinde alt giderek başlatılıyor.6Bjarne Stroustrup, C + + yaratıcısı ve böylece tüm kesinlikle yazılı ve yaratıcılarından biriJava, kullanılmaya başlanması dahil nesne tabanlı programlama dilleribelirlenmiş korumalı C + + birkaç yıl önce yaptığı büyük hatalardan biri olarak. Tarafındanprogramcı için aksi açıkça tanımlanmış sorumlulukları korumalıProgramın bazı bölümlerini ihlal.7Default parametresiz yapıcı her zaman ve başka yalnızca mevcut olmasıOluşturucu tanımlanır. Disk üç parametre ile bir kurucu varve bu nedenle varsayılan kurucu. (...) Kurucu süper olurrenkli diskten ihmal, o) (süper dolaylı olarak parametresiz işlemi de birYoksa sınıf yapıcısı, ancak çağırın. Bu bir olurSözdizimi hataları meydana gelebilir. Aynı nedenle bir sözdizimi hatası olacaktı eğertanımlamak renk tekerleği bir yapıcı olmazdı.2063.4 KalıtımX ve y renk tekerleğinde görünür ve olacağını varsayalımmesafe (Listeleme 3.21 den / / Anabilim durchWeglassen) üzerine olacaktır.Da değişmiş olurdu dolaylı olarak bu gibi distanzZumUrsprungMesafe yöntemini çağırır. Rağmen distanzZumUrsprung içindeDisk, çünkü istiyorsunuz renkli disk içinde tanımlı değilHenüz renkli disk örneği Dinamik bağlamarenk tekerleğinde tanımlanan mesafe koşuları. Ne zamanArama statik olmayan yöntemleri her zaman dinamik bağlıdır.Genel olarak, miras aşağıdaki seçenekleri sunar:• üst sınıf tüm bildirilen veya tanımlanmış değişkenleri veOnlar yoksa Yöntemleri alt sınıf tarafından devralınanstatik değiştirici işaretlenir. Kalıtsal değişkenlerve yöntemleri alt tür örnekleri de mevcuttur, bu nedenlebeyan veya sınıfta tanımlanmış olsaydı gibi.• olarak tanımlanmış veya beyan özel değişkenler ve yöntemlerionlar sind.8 geçerli olsa da, alt sınıfta görünmezalt sınıf erişilemez gelen, ancak üst sınıf tarafındandevralınan yöntemleri erişebilirsiniz.Içinde alt sınıf görülebilir • ErerbteMethoden,Sınıfı üzerine yazılır. Bu alt sınıfta tanımlanmıştırOberklasse.9 aynı imza ile bir yöntem• alt sınıf üst sınıf genişletmek, bu nedenle ek değişkenlerve beyan ve yöntemleri tanımlar. Her beyannamealt sınıf bir değişken sınıf bağımsız uzanırkalıtsal değişkenlerin. Bir yöntem genişletilmiş bir tanımıüst sınıf sadece yöntemini geçersiz değilse.Yeni tanıtılan değişken bir alt sınıfı aynı • EğerKalıtsal bir değişken olarak adı, sonra miras değişkengizlenmiş. Alt sınıfında bu nedenle sadece sınıfta ilan edilirDeğişken görünür.8Auch değişkenler ve varsayılan görünürlüğü ile yöntemleri, alt sınıfta görünmezüst sınıf farklı bir dizine, bu yüzden başka bir paket tanımlanmışsaalt sınıf daha.Ancak daha az sınırlı 9 sınıfta yöntemin görünürlüğü,üst sınıf daha. Ayrıca sonuç türü Java sürüm 1.5 için izinsınıfta yöntem üst sınıfında sonuç türü bir alt tipi olduğu.Değiştirici ile son Versh yöntemler, üzerine olmamalıdır.
• yürütülecek bir nesneye bir mesaj gönderirkenYöntem her zaman dinamik bağlama ermittelt.10 üzerinden erişimÖte yandan, bir değişken hiçbir dinamik bağlayıcıdır.• Yeni bir nesne oluştururken her zaman ilk kurucuüst sınıf, alt sınıf yapıcısı yürütülür.Süper (...) kullanarak üst sınıf yapıcı olabilirparametreleri ve ileri belirler.Statik değişkenler ve yöntemleri, miras etkilenmezsınıflara kendilerini değil, sınıfların örneklerini çünküvardır. Benzer şekilde, kurucular ile. Sen, miras alınmazancak her sınıfta yeniden olmalıdır.3.4.2 Sınıflar karşı ArayüzlerBir Şekil 3.19 gibi Prensip olarak, kompleks tip hiyerarşileriarayüzler yardımı olmadan tek başına devralma yoluyla sadece kurmak.Ama bir sınırlama muzdarip: Java, bir sınıftasadece başka bir sınıftan türetilebilir. Her arabirim içinAncak, bazı diğer arabirimleri genişletebilir ve her bir sınıf birden fazla olabilirArayüzler uygulanması. Öte yandan, arayüzler dışında (sabitler) hiçbir degiskenler ve hiçbir yöntem tanımlanmıştır.Bir bakıma, miras daha güçlüdür: Eğer aynı iki sınıfUygulanan Arayüzü, her iki sınıfları aynı olduğunu ortaya çıkabilirAynı şekilde undWeise müssen.Wenn Yöntem iki sınıf tanımlamakAncak, ortak bir başka sınıf ihtiyaçlarını türetilmiştirYöntem sadece bir kez üst sınıfında tanımlanan ve iki olabilirAlt sınıfları bu yöntem devralır. Bu nedenle, türetmegenellikle tercih edilen arayüz kullanımı üzerinde sınıfları.
Ama bu sadece çalışır çocuklar aslında bir hiyerarşi formu iseBirden fazla ok diyagram türü her türlü Yani başkaTürü devam eder. Ek oklar, diğer supertypes için kullanılırBu arayüz kullanılmalıdır.Bir başka farklılık ile operatör uygulama olduğunusınıfların yeni örneklerini, oluşturulabilir itibaren ise10Davon son sınıflarda muaf Final yöntemleri ve tüm yöntemler - bakınBölüm 3.4.2. Hatta özel yöntemleri için dinamik bağlama çünkü bu gerekli değildirYöntem üzerine olamaz.2083.4 KalıtımArabirimler kendi ürettiği hiçbir örnekleridir. Bazen oluşturmaBu yöntemleri miras istediğiniz halde istenmeyen örneklerini.Bu amaçla böyle bir durumda onur gibi Java sınıfları varDeğiştiriciler ile Listeleme 03:22 soyut tanımlanmıştır. Böyle birSınıflar örneği oluşturulamaz. Bununla birlikte, başlatmak için varsoyut sınıflarda kurucular - en az birVarsayılan kurucu. Soyut sınıfların hiçbir örneği olduğundanBu sınıfların yöntemleri de soyut değiştirici ile sağlanabilirolmak. Bu tür soyut yöntemler uygulamaya, ama değilarabirimleri ilgili imzalar. Olmayan soyut sınıflar,uygun yöntemlerle gereken soyut sınıfların elde edilir. Tanımlamak Yanı sıra soyut sınıflardan gibi soyut değildirSınıflar tedavi. Bu nedenle soyut sınıfların bir ara geçiş formu temsilolmayan soyut sınıflar (örnekler oluşturulabilir, bunların arasındaolan) ve arayüzler (değişken bildirimleri ve tamYöntem tanımları) dar içerebilir.Bunun yerine soyut sınıfları ve yöntemleri kullanarak da değiştirici kullanabilirsinizson verilen, ki bu durumda farklı bir anlam daha olabilirdeğişkenler ve sabitler ile ilişkili, ve hemen hemenSoyut karşıtı dediği: son sınıftan itibaren olmayabilirBaşka bir sınıf türetilmiş olacak soyut bir sınıf sadece sürediğer sınıfları türetilmiştir faydalıdır. Son birYöntem, bir türetilmiş sınıf sınıf geçersiz olamazsüre olmayan bir soyut sınıf geçersiz bir soyut yöntemolmak. Bu açıktır ki soyut sınıflar ve yöntemlersoyut nihai ve hiç olmayan soyut yöntem olamazSınıflar oluşabilir. Bazı nesne tabanlı programlama stilleriEn sınıflar olarak nihai ya da soyutsınıflar için tasarlanmış olan gösterecek biçimde etiketlenmesiuzun ya da uzun olmamak. Diğer programlama stilleriBir varsayar çünkü Final sınıflar nadiren Ancak kullanılmasınıhemen hemen tüm sınıfları uzatılabilir vardır. Pratik açıdan bakıldığında, bu küçük fark yaratıyorJava ve benzeri sınıfların plansız deşarj olarakDiller pek oluşur. Olan soyut yöntemlerle karşılaştırıldığındaSadece istisnai durumlarda daha anlamlı Final yöntemleri.Listeleme 3.22 bir soyut ve nihai kullanımını gösterirÖrnek. Onlar çünkü sınıf farkı soyut gerekirsoyut yöntem toInt içerir. Biz DEKLA bir değişken x varsa
Listeleme 3.22: Özet ve son sınıflar ve yöntemlerkamu soyut sınıf {ödül değerlendirme uygularpublic static void geçiş () {return true;}public String toString () {Return "fark ile geçti";}kamu soyut int toInt ();}/ / Avusturya değişken: Bir iyi kalitedirpublic final class S1 {ödül uzanırpublic int toInt () {return 1;}}/ / İsviçre varyantı: 5 en yüksek kalitedirBeş {public class ödül genişletirpublic final int toInt () {5 dönmek;}}tured tip ayrım var, biz execute () x.toInt olabilir;mesajı örneğin, x dinamik tipine bağlıdırS1 veya beş, alıcı tarafından cevaplanacaktır. S1 ve ikiBeş de toInt tanımlamanız gerekir. ToString yöntemi S1 yapabilirsinizBeş ve üzerine, ama olmuyor. Ayrıca, ifadex.ToString () dinamik bağlama dinamik bağlıdırX tipi yürütülür. Gerekirse, aynı zamanda kolayca daha sonra iseMümkünse, geçersiz kılmak için yöntem. Bunun önemli olduğunu düşünüyorum yöntemiayrım geçirilen her zaman doğru döndürür ve sahip olduklarıBu nedenle son olarak işaretlenmiş. Bu alt geçti olabiliryanlışlıkla üzerine yazılmaz. Bir arama yapmak içinx.bestanden () yeterli statik bağlayıcıdır. Sınıfı son olarak S1hiçbir sınıf S1 türetilmiş şekilde tanımlanmıştır. Herhangi bir yöntemi çağırabilirsinizS1, bu sınıfında tanımlanan veya miras eğer olursa olsun bu, nihai olarak kabul edilironlar üzerine değil çünkü. Sınıf Beş, nihai değilancak bu sınıftaki yöntem toInt ve miras yöntemi2103.4 KalıtımListeleme 3.23: sınıflar ve arayüzler kombinasyonundaNot {ortak arabirimtoInt int ();}public class Not {B3 uygulayan geçti uzanır ... }kamu soyut sınıf ödül değerlendirme, not {uygular...}public class Test {public static void test (Not n) {System.out.println (n.toInt ());}}geçti. Bu, beş diğer sınıfları elde etmek mümkün olsa daAma toInt ve geçti üzerine olmamalıdır.Listeleme 3.23 birlikte sınıflar ve arayüzler birleştirmek nasıl gösterirolabilir. Türü hiyerarşisi içinde birçok çeşit Şekil 3.19 gibiÖrneğin, B3 ve ödül toInt bir yöntem var mıAma bütün bu tür ortak bir supertype yoktur. Böyle birortak supertype, biz dokunmatik arayüz tanıtabilirsiniz.Bu onur B3 ve bu arabirim olarak Sınıflar.Şimdi tüm bu örnekleri ile test yöntemi test etmek mümkünTürleri büyük bir yeniden yapılanma gerek kalmadan, gerçek parametre olarak gerçekleştirmekŞekil 3.19 'tür hiyerarşi gerekli olacaktır.Ek yapıda arayüz Bu şekilde, onurluBizim türü hiyerarşisi getirmek.Nesnesinden 3.4.3 aşağıBirlikte ele alındığında tüm Java sınıfları da, bir tür hiyerarşi formuObject sınıfının en iyi, biz olmayan bir sınıf miras steht.Wenn-Madde seti (yani herhangi bir üst sınıf belirtin), daha sonra sınıförtülü nesne türetilmiştir. Böylece, sınıfların herhangi bir sınıf, farklı bir sınıfa tam olarak bir ok türü şeması oluşturulmuşturhangi bir türetilmiştir. Buna tek istisna, sınıf nesne olduğunu
Bu kendisi demektir ki nesne doğrudan veya dolaylı herhangi bir sınıfelde edilen ve Nesne tüm yöntemleri miras olduğunu. Her nesne bir örneğidirnesnesinden ve Nesne belirtilen tüm yöntemleri vardır.Gerçekten de, yaygın nesne yöntemlerde kullanılan bazı tanımlanır.Bazıları biz daha yakından bakmak istiyorum.Listeleme 03:17 de arabiriminde Değerlendirme bir parametresiz varToString yöntemi dize açıklayan tanıttınesnesini döndürür türü değerlendirilmesi. Tüm sınıflarDeğerlendirme türetilen bu yöntem tanımlamanız gerekir. AslındaBu değerlendirme bu yöntem gerekli olmaz, Zaten Object toString uygun bir yöntem belirtilentanımlanır. Ancak, nesne toString tanımlanan şekilde yöntemRağmen her nesne için benzersiz ve farklı dizeiçerir, ancak esas olarak biraz anlamlı bir sayıdır döner.Uygulamada bu, genellikle toString geçersiz kılmak için gereklianlamlı bir dizge döner böylece.Bölüm 2.2.2 'biz birleştirme operatörü yerine getirilmiştir:Eğer ifade x + y tipi String olan iki işlenen biridir,sonra diğer işlenen bir dizeye dönüştürülürve iki dizeyi bir dize birleştirilir.Gibi tamsayılar gibi temel tipleri için kolayca tahmin edebilirsinizbir işlenen bir dizeye dönüştürülür yollarıolduğunu. Başvuru türleri için, bu kadar basit düşünemiyorum.Burada oyuna toString gelir: Eğer bir terimBir başvuru türü birleştirme operatörü, nesnetoString bir dizeye dönüştürülür arayarak.Örneğin, Liste 3:17 düzenlenen varString s = "test" + b.toString () + "";kısa ve çizgi izleyen aynı semantik ile yazmak:String s = "test" + b + "";Dinamik bağlama ile her zaman dinamik en doğru, birToString işlenen ilgili uygulama türüseçti. Böylece, tüm nesneler için bir dize dönüştürmeişleri, Object toString tanımlanmalıdır.Bölüm 3.2.3 biz biz kesinlikle kimlik arasındaki gördükve nesneleri eşitliği ayırmak gerekir. Biz de varBu olarak tanımlanır hangi nesne bilmek yöntemi eşittir:2123.4 Kalıtımpublic boolean {(Object o) eşittirBu dönüş == ki;}Nesne yöntemi tanımlanan bu kimliğin sadece karşılaştırır anlamına gelir.Birçok sınıflarda, eşitlik için farklı bir tanım mantıklıve bu yöntem uygun geçersiz olması gerekir. ÖrneğinBir dizesinde geçersiz kılınır eşittir.Şaşırtıcı, oldukça zor, makul bir eşittirHakkında yazmak için yolu. Sorun şu ki, parametre, nesne türü her zaman eşit olsa da biz sadece nesneleriÖrneğin, aynı tip karşılaştırmak istiyorsanızDizeleri ile Strings. Çözüm için biz eksiğiniz varDil oluşturur.3.24 gösterir Listeleme, biz zaten dikkate alan bazı sınıflarda eşit(Kayıtları 3.13, 3.15 ve 3.21) vardır, üzerine.Burada henüz dil yapıları tanıtıldı değil kullanın:Karşılaştırma türü, infix operatör instanceof sol belirlerIşlenen bir sağ işlenen referans türünün bir örneği olanve sonuç olarak bir boolean değer döndürür. ÖrneğinEğer sonuç olarak "o instanceof disk" true dönero dinamik türüne eşit ya da renkli cam diskolduğunu; renkli disk disk alt türüdür ve bu nedenledisk örneğinin renkli disk her örneği.Oyuncular: bir ilköğretim türü döküm aksine - bölümüne bakın2.2.3 - Bir döküm ilan tür bir başvuru yokBir ifade yazın. Örneğin, (disk) oo ilan türü, nesne diskte değiştirilir;böylece, bu nesnenin değişkenler x, y ve r mümkünnesnenin belirtilen türüne aynı sınıfta olduğu için, erişim,açıklamasında bulunuyor. Dökme olmadan değişkenleri, erişilemezonlar Object bilinmemektedir çünkü. Genel olarak, bir döküm üzerindeBir tek olası bir yazarsanız ifade dinamik tipA (A tipi kendisi de dahil olmak üzere) bir alt tipi olduğu. Bu olacakzamanında kontrol edilir. Durum böyle değil, orada birÇalışma zamanı hataları - Bölüm: 5 03:24 Bu tehlike Listeleme, daha önce tip karşılaştırmalar tarafından sağlanmıştır değilİfade uygun bir dinamik türü vardır.
Listeleme 3.24: geçersiz kılma eşittirpublic class Nokta Gezer, mesafe ölçümü {uygularÖzel double x, y;public boolean eşittir (Object o) {o instanceof Noktası dönüş& & X == ((Point) o) x & & y == ((Point) o) y..;}...}public class AufFlaeche disk {uygularÖzel double x, y, r;public boolean eşittir (Object o) {o instanceof Yıkama dönmek & & r == ((dilim) o). r& & X == ((dilim) o) x & & y == ((dilim) o) y..;}...}public class {color diski uzanırÖzel String s;public boolean eşittir (Object o) {o instanceof renkli disk dönüş& & R == ((renk tekerleği) o). RSuper.equals & & (o);}...}Super: tanımı renkli disk eşittir, bizbir ikilem ile karşı karşıya: Biz üst sınıf için erişim yetkiniz yoközel bir değişken ilan olarak. Bu değişkenler içinkarşılaştırmak için, bir disk tanımlanan bir yöntem aramak gerekir.Disk yöntemi eşittir tam olarak yapacağınıİhtiyacımız olan, ancak bu yöntem çağrısı değil, neBu renkli disk geçersiz çünkü. Sözde değişkensüper Çözüm oluşturur: süper biz bir yöntem seçebilirsinizBu alt sınıfta geçersiz olsa bile üst sınıf arama,böylece super.equals (o) olarak, yöntem eşit olduBir disk tanımlanan çalıştırır.Özellikle, başvuru türleri atmalarını kullanımı olarak kabul edilir çokhata eğilimli ve mümkünse kaçınılmalıdır. Bu örnekte,2143.4 KalıtımAncak, kolay bir alternatif yoktur. Biz birlikte yaşamak zorundatüm problemler için zarif bir çözüm değildir ve bizhata oranı ekstra bakım ile telafi edilmelidir.
Hepimizin içinde eşitse Liste Çözüm 03:24 çalışırGeçersiz kılmak için benzer şekilde Sınıflar. Biz yoksa,bir eşit bazen yanlış olsa bile, return falsegöre nesnelerin bile dinamik türleri eşleşmiyor.Biz renkli yöntemin yaklaşım ise disk değil üzerineBir karşılaştırma daha sonra renksiz cam bile olabilirbir renk çarkı doğru sonuç.Java, sınıflar nesnelerdir. Bu sınıf Sınıf örnekleridir.Nesne parametre daha az yöntem getClass bir referans tanımlanannesne geri sınıfına. Bunun yerine Listeleme 03:24 de kullanarakbiz de maç olabilecek bir alt türü ilişkisi instanceof"this.getClass () == o.getClass ()" türleri. Onay Biz bakın bu hata oranını azaltacaktırÖrnekleri bir karşılaştırma beri eşittir şifre üzerine yazfarklı sınıflar daha yanlış neden olacaktır. Ancak, olabilirBu sürüm aynı zamanda iki renkli karşılaştırma engellemezBir yöntemle Dilimleri renk yok olur miras.Her nesne hesaplanan parametreler olmadan hashCode yöntemAynı uygulanan özelliği ile int türünde sayısıNesneler aynı rakamlar da geri gelir. Bunun tersi, doğru değildirolduğunu, iki nesne, eşitsiz olmasına rağmen aynı hashCodeRakamlar sağlar. Bu özellikleri ile sayılar, örneğin,Kullanılan karma tabloları ile ilişkili - Bölüm 4.3.3. Rağmenhemen hemen tüm açıklamaları ve kılavuzları yere değil uyarmakyerine eşit olarak bazen deneyimsiz programcılar hashCodebirlikte iade sayıları karşılaştırarak bir.
çünkü çok farklı aynı nesnelerin, hiçbir koşulda yapmak için izinÇok ağır kaynaklanan hataları Sayılar ve neden olabilirbulunabilir.Ayrıca, oluşturmak için Object clone yöntemi halaBir nesnenin kopyalama, değil temizlemek için yöntem sonuçlandırmak, ilgili bellek alanı serbest bırakmadan önce nesneleri gerekli artıkve yöntemleri, haber notifyAll ve çeşitli beklemekEşzamanlı programlama senkronizasyon Varyasyonlarıihtiyaç vardır. Bu yöntemlerden bazıları, daha sonra da olacakBölümler kısa adresi.
Bir iletişim ortamı olarak 3.5 kaynak koduNesne tabanlı programlama büyük sunarÇarpanlara ayırma için tasarım seçenekleri. Bu deneyim bir sürü alıriyi ve kötü programlama yapıları ayırt edilebilir.Çalıştırır ve neredeyse sırf bir program, çok iyi ve halaondan ne beklendiğini yok. Kalite esas bağlıdırAyrıca program değiştirmek ve bakımı ne kadar kolay bağlıdır. IçindeBu bölümde, bazı kriterlerin gözden geçirin.Bir yönü değişkenlik ve bakımı açısından özellikleönemli: gelişme kişiler bir araya gerekirsağlamak için gerekli bilgileri iletişim ve değişimBir programın tüm parçaları da birbirine uygun. Bu takdirde, zorbu kişiler aynı yerde aynı anda değil. Parçaları gerekirbugün yazılmış kod, hatta on, yirmi ya da otuz içindeYıllar daha da geliştirilmesi ve bakımının yapılması. AnlayışıÇözüm yaklaşımı kayıp zaman uzun bir süre geçmesi olmayabilir. BirProgram daha sonra bu kod yazmak gerekli olan önemli bilgileriorada bulunan ve bulmak kolay. Programcılar için sağlaren önemli iletişim aracı dar kaynağı.3.5.1 adı, yorum ve temsilcilikleriProgramda Yorumlar her türlü bilgi taşıyıcısı gibidirvazgeçilmez. Önce, bir ucu, acemi programcılar genellikleSitemizde yayınlanan programda olur memnun, her şeyanlaşılmalıdır. Dahil birçok programlama ders kitapları (Bu notların kullanılması) okuyucularına yorum ilginç bir deProgram puan nota ve eğitimsiz bir programcılar içinbasit bir algoritma bir program veya son inşa. Açıklamak Acemi programcılar mecbur etmek için bu stili taklit. Uygulamada,Ancak, bu tür bir yorum, çünkü çoğu zaman işe yaramaz ve hatta zahmetli olankural geliştirme yer alan insan bir acemi artık çoktarafından ve şartları büyük, anlamsız yorumlardırdeli olmak. Bu kapsam adresi, ama değilYorum kalitesi. Ne açıklayan İyi yorumprogram kodu olmayan bir bakışta deneyimli bir programcıokuma ya da normalde değil, anlamak için olabilirProgram bilmesi gerekir.216Bir iletişim ortamı olarak 3.5 kaynak koduAyrıca sınıflar, yöntem ve değişken adlarını bir eğitim sağlamakProgramcılar çok fazla bilgi ve bu nedenle maç için seçilirolmak. İsimler üzerinde gerçek dünya ve hareket bir benzerlik ortaya koymaksezgisel düzeyde. Sezgisel olarak açık olan bir şey, sana ihtiyacı var artıkyorumlar yorumlar açıklamak için ya da en azındanbasit. İsimler yorum desteklemek için kullanılır. Kötü seçilmişİsimler kolayca programın yanlış anlaşılmasına bir yanlış sezgi yolve son olarak da uygun değil Fehlern.Wenn içinYer adları, bu anlamsız bir isim seçmek daha iyi olurbiri olarak bu yanlış anlaşılabilir.Tip, aynı zamanda bilgi alma sadeceBu olmadığı bir programda, büyük önem taşımaktadırkabul edilebilir tek bir kişi büyük her bir detay olduğunu,kaynak kod satırları binlerce ya da milyonlarca sık sık yüzbilir. İyi bir programın tam olarak bilgileri içeren birihtiyaçlarını tam noktada nerede beklersiniz.Çarpanlara önemli bir rol oynar. Iyi çarpanlarına içindeProgram kötü çarpanlara ayırma ile, hızlı bir şekilde yol bulmakiyi yorumlar rağmen bilgi zor bulabilirsiniz.Biz ayrım kriterleri ile, Bölüm 3.5.2 de olacakiyi ve kötü factorizations arasında anlaşma. ÖnceHem de tüm programın çarpanlarına yol: Biz farklı bir yönünü eleolmak, aynı zamanda ne etrafında yapılandırılmış olmalıdır gerekirkendi yollarını. Bir süre sonra nerede bilmek zorundaYorumlar belirli bilgi almak için bakmak gerekir.Bilgi, arayüzler arıyorsanız dikkat edilecek noktalarProgram bölümleri arasında. Java, tanımlar ve bildirilerdesınıfları, arabirimleri, yöntemleri, yapıları, ve nesne değişkenleri.Genellikle direkt olarak ön veya arka yorum yazabilirkısa tanımları ve bildirimleri ile gövde içinde çok başında,bazen bundan sonra. Aşağıdaki bilgiler yorum olmalıdıryer:Sınıflar ve Arayüz: Bu noktada genel bilgi arıyorsanızuygun bir türü. Yorum tarifAmaç ve bu tür nesnelerin kaba yapısı. Özelliklerkullanım renkte görünüyor olmalı.Yöntem ve kurucular: Burada tek tüm bilgileri bekliyoruygun bir mesaj göndermek veya ne zaman
Yeni bir nesne oluşturma. Bu adı ve varsabağlam açık değildir, kısaca ne açıklanmalıdırParametreler anlamı vardır ve altında hangi şartlardaBir mesaj veya bir nesne göndermek ne argümanlaryöntem veya yapıcı kılan, üretebilirve olası bir sonuç değeri yapar.Nesne Değişkenler: Bu açık adı ve içeriği değilseamacı hakkında kısa bir açıklama yararlı olduğunu gösterir. Herşeyden öncedeğişkenlerin özellikleri için açıklanan içerik olmasıNesnenin tutarlılık gereklidir.(Örneğin gibi sözdizimi anlamak kolaydır BilgilerÜst sınıf, parametreler, vb türleri), yorumlar olmamalıtekrarlanır. Ancak, sizin için kullandığınız önemli bilgilerdirve bir nesnenin oluşturulması gerekir - o kadar çok içİşler. Özel birimler yazısına yapılan yorumlar bu nedenle daha azgörünür ve tüm birimlere kullanılabilir daha önemlidir.Listeleme 03:25 Bir sınıfta bir yorum örneğidir. Tekneleriyapıcı ve yöntemleri göstermek için kaldırıldıimzalar ve yorumlar bilgi verilenBu sınıf ve kullanımı bir nesne üretmek için yeterli.Tam olarak bu amaçla, bir çok faydalı yorumlar kullanın.Daha önce Bölüm 1.5.4 gördüğümüz gibi, yorum yapabilirteminat olarak anlaşılmalıdır. Temsilcilikler koşulları tarifBu karşılanmalıdır. Genel olarak, ayırtgösterimleri değil, yorum arasındaki sadece daha fazlaAçıklamalar verin. Biz almak zorunda olduğu her okuyucuBir garanti anlar ve onu kullanır gibi yorum. Gibikötü seçilmiş adı da yanlış veya açıklayıcı yanlış olabilirYorum hatalara yol.Yorum arabirimleri nesne olarak güvence kabul edilebilirAyrıca aşağıdaki kategoriye ayrılır:Önkoşul: Bu yöntemler ve kurucular koşulları vardır,Bu uygulama daha önce karşılanmalıdır. En gerektirirbelirli özelliklere sahip argümanlar. Bu,Basitleştirilmiş yöntem ve kurucular uygulanması. Örneğinbiz Listeleme 3.25 olarak için yarıçapı sorabilirsiniz ki218Bir iletişim ortamı olarak 3.5 kaynak koduListeleme 3.25: Bir sınıfta Yorumlar - listeleme 03:15 bakın/ / Bir disk üzerinde dairesel iki boyutlu bir nesnedir/ / A yüzey. Yüzeyde hareket ettirilebilir.public class AufFlaeche disk {uygularÖzel double x, y, / / iki koordinatlarını (Kartezyen)diskin özel çift r / / negatif yarıçapı/ / Diskin merkezi başlangıçta üretilmektedir/ / Kartezyen koordinatları "InitX" ve "inity"./ / "Radius" mutlak değeri diskin yarıçapını belirler.kamu disk (çift InitX, inity çift, çift yarıçapı) {...}/ / DeltaX birim alana pencere Taşı/ / Sağ ve yukarı deltaY birimleri./ / Negatif parametre değerleri bir yönelmesine neden/ / Veya aşağı Sol.public void move (çift deltaX, çift deltaY) {...}/ / Koordinat sisteminin kökeni olan mesafeyi belirleme/ / Disk üzerindeki en yakın nokta için.Disk kökenli üstünde ise / / Sonuç 0.0.kamu çift distanzZumUrsprung () {...}/ / En yakın nokta p mesafe belirlemeDisk üzerindeki / / en yakın nokta.P disk açıkken / / Sonuç 0.0.kamu çift mesafe (Point p) {...}}Oluşturucu böylece hesaplama, negatif olmayan bir değerdirolmadan yapıcı gövdesinde mutlak değerolabilir. Yöntem ve kurucular daha kolay kullanılırhiç ya da az ön koşullar varsa.Bu yüzden ön koşulsuz 03:25 LİSTESİ dan gelir vedikkate biraz daha yüksek uygulama maliyetleri alır.219
Postconditions: Bu yöntemler ve kurucular koşulları vardır,hangi yürütme sonra yerine getirilmelidir. Postconditions, Yöntemleri ve kurucular yapmak açıklamak ne ve neSonuçlar döndürülür. Arayanlar ona bağlı.Yapıcısına tüm yorumlar ve yöntemleri03:25 Listeleme postconditions dar vardır.Değişmezler: Bu sınıflar ve arayüzler koşulları ve değişkenleri,bu her zaman programın devletlerin sırayla yerine getirilmesi gerekiruyumludur. Örneğin, durum, r03:25 negatif bir değer Listeleme, bir değişmez vardır. Ayrıcaözelliği bir dairesel iki boyutlu bir dilimNesne değişmez olarak kabul edilebilir. SırasındaBir yöntem yürütülmesi ve nesnenin başlatma öncebir sabit kısa vadede ihlal edilebilir. Ama yürütme sonraher yöntem ve her yapıcı tüm değişmezleri karşılaması gerekirolmak.Tarih Kısıtlamaları: Onlar değişmezler benzer, ancak geliştirme kısıtlamakzaman içinde nesnelerin. Örneğin, birBelirten Tarih sınırlaması olduğunu ancak bir değişken sayısıküçüldüğünü, ancak daha asla. Başka TarihiSınırlama doğrudan yalnızca bir yöntem gerektirebilirBelirli bir başka yöntem sonra yürütülür. GenellikleSınıflar ve arayüzler açıklamaları Tarih kısıtlamaları,hatta bazen yöntem ve değişkenler. Öncesi ve sırasındaPostconditions ve değişmezler uzun seçkin varyalnızca son olarak tarihe kısıtlamalar olacakayrı bir kategori kurulmuş ve bu nedenle çok iyi bilinmemektedir.Güvenceler bu tür arasındaki ayrım önemlidirfarklı zamanlarda uygulamak zorunda çünkü. Önkoşullarsonra yürütme, postconditions ve değişmezler daha önce geçerliGeliştirme kısıtlamaları Tarih sırasında, öncesinde ve sonrasında gerekligenel bir nesnenin sınırı.İsimler ve yorumlar yaş yapabilirsiniz. Bunun anlamı her ne kadarilk değişikliklerden zaman içinde, dikkatli ve iyi seçilmişProgram kodunu ya da hatta onların önemini kaybetmeyeDoğruluk Lose. Bu program değişiklikleri her zaman gereklidikkate yorum ve gerekirse ayarlanır.220Bir iletişim ortamı olarak 3.5 kaynak koduBazen değişkenler, yöntemleri, yeniden adlandırma, vb kaçınılmazdır.Deneyimli programcılar önyargı güvenmeyinİsimler ve yorumlar. Bazen kontrol ne kadar iyi isimve asıl gerçekleri açıklama yapmak. GöreTest sonucu, bu programa güven değerlendirmek. Güvenilmesidiğer programcı gelişimi için ön koşuldurbüyük programları, güven olmadan tekrar programın parçaları tercih nedeniönceden var olan bir program bileşenleri kullanılacak gibi yazar, ya daen azından gereksiz kontroller içerir. Bu nedenle, olabilirkötü seçilmiş isimleri ve açıklamaları çok fazla gereksiz kodve uzun geliştirme süreleri yol açar. İyi isim ve yorumBu nedenle önemli bir kalite özelliğidir.3.5.2 Ayrıştırma, uyum ve bağlantıGibi çeşitli vesilelerle işaret, çarpanlara (bir ayrışma yaniDaha küçük birimler halinde Programı) büyük önem taşır. AProgram daha sonra zaman iyi etki eder• Tüm ilgili özellikleri ve programın özellikleriaçık bir düzen oluşturmak için birleştirilmiştir• ve özellikleri ve birbirleriyle ilgisi yoktur yönleri,bu yüzden açıkça onlar birbirinden bağımsız olduğunu ayrılırdeğiştirilebilir.İyi faktoring Yerel program değişiklikleri olasılığını artırır.Programda yerel bir değişiklik ihtiyacınız olduğunda sadecebir noktada düşünmek ve bu noktada ayarlayabilirsiniz.Olmayan bir yerel değişiklik birkaç veya birçok göz önüne alınmasını gerektirirÇeşitli yerlerde program ayarlamaları ve aynı anda yapın.Ayrıştırma ve bakımı yakından bağlantılıdır.İyi bir çarpanlara ayırma için talep çok, bizim için kullanmak değilsürece biz basit ve erken heranziehbaren değerlendirme kriterleri olarakbunun için, çarpanlara iyiyse. Geriye doğru bakıldığında,Zaten program değişiklikleri tamamladıktan Peki sonraBize basit değişiklikler gerçekleştirmek için nasıl bilgi faydalıdaha fazla değildi. Ne yazık ki, böyle açık anlaşılır varDeğerlendirme kriterleri. Ancak, pratik kurallar vardır kiçoğu zaman ama her zaman doğru yolu. Başparmak iki tür kurallarabiz biraz daha yakından bakalım:
Sınıf uyum: Bu ilişki derecesini ifade ederBir sınıfın içeriği arasında. Içeriği vardırBasit bir ifadeyle, değişken ve sınıfının yöntemlerindeBu içeriği açıklayan aynı zamanda yorumlar.
Sınıf uyum yüksek olduğunda tüm değişkenleri ve yöntemleribirlikte iyi uyum ve adları ve amacına yorumve uygun sınıf örneklerinin kullanımı açıklanır.Sınıf dayanışmanın yüksek ise, önemli ölçüde azalırEğer bir değişken ve yöntemleri grup veya kaldırırsanızekleme, yeniden adlandırma veya yorum faydalı içerik değişikliklerini değişiyor.Bu değişikliklerle, düşük sınıf uyum Atsınıf dayanışmanın sadece küçük etkilerya da artış bile olabilir. Zihinsel tarafından yapılan değişikliklersınıf, bir sınıf eş-stop ders tahmin edebilir.Amaç, tüm sınıfların mümkün olan en yüksek uyum olduğunubir programda. O iyi bir çarpanlara işaret eder.Nesne bağlantı: Bu birbirinden nesnelerin bağımlılıkları gücüdür.Çalışan bir sistemde bir arada nesneler vardırdüşündü. Nesne bağlantı güçlü olduğu nesne sayısıdışarıdan görünen yöntemler ve değişkenler, çok mesajınız vargönderilen diğer nesneleri (doğru değil) ve değişkenleridiğer nesneleri erişilebilir ve parametreler sayısıBu yöntemler yüksek. Ayrıca, nesne kaplin düşünülebilirçok iyiydi. Amaç, zayıfNesne bağlantı. O da gerekli değişiklikleri işaretProgram yerel kalma eğilimindedir.Sınıf uyum ve bağlantı kavramları uzun nesnesi varkullanımda, ancak başarılı tam bir tanımı olankarşı çıkıyor. Sınıf dayanışmanın sadece açıklarbiz sınıf içeriği arasındaki ilişkinin derecesi algılananbir ölçek ölçülebilir, standart derecesine kimse. Tıpkınesne bağlantı bağımlılık tahmini gücü karşılıknesneler arasında. Bu özelliği kullanmak için sayısız girişimleri olsa daIyi tanımlanmış, standart esasına açısından sağlamak, fakatküçük başarı. Ölçülen değerlerin aksine değerlendirme eğilimindedirbiz bilinçsizce ağırlık yapmalarıdır. Yönleri ve biz bunadeğerlendirme daha fazla gitmek önemli görünüyor. Belkibir miktar kaba bir tahmin sık sık üstün ölçülen.222
Bir iletişim ortamı olarak 3.5 kaynak koduAslında, başka bir nedenle belirleyici faktör ne olabilirkaba tahminler ve biz ancak tanımlı çıkış kriterler:Biz çok önce kafasında farklı yaklaşımlar karşılaştırınBiz bir şey ölçebilir hangi program kodu vardır. Direkt olarakIki yaklaşım karşılaştırılması, çok erken tahmin edilebileceğiYaklaşım bir üst sınıfa uyum muhtemelen birnesne zayıf bağlantı neden olur. Bu tahminlere dayanarakbizim tasarım kararları. Daha kesin tanımlarıŞartlar o yardımcı olasılığı azdır.Eğilim bir program bir yüksek sınıf bütünlük gösterirzaten oldukça iyi bir yapıya sahip ve bu yüzden muhtemelen değilyapısına önemli iyileştirmeler yapmak gerekecektir. Atzayıf bağlantı nesnesi daha yüksek olasılık olduğu birBir sınıfın diğer sınıflarda başka değişiklikgerekli kılmaktadır. Neyse ki, bu iki kavram birbirleriyle yakındanBirbirleriyle bağlantılı: Sıklıkla sınıf bütünlüğü iffyüksek nesne bağlantı zayıftır ve tersi olduğunda. Bu,Bu nedenle, bir programın yapısı olduğunu, çarpanlara eğer öyleyse ne zamangibi birçok değişiklik yerel mümkünse iyi kabul edilirvardır. Değil seyrek, sınıf bütünlüğü daha kolay duygusalsadece belirli sınıflar için, nesne bağlantı daha anlaşılır değiltüm sistem düşünmesi gerekiyor. Bununla birlikte, bazı sonuçlarnesne bağlantı çekin.Hatta en iyi çarpanlara tüm program değişiklikleri garanti edemezdruchführbar yerel vardır. Eğer, örneğin,Olmayan bir özel yöntem değişiklikleri İmza - taşımak demek03:25 dan Listeleme ek bir parametre alır - o zaman birkendisi söz konusu olduğunda yöntem tanımı, aynı zamanda herhangi bir sadeceProgram noktada hangi bir mesaj gönderilir. TümBu program bulmak ve değiştirmek zorunda yerleştirir. Genellikle varArabirimleri değişiklikler birkaç ya da birçok yerde kapakProgramı. Bu nedenle, kararlı arabirimleri için çabamümkün olduğu kadar düşük, bu yüzden iyi bir neden olmadan asla değiştirin.Bu ara ara da yorum bulunmaktadır.Liste de yorum taşımak için, örneğin, eğerGüneş 03:25 bir değişim deltaX bu pozitif değerler tazminatSol neden, o zaman sadece değişiklikler ortaya çıkmazTüm yerlere Yöntem, aynı zamanda değişiklikler nereye böyleMesaj gönderildiğinde - sadece imza değiştirdiğinizde gibi.
Hiç anlaşılacak olan herkes bu ne ve ne etkiliyorYorum değişikliği bu olduğunu, olabilirBiraz daha bağlamda, ağız kelime "zararsız".Yorum değişikliği etkileri yerel nadirdir. ABir yöntem değişikliği olduğu imza ve yorumdeğişmeden kalır, ancak, gerçekten oldukça zararsız olabilir. Değişikliklereğer özel yöntemleri de nispeten zararsızdırİmza ve yorumlar da etkilenir. Tüm aramalar yapılırsınıf ve diğer gerekli değişiklikleri içinde bu yüzden sadece kalırSınıf sınırlıdır. Daha kötü olarak, çarpanlara bakildidaha olmayan özel yöntemler ve daha yüksek bir olasılıkBu değişiklikler, arabirimleri de ihtiyaç vardır.3.5.3 ikame ve davranışBiz Bölüm 3.3.3 bir bir giden ikame biliyoruzAlt tip ilişkiler için bir rol oynar: A tipi U ise ve alttip U nesneler her yerde kullanılırsa bir tür T, nesneleritürü T. beklenebilir Bu Ersetzbarkeitsprinzip değilimzalar iki nesne maç otomatik olarak memnun.Buna ek olarak, aynı zamanda alleMethoden her nesnenin bu başvurmalıdırTip U ilgili yöntemleri yaptığınız gibi davranırtip T nesneleri bekleniyor. Imza uyumluluğuderleyici tarafından kontrol etti. Davranış uyumluluk testi içinBiz programlama sorumlusunuz. Bizsadece fıkra genişleten veya uygular sağlamalıdırdavranış uyumlu olduğu, orada kullanılır. Olsun, ciddi hatalar söz konusu değil.Saygı için davranış bir şekilde uyumlu olmalıdırSupertype karşılık gelen yöntemi olarak aynı alt yapın.Ancak, yöntem başka yollarla bu görevi de alt edebilirsupertype daha yok. Örneğin, yorum çağrısıdistanzZumUrsprung arabiriminde mesafe ölçüm yöntemiListeleme 3.12 'de, mesafe kökenli döndürülür. HerBu yöntemin uygulanması yapmalısınız. Ancak, açıklamaarabiriminde yanlış. DistanzZumUrsprung yöntemListeleme 3.25 sınıf şekilde belirtilen diski açıklamasıBu diskin en yakın noktasına uzaklık dönerolduğunu. Sınıfta açıklama arayüzü bu uyumludur.224Bir iletişim ortamı olarak 3.5 kaynak koduBu örnekte olduğu gibi bir kabul olduğunu yöntemleri davranışisimleri ve ölçüde yorum tarif olduğunuyöntemlerin kullanılması (yani gerekli göndermek için birMesajlar) bilmek için ek ihtiyacı yok. İsimler ve yorumlardavranışı belirtin. Bu davranış tam özellikleriErsetzbarkeitsprinzips korumak için çok önemlidir. Belirlemek içinİki teknik özellikleri karşılaştırmak için uygun yöntemler olup olmadığınıbiz, isim olarak yine aynı olmalıdır bu.
Yorum dışında, ahenk içinde olmalıdırAlt türü yazısına supertype daha doğru olabilir.Ikame her bir programın farklı bölümlerinde yardımcı olurdecouple için. Aşağıdaki grafikte bu açıkça ortaya koyuyor:Kullanıcılar - → ilan tip. . . ↑dinamik tipKullanıcı adı burada bir program birimi bir mesaj gönderirSadece belirtilen türüne bilinen olduğu nesne. Kullanıcı varAlıcı hakkındaki tek bilgi, beyan türü dahilolduğunu ve nesne sağlamak için bu bilgileri kullanacağızfarklı yöntemler uygulanabilir - ok ile gösterilensağa. Dinamik tip statik türünde bir alt tipi olan - temsilok. Kullanıcı ve her ikisi dedinamik tip statik türüne oklar ile birleştiğinde, fakatdinamik türü zaten alıcı gizlenir - olarak belirtilennoktalı çizgi ile.Biz dinamik alırsak ayırımı en büyük avantajı ortaya çıkıyorIlan tip döviz başka bir alt tipi için Türü:Kullanıcı için, bu tam olarak hiçbir şey değişmez. Ne zamanDinamik tip değişiklikler yapın, böylece alt ilişkisibakımı, kullanıcı herhangi bir değişiklik gereklidir.Sürece biz ilan türü (herhangi görüşler de dahil) olarakbir alt türü ilişki (uyumlu dahil olmak üzere değişmeden ve bırakınDavranışı) dinamik türünü değiştirmek için, konu sağlamakyerel ve dolayısıyla zararsız. Özellikle önemli ayırımı edilir daha sonrabiz bilmiyoruz kullanıcı varsa. Sonra varher halükarda beyan türü değiştirilmemelidir.Ayrıştırma araçları, bakımı çok alt türü ilişkileri. Yardım Bakımı iyi ise nesne değişkenleri ve resmi
Parametreler zaman boyunca stabil türleri ile bildirilirpek değiştirin. Sık kullanılan Kararlı, özellikle türlerive bu nedenle zaten iyi test edilmiştir. Türleri öncesinde genellikleBu aşağıda daha istikrarlı türü hiyerarşisi. Ilan türleri hakkındadaha iyi arabirimleri veya soyut sınıflar için kullanılan tekolan özel sınıflarla daha gerekli bir amaç, hizmetİhtiyacınız olmayan çeşitli şekillerde kullanma. Böyleceçok daha sık yerel gerekli değişiklikleri kalır.Acemi programcılar genellikle ikinci yöntem miras düşünüyorumÜst sınıf mevcudu açısından önemli bir tasarruf getirecekprogram kodu kaygıları yazılacak. Aslında, tasarrufkendilerini genellikle çok mütevazı mirasçılar tarafından. Getirmek aksinesınıfların akıntı veya uygulamak ile alt türü ilişkileriarayüzleri, genellikle çok büyük tasarruf tanıtılmaktadır.Bu, tek bir program birimi (örneğin gibi gelirFarklı dinamik birçok nesne ile yukarıdaki tabloda Kullanıcı)Türleri işleyebilir. Arasında fark varsailan ve dinamik türü yok, kendi olurduHer tür için Kullanıcı yazmak gerekiyordu. Bu da çok iyi olurduBu alt türü ilişkileri kurtaracak bir çaba.Buradan bir öneri elde edebilirsiniz: bir tür hiyerarşi kurarkenbir çok yöntem olarak, dikkat edilmelidirdevralmak için bir üst sınıf. Bunun yerine, bir sağlamalıdır herhangi birKullanıcılar ilan türü, gerçek ihtiyaçları vardırkarşılık gelir. Bu davranışı tamamen olmalıYöntem odak, böylelikle bir her yöntemBir tür altında uyumlu supertype davranış ilgili yönteminesahiptir. Bu işlemi uygularsanız, tip hiyerarşileri için bir, ortayaiyi bir izolasyon sağlar ve tip hiyerarşisi içerisinde türleri yüksek olduğuoldukça kararlı. Başlangıçta kendinizi iyi hissetmiyorsanız olabilir onlarBurada sınıflar ve arayüzler gereksiz kod daha yüksek sayıdayazar. Sonuç olarak, ancak, yazı kaydederprogram kodu ve program bir çok korumak daha kolaydır.Öğrenmek için 3.6 nesne tabanlı programlamaNesne tabanlı programlama büyük projeler için sahipgeniş uygulanır. Böyle bir bilgi olabilir olmadan226Öğrenmek için 3.6 nesne tabanlı programlamapek yazılım daha geliştirmek. Bu nedenle, birkaç ders vardırkim bu konuda alır. Nesneye dayalı modellemesınıflar ve hiyerarşileri tasarımı ve tipi güçlü bir odak vardıronların gösterimi. Nesne tabanlı programlama teknikleri, bu konuda ennesne tabanlı kullanarak iyi bakımı yazılım inşaatParadigma Programlama. Set Birçok diğer dersleriyi nesne tabanlı programlama bilgisi gereklidir.3.6.1 Kavram ve önerilerNesne tabanlı programlama öğrenmek için sıkıcı bir süreçtir.Bir baştan büyük yazılım projeleri için çok doğru, bekleyemeyizgerçekleştirmek. Onu alışmak zaman alıyorgerekli deneyime sahiptir.Bu nedenle, bu bölümde böylece bir yapılandırılmıştır• Eğer nesne tabanlı programlama içine ne gol öğrenindava ve hangi kavramlar ve teknikler arkasında,• uygun dil Java yapıları ve küçük bilmekGörevler öğrenme uygulamak• nesne yönelimli ne kadar insan bir fikir edinmekProgramlama oluyor ve ne burada önemlidir.Burada kazandırdığı bilgi hala çok iyi gelen bir teknolojidirnesne yönelimli programlar yazılır. Ama en azından bilmeliBildiğimiz gibi neden Java uygulamaları tasarlanmıştırdil yapıları var ne var, ve. Bu bilgi yeterlidirKendi küçük programlar yazmak için. Bir çok programlı olursave nesne yönelimli dil yapıları kullanır veamaçlarına sizi düşünerek bir fikir edinmesini zaman, elindesağ Verwendung.Man programlama kendi stilini geliştirdi. Daha sonraçalışmada, daha büyük yazılım projelerinde yaklaştı ve eğernesne yönelimli kavramlar isteklerinizi ve kendi deneyim biridir kullanınpaha biçilmez bir avantaj programlama stili geliştirdi. BuProgramlama stili gelişmeye devam edecektir.En önemli tavsiye çok daha pratik vepratik deneyim kazanmak için. Bu ileri değil bakabilirsinizküçük aksilikler sizi vazgeçirmek sağlar. Bir çoğu hataları daha öğrenir227
başarılı çalışmalar itibaren. Bu nesne yönelimli özellikle doğrudurProgramlama, hangi yolları çok sayıda varhangi ama birkaç gerçekten çok iyi. Birçok tuzaklar içine düşecekEğer büyük tuzaklar ve arasında iyi bir yol biliyorum önceÜzerinden düşecek.3.6.2 Kontrol SorularNesneye yönelik usul ve • unsurları neStil Programlama?• Bir nesne nedir?Programlar • ne tür nesne yönelimli birİyi programlama?• Hangi sorunlar, büyük programların geliştirilmesi var? Bekliyoruz• artan yazılım geliştirme ne demektir?• dönem çarpanlara ne anlama geliyor? Ne zaman bir ayrıştırma olduğunuiyi, ne zaman değil?• Nasıl yerel değişkenler farklı nesne değişkenleri vardır?• nedir ve kapsülleme, veri saklama ve veri soyutlama nedir?• Ne bir mesaj olduğunu ve neden gönderme sözHaberler ve sadece yöntemlerini çağırarak?• Ne ne altında, bir nesnenin arayüzüuygulanması?• Hangi kullanıldıkları ve hangi sınıf?• Java görünürlük etkisi nasıl?• en görünür nesne değişkenleri nerede?• Hangi alıcı ve ayarlayıcı yöntemleri Veri Gizleme ile ne ilgisi var?• kimlik, durum ve davranış kavramlarını açıklar.228Öğrenmek için 3.6 nesne tabanlı programlama• kimlik veya eşitlik Java nesneleri karşılaştırmak nasıl?• Neden nasıl tanımlamak için bir hizmet yapıcı ve?• Ne sözde değişken ve bu ifadeler kullanabilirimBu form (...)?• statik yöntemleri ve sınıf değişkenleri nasıl kullanılır?• Hangi sınıf değişkenleri ve sabitleri farklı kılan nedir?• arabirimler nelerdir?• Hangi bir arayüz uygulanması sırasında biri demektirkonuşuyor?• Biz polimorfizmi söz ne zaman? Rolü nedirNesne tabanlı programlama Polimorfizmi?• Hangi koşullar altında bir tür T bir tip U alt edilir?• Neden dinamik bağlama gerekiyor?• Nasıl bir araya mitMehrfachverzweigungen bağlayıcı dinamik?• Neden dinamik bağlama geçmek ifadeleri ile karşılaştırıldığındami tercih ediyorsunuz?• Hangi uzmanlaşma amacı ve gerçek mukayeseler varDünya?• Ersetzbarkeitsprinzip ne anlama geliyor?• miras ne demektir?• sınıf, türetilmiş sınıf, alt sınıf temel kavramlarını açıklarve üst sınıf.• Bir geçersiz yöntemi nedir?• Neden genel olarak korunmayan değişkenleri mi?• türetilmiş sınıfların nesnelerini başlatmak nasıl?
• Peki bu deyimi kullanmak nerede süper (...) amaç vemi?• Bir yöntem değişken erişim çağrı mıdinamik bağlama ile ilgili?• Ne için amaç sınıflar ve yöntemler ile bir değiştirici olabilirsoyut ya da son verilmiştir?• Nasıl bir program ek yapı ile arayüz? Getirmek• Nesne var hangi yöntem ve hangi amaçlasahip oldukları?• Nasıl zamanında dinamik yazabilirsiniz, bu nedenle sınıfBir nesnenin (üç olasılık) tespit?• temel bulunanlardan başvuru türleri farklı atmalarını nedirTürleri? Neden bunu önlemek gerekir?• Bu nasıl ve süper sahte değişkenleri ayırtbirbirinden?• Neden nesne karşılaştırmaları için hashCode değil mi?•, sınıflar, arayüzler yorum ne bilgilerYöntem, yapıcı ve nesne değişkenleri dahil edilecek?Yorum yapabilirsiniz şeklinde güvence • ne türonlar farklı?• Nasıl yaş isim ve yorum yapabilirim? Ne yapabilirsinizAncak, do?• Nasıl kötü seçilmiş adı ve gereksiz açıklamaProgram kodu çalıştırmak?• factorized programlarından iyi farklı kılan nedir?• sınıf uyum ve nesne bağlantı kavramlarını açıklar.Bu çarpanlara ayırma ile ilgili nedir?• Nasıl nesne sınıfı bütünlüğü ve bağlantı olabilir? Tahmin230Öğrenmek için 3.6 nesne tabanlı programlama• Gerekli değişiklikleri tehlikeli yorumlarına zamanne zaman daha zararsız?• davranışı belirtmek için?• Ne zaman bir supertype ile bir alt-tür davranışUyumlu?• Hangi birbirinden ayrılmış programın ikame bölümleri?• Hangi tür daha kararlıdır?• Nerede kararlı adam özellikle dikkat etmelidir?• Neden üst sınıfı kadar program kodu, mantıklı değildevralmak istiyor?
* * * Scriptum Kapitel 4 :
4 veri, algoritma ve stratejilerŞimdi bazı temel uygulamalar dikkateProgramlama sorunlarını çözme. Birçok görevi karmaşıklığı olabilirbelirli düşünce kalıpları uygulanarak oldukça basitleştirilmiş. IlkBiz biraz daha yakın ve en sonunda koymak bazı terimlerin düşününana strateji ortak görevleri ele almak.4.1 TanımlarUygun algoritmalar ve mevcut veri yapıları için aramaProgramlarının tasarımı Merkezi. Olmasına rağmen bu yönüyleProgramlama yaratıcılık gerektirir ve otomatik olamaz, Bu yüzden onu bulmak ama bazı kendimizi izinBirçok durumda zaten başarılı olan Stratejileri kılavuz.4.1.1 AlgoritmaDönem ortaçağ Latin kullanılan algoritma geliyorNumaraları ile hesap yapma sanatı tarif Dönem algoritmaya.Aslında, muhtemelen soyadı sakatlanma ve algoritmayaArap doğumlu matematikçi geliştirilecek. Son yıllardagelişine, dönem algoritma anlamı vardırbilgisayarlarına biraz değiştirdi. Odak değil,sayıların cebiri, ama bir algoritma genel birKarakter dizileri kademeli dönüşüm için kurallar sistemi. Içinbilgi resmi işlem için talimatları içerir. OModern bir kavram olarak algoritma tanımlamak için pek çok çalışır,Ancak, genel olarak değişken kabul yok. Bu kadar iken açıkBenzersiz bir ticari düzenlemeye algoritması olan hareket etmeliYönelik bir sorunun çözümüne bağlılık. GüçlükleriAncak, ihtiyaç adımları sınırlı sayıda sonra aslında birBir sorun çözme hesaplanır. Kararsızlaşma nedeniylehalting sorunu (Bölüm 1.5.3 bakınız), biz yolu yoktur2334 veri, algoritma ve stratejilerListeleme 4.1: aynı algoritmayı farklı uygulamalarısumupLoop int (int n) {int sumupRec (int n) {int toplam = 0 if (n> 0) {(n> 0) {(n + sumupRec (n - 1)) return ise;toplam + = n;}n -; else {} Dönüş (0);return (toplam);}}}Belirli bir eylem bir algoritma kural kararya da diri. Görüş pratik açıdan bu inceliklerini oyunneyse önemli değil. Biz bir fikir daha ifade etmek istiyorumiki algoritma aynıdır ne bir algoritma veya.Örneğin, tüm sayıların toplamının hesaplanmasında göz önündeBir limit s 1 kadar, sonra 1 +2 + · · ° + n. Biz aşağıdakileri yapabilirsinizbasit bir algoritma kullanmak için: sürece n 0'dan büyük olduğu gibi, n ekleyinn 1 toplam azaltmak ve ile işlemi tekrarlayın içindaha az sayıda n. Listeleme 4.1 iki farklı uygulamaları gösterirBu algoritma. Yöntemi sumupLoop kullanırTekrar ifade etmek Loop, sumupRec kullanılanÖzyineleme. Büyük farklılıklara rağmen, her iki yöntem de aynı olduğunuzuÖnce algoritması. Bu örnekte görebilirsiniz bizbir algoritma ve bu algoritmanın uygulanması arasındakifarklı olmalıdır.Matematikte böyle özetliyor üçgen numaraları denir. Birellerinden Gauss toplamı formül 1 + 2 + · · ° + n = n * (n +1)2 hesaplanabilir.Listeleme 4.2 triangleNum içinde yöntem aynı işi çözeriki sumup türevleri (bir üçgen sayı bilgisayar) kullanmak gibiBu formül. Hatta formülü kapsamında olmayan bu durumlarda(n ≤ 0), triangleNum aynı sonucu teslim edilir. Algoritmalartamamen farklıdır. Bu örnek gösteriyor ki bir ve aynıSorun farklı algoritmalar ile çözüldü.Listeleme 4.1 ve 4.2 'de tüm yöntemler aynı fonksiyonel varÖzellikleri (Bölüm 1.6.4 bakınız), böylece aynı sonuçları verir.Olmayan fonksiyonel özelliklerinde, bunlar farklı.2344.1 TanımlarListeleme 4.2: Başka bir algoritma aynı sorunu çözmek içintriangleNum int (int n) {if (n> 0) {return (n * (n + 1) / 2);}else {return (0);}}Yöntem triangleNum sumup iki modeli tercih edilir:Kaynakların tüketimi, özellikle çalışma süresi esas olaraksadece tek bir ifade hesaplar çok sayıda n daha küçük için, çünkü, Ayrı ayrı hesaplanan sumup pek çok çeşidi ikenSummands eklenir. Ayrıca, bunun için bir ifadesidirTabii basit, formülü bilen birisi. Formülüstatik program kodu doğrudan görünür, bizi anlamak için isedüşünce içine dinamik program akışı içinde değişik sumupvar. Diğer taraftan, orijinal temsil1 +2 + · · ° + dinamik bir süreç önce n ve problemBu formül aynı sonucu hesaplar yeterince açık değildir.Biz algoritmaları ile anlaşma yaparken, kendimize bu tür sorular sormakBu örneklerde olduğu gibi. Bu nasıl bir sorun hakkında ençözülmüş ve hangi özellikleri ilgili algoritmalar olabiliraufweisen.Wir amacımız algoritması için çok uygundur istiyorum. Bulmak Algoritmalarının kalite ve büyük değilDil ve uygulama bağımlı varyasyonlar: Non-fonksiyonel özelliklerifarklı algoritmalar çok daha farklıaynı algoritmayı farklı uygulamaları gibi birbirinden.Biz ayrıntıları üzerinde ki soyut algoritmaları ele alırsakprogramlama dilleri ve uygulamaları.4.1.2 Veri YapılarıVeri birbirlerine göre düzenlenmiş açıklayan bir veri yapısıve nasıl tek tek veri öğeleri (kısa haber)erişilebilir. Bir veri yapısı karakterize etmeközellikle erişim tuşu işlemleri. Burada küçük2354 veri, algoritma ve stratejilerYararlı veri yapılarının çok sayıda seçin:Array: yan bu basit veri yapısı yalan yan unsurlarıbellekte ve doğrudan bir dizin ve etkili bir şekilde ele,bölüm 2.5 bakın. Eleman sayısı sınırlıdırve dizinin yeni nesil tarafından belirlenir.Bağlantılı Liste: sonraki liste girişine giriş noktaları herhangi bir listeBölüm 4.2.1 bakın. Eleman sayısı böylece birsınırlı ve ek öğeler eklemek için tasarlanmamıştırbasittir. Ancak, öğeleri doğrudan bir dizin kullanmıyorsunuzulaşılabilir ve belirli öğeler için arama pahalıdır.İkili ağaç: her giriş noktasında iki ek girişe kadar,girişleri belirli bir harmanlama karşılanır ile, bkzBölüm 4.2.3. Benzer özelliklere Bu sonuçlarıbağlantılı liste Ancak, daha verimli ürün bulmakve daha karmaşık yeni unsurlar ekledi.Hash tablosu: her öğe bir sabit bir boyutu olan bir tablo içindeEndeksi, Elelement kendisinden hesaplandığı, saklanırBölüm 4.3.3. Sürece tablo olarak sadece küçük bir parçasıdolu, her iki görünümlü Ekleme ve oldukça verimlidir. Atgüçlü, ancak tüm istekleri verimsiz doldurma.Yığın: Bir yığın itibaren sırayla tek elemanlar okunabilirve yerleştirme düzeninin tam tersi kaldırılırolduğunu. Bazı algoritmalar bu özelliği gerektirir. Bu daOlgular çok verimli bir şekilde diğer durumlarda yığınlar, küçük duygusu vardır.Programlama dilleri Yığınlar, örneğin, uygulamaiç içe geçmiş bir yöntem çağrıları temsil etmek için kullanılır.Programlarının tasarımında, gerekli temelinde kararIçin veri yapısı erişim işlemlerinin özellikleriBizim sorunun çözümü en iyi uyuyor. Sık sık çeşitli birleştirmekdaha büyük, örneğin, içine basit veri yapılarıBağlantılı listeler dizi. Bu şekilde bir dizin olabilirhızlı bir şekilde istenen listesine erişmek ve olanağına sahip olmadan,Bir dizi indisi için çok çaba kadar giriş mağaza -bu özellikleri gerekiyorsa. Basit iyi bir bilgi olarak2364.1 TanımlarListeleme 4.3: bir dizi tarafından yürütülen bir yığın1 public class IntStack {sayının / / yığını2 private int [] elem / / dizi yığın tutan unsurlar3 özel int top = 0, / / sonraki dize dizini4Boyutu max, max dizinin 5 / / başlatma> 06 kamu IntStack (int max) {7 elem = new int [max];8}910 / / elem yığın yerleştirilir11 / / ArrayIndexOutOfBoundsException, hiçbir boş alan12 public void push (int elem) {13 elem [en] = elem;14 Üst + +;15}1617 / / üst giriş yığından uzattı18 / / ArrayIndexOutOfBoundsException, herhangi bir giriş varsa19 public int pop () {Top 20 -;21 return (elem [sayfa başı]);22}23}Veri yapıları genellikle kolay bir veri yapısı olabilirgerekli tüm özelliklere sahip otur.Listeleme 4.3 IntStack içinde sınıf herkes için bir yığın uygularSayılar. Yığın girişleri olan boyutu bir dizi saklanıryapıcı tanımlanır. Dizi sınırları aşan veya altına düşmesidizisinde atılır bir istisna kereyığın kullanırken dikkatli olmalısınız - bakınız Bölüm 5Bize veri yapılarının bazı genel özellikleri ele alalım:• olduğu gibi algoritmaları ile, biz kesinlikle veri yapıları ayırt olmalıdırve veri yapıları farklı uygulamaları.Tanımlanmış bir veri yapısı altında bir koleksiyon demekBazı erişim işlemleri ve özellikleri ile veri.Aynı veri yapısı için birçok yol vardıruygulamak. Örneğin, bir yığın kullanabilirsinizBunun yerine bir dizi bağlantılı liste uygulamak.Veri yapıları programlama bilgilerini bağlı değil.2374 veri, algoritma ve stratejiler• Bir diğerinde bir veri yapısı yardım alabilir. Uygulamak Veri yapıları nedeniyle kendi erişim işlemleri için gerçekten vardırbelirlenir ve özelleştirilebilir.• Erişim işlemleri algoritmaları tarafından belirlenir. Yığın içindeÖrneğin, erişim işlemleri çok basit şekilde tarafındanAlgoritma çok kabul etmektir. Ama yine de diğer olarakDaha karmaşık algoritmaları ile erişim işlemleri örneklere bakınaçıklanmıştır. Bu algoritmalar tipik olarakbazı veri yapıları. Bu özellikleri belirler.Veri yapıları ve algoritmalar büyük ölçüde değişmektedir. Algoritmalarözel veri yapıları gerektiren algoritmalarsadece veri yapıları ile birlikte geliştirilebilir.
Uygun veri yapıları seçilmesi genellikle daha önemlidirÇünkü aynı veri yapısını Algoritmalar, çeşitli algoritmalaryürütülmelidir. Çoğunlukla biz evet için aynı verileri kullanmakçok amaçlı bir. Algoritmalar geliştirmek nedenle dikkatli olduğundaSabit: Ne zaman bir veri yapısı çok fazla bir algoritmaO zaman, sadece bu algoritma uygun şekilde ayarlarBelirli koşullar altında zor, diğerleri aynı veri yapısını kullananAlgoritmalar geliştirmek.4.1.3 Çözüm StratejisiBir strateji altında uzun vadeli bir yaklaşım anlamına gelirtemel sorular. Burada başarı için temel, çok önemliAmaçları, elde stratejik hedefleri olarak adlandırılmaktadır.Inşaat programı ile ilgili olarak öncelikle birson derece önemli stratejik hedefi: basitlik. Bizgenellikle karmaşık bir yüksek çünkü biri el ile karşılaştırıldığındagörevlerin içerik kaçınılmaz karmaşıklığı, diğer taraftan, çözülecekama aynı zamanda da programlar basit görevleri çözmek için çünküdaha kapsamlı ve karmaşık hale, zaman içinde, genellikleve gizemli olmak. Özellikle ikincisi karşı, biz gerekir. Mücadele Biz uzun vadede yapıları vardır sadece sadece varKolu içeriğin karmaşık görevleri almak için herhangi bir şans.Bu her düzeyde geçerlidir. Programın genel yapısı olarak ikibireysel algoritmalar ve veri yapıları basit kalmalıdır.2384.1 TanımlarBu bölümde şu stratejileri, tüm ele alacağızBir sistemin veya algoritmalar ve veri yapıları bir basitleştirmeyönelik:Böl ve yönet. Içerik karmaşık görevler için çözümlersık sık bulmak zordur. Arama hızlandırmak için, almakBazen belirli basitleştirilmesi özellikleribir araya geldi ve bu varsayımlar altında bir çözüm arıyoruz.Sonra varsayımlar karşılandığından emin olun.En aşağı. Biz kesinlikle hiyerarşik gidip bir sistem inşa öncebaşlangıçta sadece çok genel, soyut düzeyde. Sadeceayrıntılı olarak bu düzeyde anlaşılması varsa, biz tedaviAltta biz kadar aynı şekilde sistemin bireysel parçaları,geldi ve tüm parçaları hayata geçirdik.Aşağıdan yukarıya Bazen tam tersi bir strateji mantıklı:Biz en düşük, muhtemelen gerekli program bileşenleri başlamakDoğru yavaş yavaş yolumuza uygulamak ve çalışmak için Seviyeönce daha yüksek, daha soyut düzeyde.Kademeli arıtma. Eğer belirli karmaşıklığınıBir görevin büyük bir miktarı, bu kadar önünde genellikleBu ilk görevin sadece küçük bir bölümünü tetikler. Sonraeksik parçalar için adım adım çözüm eklendi.Prefabrik parça kullanımı. Sık sık tekrarlayan görevler içindoğrudan kullanılabilir hazır çözümler vardır.En önemli hedef olarak, olduğu kadar basitlik arayışı olarak ikna ediciBu görünümde bu amaçla, bazen uygulamada tutmak zordur.Bu birkaç nedeni vardır:Büyük bir tek bir algoritma kullanıyor • birlikteSistem istihdam, odak verimliliği sadece çok kolayilişkileri hakkında algoritma ve bu görünüyorbütün ile. Basitlik ve etkinlik ikigenel sistem zarar edebilirsiniz.• programlama sırasında misjudging tehlikesi varkarmaşıklığı. Bu kadar basit ve etkili bir çözüm düşünülmektedirolduğu tespit, ancak diğer insanların bu çözüm anlamakve bir süre sonra artık kendini ifade değil.2394 veri, algoritma ve stratejilerBir zor olduğunda bu tehlike özellikle büyüktürÇözüm ilki özellikle gurur duyar üzerinde vardır.• En belirgin algoritmalar ve veri yapıları değilher zaman en basit ve en verimli. Genellikle, bu gibi enBölüm 4.1.1 'de örneği olarak daha basit ve etkili algoritmalarve karmaşık veri yapıları için gerekenden daha çok biliyoruz.Bu nedenle, basitlik geliştirme çabası artar.İlk iki nedenlerinin kaçınma çok Überwindung.Man costssözde bazı bölümleri için göreve kendini getirmek gerekirbir bir daha güzel için değişim iyi bir çözümBu an için kararsız stratejik hedef görüntülenir. Gel Ama uzun vadede bu kanıtlanmış stratejileri takip etmek işe yarıyorve ayrıntılı düzeyde abartılı verimliliği konuları verir.4.2 Özyineli veri yapıları ve yöntemleriHemen hemen tüm büyük veri yapıları özyineli olarak tanımlanmıştır. Yani,veri yapısı tanımı içinde veri yapısını adını(Doğrudan ya da dolaylı olarak) bir özyinelemeli yöntemi olarak, ortayayöntemi (doğrudan veya dolaylı olarak) içinde denir. Algoritmalarözyinelemeli veri yapıları üzerinde doğal bir şekilde genellikleözyinelemeli yöntemlerle expressible. Her özyinelemeli yöntem içinaynı zamanda eşdeğer olmayan özyinelemeli (yani yinelemeli) yöntemidir. Buna karşılıközyinelemeli veri yapıları hemen hemen olmayan özyinelemeli olduklarıVeri yapıları kullanarak ersetzbar.Wir özyinelemeli veri yapıları gözbağlantılı liste ve ikili ağaç.4.2.1 Bağlantılı ListesiListeleme 4-4 bağlantılı uygulanması ana bölümden gösterirTamsayılar içeren liste. İki tane sınıf kullanılır. Bunlardan biri(IntList) tüm herkes tarafından görülebilir veri yapısını temsilDışındaki işlemleri erişim. Diğer (IntListNode) sağlargerçek özyinelemeli veri yapısı, ancak içindeGerekli intList ve intList aracılığıyla dışında direkt olarak kullanılabilir değil;Yöntemleri halk değildir Bu nedenle, bu sınıf aynıdır.2404.2 Özyineli veri yapıları ve yöntemleriListeleme 4.4: Tamsayıların Bağlantılı Listesi1 public class intList {tamsayı / / list2 özel IntListNode kafa = null; = kafa ilk / / list Eleman3 public void ekle (int elem) {/ / a memb başında ekleyin4 kafa = new IntListNode (elem, baş);5}Listede 6 public boolean içeren (int elem) {/ / elem?7 dönmek kafa = null & & head.contains (elem);8}9 public void remove (int elem) {10 / / listeden elem ilk geçtiği silElem bulunmazsa, 11 / / liste değişmez12 if (head! = null) {Sildikten sonra 13 baş = head.remove (elem) / / yeni bir başlangıç14}15}16}17IntList tarafından kullanılan 18 IntListNode class {/ / liste düğümleri19 özel int elem / / gerçek liste öğesi20 özel IntListNode / Önceki / sonraki = düğüm artık listesi21 IntListNode (int elem, IntListNode sonraki) {22 this.elem = elem;23 this.next = yanında;24}Kalan listesinde 25 boolean içeren (int s) arama {/ * s * / ... }26 IntListNode remove (int s) {/ * sil e listenin geri kalanından * / ... }27}Bu IntListNode bir sonraki değişken (line 20) görülebilir kiDeğişkenlerin türü: Bu sınıf, bir özyinelemeli veri yapısını temsil ederdeğişken tanımlandığı sınıfın adıdır. Bu yüzdenC: IntListNode veri potansiyel olarak sonsuz miktarda tanımlarSınıfın örneğini sonraki başka bir örneğini de değişkenleri içerirsınıf, o kadar yeniden sadece bir örnek, bu içerir vegör. İlk bakışta öyle görünüyor ki sanki biz hiçbir örneğiBiz emin varolan çünkü IntListNode sağlayabilirAynı sınıfın örnek gerektirecektir. Ama yine de dahildirbiz de sıfır bir sınıfının bir örneğini yerine Java kullanabilirsiniz.Bu yüzden sonraki bölümde, IntListNode bir ilk örneğini oluşturmakSıfır içerir. Daha sonra, bir sonraki ilk örneğini oluşturmakÖrnek ve benzeri içerir. Özyineli veri yapıları tanımlamak2414 veri, algoritma ve stratejiler???????????????????????????? @?@ ?????????@?@@@ - - - -- - - - -- - - -
?- - -
?
?(A)(B)(C)(D)44411113 '3 '3 '3 '22223333Şekil 4.5: Bazı liste operasyonların grafiksel gösterimiHerhangi bir veri büyük miktarda Peki, ama sonsuz büyük değil, içindeBir bilgisayarın bellek bile boşluk asla.Şekil 4.5 şematik bazı bağlı listeler gösterir. Her daire temsiliçeriğe IntListNode, daire sayısı bir örneğinideğişken elem ve bir daire içeriğe giden oksonraki. Hayır giden ok değişken değeri içerirsıfır. Biz örnekleri var IntListNode örneklerini erişimKüçük kutular ile şekillenmiştir intList. DeğişkenintList her örneği baş bir liste başlığı içerirIntListNode Örneğin, liste ile başlar. Birer birerBu değişkenin içeriğini işaret giden ok Kutusu.Sunum Bu form, biz ve matematik biliyoruzsık sık bilgisayar bilimi kullanın. Bu yönlendirilirGrafikler. Çemberler ve kutu düğümlerin farklı temsilGrafikler (adından IntListNode) temsil, oklar kenarları gösterir. Pratik olarakTüm özyinelemeli veri yapıları yönettiği grafikler elde edilebilirgöstermektedir. Bu grafik özellikleri özelliklerine karşılık gelenveri yapıları. Listesi her zaman bitişik(Yani, tüm düğümler birbirine kenarlarından bağlıbağlı) yönettiği grafik, her düğümün sembolizeen çok kenar hayran kalacaksınız. Bizim özel varyant her içerirÜzerine tam bir kutu listesi ve her daire bir sayı içerir2424.2 Özyineli veri yapıları ve yöntemleriBir liste üzerinde yapılan işlemler gibi liste özelliklerini ihlal etmemelidir.Sadece üç temel işlemleri intList desteklenir -Listeleme 4.6 yöntemi uygulamaları ile 4.4 Listeleme:• Yeni bir liste düğümü başında oluşturduğu ve ekler ekleyebilirsinizVarolan liste düğümü önce bir. Grafik, (b)Şekil 4.5, örneğin 4 ekleyereklistede gösterilen grafik (a) tarafından oluşturulan. Siparişyerleştirilmesi sağlanır. Listesi (a) oluşturulabilir:IntList intList x = new ();x.add (3); x.add (2); x.add (3); x.add (1);3 numaralı son eklenen numarası ile iki kez takıldıktan3 'tarafından Şekil 4,5 amaç distinguishability 3 seçilir.• arama listesinde bir numara ve bir hakikat değeri döndürürsırt, numara en az bir kez aranır olmadığını belirtenListe dahildir. Uygulama anaListeleme 4.6 gereken kadar liste üzerinde yinelemeli düğüm göçGiriş bulundu veya daha fazla düğüm artık var olduğunuvardır. Burada gelen kısa devre operatörleri & & ve | |oyuna: Sağ alt ifade değerlendirilir yalnızcaGerçek sol değerlendirme (içinde & &) veya (in | | false) elde edilir.• kaldırmak argüman listesinden ilk düğüm kaldırırBöyle bir düğüm varsa sayının içerir. Bu durumIntList uygulanan yöntemin bir sonuç döndürür.
IntListNode uygun yöntemi (Listeleme 4.6) verirSonuç olarak silindikten sonra listenin geri kalanı. Bu kolaylaştırırözyinelemeli uygulama, sadece bir düğüm gerekzammı listesinde ve ne zaman düğümleri aramao var, aksi takdirde halefi döner buldukDüğüm kendisi (bu) geri. Sonra her koyunziyaret düğümleri, özyinelemeli sonucu bir sonraki değişkenArayın. Göre de değişken intList kaldırmanız gerekirIntListNode kaldırmak için arama sonucu baş. Seti Şekil 4.5 listesi (c) zaman da neler olduğunu gösterirlistesi (b) çıkarın (3) çağrısı: Burada aynı adı taşıyan görüşlerinden ibarettirSon ilk üç düğüm (4, 1 ve 3 '), YöntemleriSonra iki döner, değişkenleri ile düğüm Çağrı2434 veri, algoritma ve stratejilerListeleme 4.6: İç içe bulun ve bağlantılı liste üzerinde silme/ / Bu yöntemler sınıf IntListNode bulunmaktadırboolean geri kalanında (int s) {/ / e ardışık arama listesini içerirdönüş elem == e | | (next.contains sonraki = null & & (e)!);}IntListNode remove (int s) {/ / dinlenme e kaldırın = Bu başlangıç/ / Sonuç sildikten sonra kalan birif (elem == e) {/ / bu silinecek ise:sonraki dönüş; = önceki / / yeni kalanı (bu olmadan)} Else if (sonraki = null) {/ / aksi halde başka bir düğümde:sonraki = next.remove (e) / diğer listelerden / Sil e} / / Ve kalan sonraki = new ListBu dönüş / / yeni bir liste bu kalıntı ile başlar}sonraki düğüme Ocak 2-01 aşağıdaki hangi saklanır. DiğerAramalar bu dönüş, ilk düğüm değişmeden böylece. Kalır Düğüm 3 'böylece, listeden kaldırılır olmasına rağmenhâlâ var ve düğüm 2 içerir. Listesinde bulunandüğüm 3 'ulaşılabilir artık. O başka beriYol erişilebilir, bu da bazen Java sistemden birUzak hafıza. Aynı şekilde grafik (d)4 (c) silin. Ama burada, ilk düğüm silinir,böylece intList halefi düğüm 1 baş ayarlanır.
4 VERİ, Algoritma ve stratejilerSimdi bazi Temel Uygulamalar dikkatProgram Lama sorunlarını çözme. Birçok görevi karmaşıklığı olabilirbelirli Düşünce Kalıpları uygulanarak oldukça basitleştirilmiş. TürBiz biraz daha Yakın ve en sonunda koymak bazi terimlerin düşününana strateji Ortak görevleri ele Almak.4.1 TanımlarUygun algoritmalar ve mevcut VERİ Yapıları için aramaProgramlarının Tasarımı Merkezi. Olmasina ragmen met yönüyleProgram Lama yaratıcılık gerektirir ve otomatik bir olamaz, Bu yuzden ONU AMA BULMAK bazi kendimizi izinBirçok durumda zaten başarılı olan Stratejileri Kilavuz.4.1.1 AlgoritmaDöner ortaçağ Latin kullanılan Algoritma geliyorNumaraları Ile Hesap Yapma Sanatı toplu algoritmaya kebap.Aslinda, muhtemelen soyadı sakatlanma ve algoritmayaArap doğumlu Matematikci geliştirilecek. Son yıllardagelişine, döner Algoritma anlami vardirbilgisayarlarına biraz değiştirdi. Odak deðil,sayıların cebiri, Ama bir Bir Algoritma GenelKarakter Dizileri kademeli Dönüşüm Click Kurallar Sistemi. IçinBilgi resmi İşlem Click talimatları içerir. OModern Click Bir Kavram olarak Algoritma tanımlamak PEK Çok Çalışır,Ancak, Genel olarak Kabil degisken yok. Ayşe Iken Kadar AçıkOlan Bir Benzersiz Ticari düzenlemeye algoritması Hareket etmeliYönelik Bir sorunun çözümüne bağlılık. GüçlükleriAncak, Ihtiyac adımları sinirli Sayida Aslinda sonra BirBir Sorun çözme hesaplanır. Kararsızlaşma nedeniyledurdurma Sorunu (Bölüm Bakınız 1.5.3), biz yolu YOKTUR2334 VERİ, Algoritma ve stratejilerListeleme 4.1: Ayni algoritmayı farklı UygulamalarısumupLoop int (int n) {int sumupRec (int n) {Toplam int = 0 if (n> 0) {(N> 0) {(n + sumupRec (n - 1)) ise return;Toplam + = n;}n -; else {Dönüş} (0);return (Toplam);}}}Belirli Bir Bir Eylem Algoritma Kural kararya DİRİ çünkü. Görüş Pratik Acidan met oyun inceliklerinineyse onemli deðil. Biz Fikir Bir daha IFAD etmek istiyorumne Bir Iki Algoritma aynıdır Algoritma veya.Örneğin, tum sayıların toplamının hesaplanmasında Göz önündeBir Kadar sınırı s 1, sonra 1 +2 + · · ° + n. Biz aşağıdakileri yapabilirsinizClick Bir Basit Algoritma kullanmak: n surece 0'dan Büyük Olduğu Gibi, n ekleyinn: 1 azaltmak ve Ile işlemi tekrarlayın Click arasındaDaha az Sayida n. listeleme 4.1 Iki farklı Uygulamaları gösterirAyşe Algoritma. Yöntemi sumupLoop kullanırTekrar IFAD etmek döngü sumupRec kullanılanÖzyineleme. Büyük farklılıklara ragmen, ona de Iki Yönten Ayni olduğunuzuOnce algoritması. Ayşe örnekte görebilirsiniz bizve Bu bir Algoritma algoritmanın uygulanması arasındakifarklı olmalıdır.Matematikte boyle özetliyor Üçgen numaraları Denir. Birelle kabuk Gauss toplamı Formül 1 + 2 + · · ° + n = n * (n +1)2 hesaplanabilir.Listeleme 4.2 triangleNum Içinde Yönten Ayni isi cozIki sumup türevleri (Bir Üçgen Bilgisayar SAYI) kullanmak GibiAyşe Formül. Hatta formülü kapsamında olmayan met durumlarda(N ≤ 0), triangleNum Ayni sonucu TESLİM edilir. Algoritmalartamamen farklıdır. Ayşe Örnek gösteriyor ki ve Bir AyniSorun farklı algoritmalar çözüldü Ile.Listeleme 4.1 ve 4.2 'de tum Methods Ayni fonksiyonel varÖZELLİKLERİ (Bakınız Bölüm 1.6.4), böylece Ayni Sonuçları verir.Olmayan fonksiyonel özelliklerinde, bunlar farklı.2344.1 TanımlarListeleme 4.2: Baska Click Bir Algoritma Ayni Sorunu çözmektriangleNum int (int n) {if (n> 0) {return (n * (n + 1) / 2);}else {return (0);}}Yonten triangleNum sumup Iki modeli tercih edilir:Kaynakların tüketimi, ÖZELLİKLER ÇALIŞMA Süresi Esas olarakSadece Bir tek IFAD hesaplar Çok Sayida n daha Küçük Click, Çunku, Iken Ayri Ayri hesaplanan sumup PEK Çok çeşidiSummand eklenir. Ayrica, bunun Click Bir ifadesidirTabii Basit, formülü Bilen birisi. Formülüstatik programı Kodu direct Görünüm, bizi Anlamak Click İMKBDüşünce Click programı Dinamik Akisi Içinde değişik sumupvar Diğer taraftan, orijinal eserler temsil1 +2 + · · ° + n ve Dinamik Bir süreç once sorunAyşe Formül Ayni sonucu hesaplar yeterince açık hiçbir gruba auction.Biz algoritmaları Ile anlaşma yaparken, met kendimize kapı sorular sormakAyşe örneklerde Olduğu Gibi. Bu bir nasil Sorun Hakkında sçözülmüş ve hangi ÖZELLİKLERİ İlgili algoritmalar olabiliraufweisen.Wir amacımız algoritması Click Çok uygundur istiyorum. BULMAK Algoritmalarının Kalite ve büyük boy deðilDil ve sssug.php bağımlı varyasyonlar: Non-fonksiyonel ÖZELLİKLERİfarklı algoritmalar Çok daha farklıAyni algoritmayı farklı Uygulamaları Gibi birbirinden.Biz ayrıntıları uzerinde ki Soyut algoritmaları ele alırsakProgram lama Dilleri ve Uygulamaları.4.1.2 VERİ YapılarıVERİ VERİ birbirlerine gore düzenlenmiş açıklayan Bir yapısıve tek tek nasil VERİ öğeleri (Kısa haber)erişilebilir. Bir VERİ yapısı karakterize etmekÖZELLİKLER Erişim tuşu İşlemleri. BURADA Küçük2354 VERİ, Algoritma ve stratejilerYararlı VERİ yapılarının Çok Sayida Secin:Array: yan yan met Basit VERİ yapısı Yalan unsurlarıbellekte direct ve Bir Bir medicine've etkili sekilde ele,bölüm 2.5 Bakin. Eleman Sayısı sınırlıdıryeni dizinin Nesil tarafmdan belirlenir ve.Bağlantılı liste: Liste Sonraki girişine Giris noktaları herhangi Bir listeBölüm 4.2.1 Bakin. Eleman Sayısı böylece Birsinirli ve eklemek Click EK öğeler tasarlanmamıştırbasittir. Ancak, öğeleri direct Bir ilaç kullanmıyorsunuzulaşılabilir ve Arama belirli öğeler Click pahalıdır.Ikili, Ağaç: onu Giris Giris Kadar noktasında Iki EK,girişleri belirli harman Bir Ile lama karşılanır, BKZBölüm 4.2.3. Benzer ÖZELLİKLER Ayşe SonuçlarıBağlantılı liste Ancak, daha verimli Ürün BULMAKyeni unsurlar ekledi daha karmas ve.Hash tablosu: ÖGE önce Bir Bir Sabit boyutu olan Bir Tablo IçindeEndeksi, Elelement kendisinden hesaplandığı, saklanırBölüm 4.3.3. Surece Tablo olarak Sadece Küçük Bir ParçasıDolu, onun Iki görünümlü Ekleme oldukça verimlidir ve. AtGüçlü, ancak tum istekleri verimsiz doldurma.Yığın: Bir yığın İtibar sırayla tek elemanlar okunabilirve TAM yerleştirme düzeninin tersi kaldırılıroldugunu. Bazi algoritmalar met özelliğinden gerektirir. Orada metOlgular Çok verimli Bir sekilde Diğer durumlarda yığınlar, Küçük duygusu vardir.Program Lama Dilleri Yığınlar, örneğin, sssug.phpİÇ buz geçmiş Click Bir Yönten çağrıları temsil etmek kullanılır.Programlarının tasarımında, gerekli temelinde kararIçin VERİ yapısı Erişim işlemlerinin ÖZELLİKLERİBizim sorunun çözümü en Iyi uyuyor. Sik sik Cesitli birleştirmekdaha büyük boy, örneğin, Click Basit VERİ YapılarıBağlantılı Listel dizi. Bu bir sekilde ilaç olabilirHIZLI Bir sekilde istenen liste sine erişmek ve olanağına Sahip Olmadan,Için Bir dizi indisi Çok Caba Kadar Giris Mağaza -met ÖZELLİKLERİ gerekiyorsa. Basit Iyi Bir Bilgi olarak2364.1 TanımlarListeleme 4.3: bir Bir dizi tarafmdan yürütülen yığın1 public class {IntStack sayının / / yığını2 private int [] elem / / dizi yığın Tutan unsurlar3 Özel int top = 0, / / Sonraki Dize Dizini4Boyutu maksimum, maksimum dizinin 5 / / başlatma> 06. Kamu IntStack (int max) {7 elem = new int [max];8}910 / / elem yığın yerleştirilir11 / / ArrayIndexOutOfBoundsException hicbir Bos Alan12 public void push (int elem) {13 elem [s] = elem;Bir 14 kadar + +;15}1617 / / Üst Giris yığından uzattı18 / / ArrayIndexOutOfBoundsException Giris herhangi Bir varsa19 public int pop () {Top 20 -;21 return (elem [Header resim]);22}23}VERİ VERİ Yapıları genellikle KOLAY Bir yapısı olabilirgerekli tum ÖZELLİKLER Sahip otur.Listeleme 4.3 IntStack Içinde Sınıf Herkesi Click Bir yığın uygularSayılar. Olan Bir dizi boyutu Yığın girişleri saklanırYapıcı tanımlanır. Dizi sınırları asan veya Altina düşmesidizisinde Atılır Bir kere İstisnayığın kullanırken dikkatli olmalısınız - Bakınız Bölüm 5Bize VERİ yapılarının bazi Genel ÖZELLİKLERİ ele Alalım:• Olduğu Gibi algoritmaları Ile VERİ biz kesinlikle Yapıları ayırt olmalıdırve VERİ Yapıları farklı Uygulamaları.Tanımlanmış Bir Bir VERİ yapısı altinda Koleksiyon demekBazi Erişim İşlemleri ÖZELLİKLERİ ve Ile VERİ.Ayni VERİ yapısı Click birçok Yol vardiruygulamak. Örneğin, Bir yığın kullanabilirsinizBunun Yerine Bir dizi Bağlantılı uygulamak liste.VERİ Yapıları programı lama bilgilerini deðil Bagli.2374 VERİ, Algoritma ve stratejiler• Bir diğerinde Bir VERİ yapısı Yardim alabilir. Uygulamak VERİ Yapıları nedeniyle Kendi Erişim İşlemleri Click gercekten vardirbelirlenir ve özelleştirilebilir.• Erişim İşlemleri algoritmaları tarafmdan belirlenir. Yığın IçindeÖrneğin, Erişim İşlemleri Çok Basit sekilde tarafmdanAlgoritma Çok etmektir Kabil. Ama yine de Diğer olarakIle Daha karmas algoritmaları Erişim İşlemleri örneklere bakinaçıklanmıştır. Ayşe algoritmalar tipik olarakbazi VERİ Yapıları. Ayşe ÖZELLİKLERİ belirler.VERİ Yapıları ve algoritmalar Büyük ölçüde değişmektedir. AlgoritmalarÖzel VERİ Yapıları gerektir algoritmalarSadece Yapıları VERİ Ile Birlikte geliştirilebilir.Uygun VERİ Yapıları seçilmesi genellikle daha önemlidirÇunku Ayni VERİ yapısını Algoritmalar, Cesitli algoritmalaryürütülmelidir. Çoğunlukla biz evet Click Ayni verileri kullanmakÇok Amaçlı Bir. Algoritmalar geliştirmek nedenle dikkatli olduğundaSabit: Ne Zaman Bir Bir VERİ yapısı Çok fazla AlgoritmaO Zaman, met Sadece Algoritma Uygun sekilde ayarlarBelirli koşullar altinda Zor, diğerleri Ayni VERİ yapısını kullananAlgoritmalar geliştirmek.4.1.3 Çözüm StratejisiBir Bir strateji altinda Uzun vadeli Yaklaşım anlamına GelirTemel sorular. BURADA Başarı Click Temel, Çok ÖnemliAmaçları, elde Stratejik hedefleri olarak adlandırılmaktadır.İnşaat programcılar Ile Bir İlgili olarak öncelikleama Derece Önemli Stratejik hedefi: basitlik. Bizgenellikle karmas Bir El Ile Yüksek Çunku Biri karşılaştırıldığındagörevlerin buz çözücü madde kaçınılmaz karmaşıklığı, Diğer taraftan, çözülecekAMA Ayni zamanda çünkü Programlar Basit görevleri çözmek Click Çunkudaha kapsamlı ve karmas Hale, Zaman Içinde, genelliklegizemli OLMAK ve. ÖZELLİKLER ikincisi karsi, biz gerekir. Mücadele Biz Uzun vadede Yapıları vardir Sadece Sadece varKolu içeriğin karmas görevleri Almak Click Bir herhangi Sans.Önce Ayşe düzeyde geçerlidir. Bu yazılım Genel yapısı olarak Ikibireysel algoritmalar ve VERİ Yapıları Basit kalmalıdır.2384.1 TanımlarSu met bölümde stratejileri, tum ele alacağızSistemin veya algoritmalar ve Bir Bir VERİ Yapıları basitleştirmeyönelik:Bol ve yönet. Icers karmas Görevler Click Çözümlersik sik BULMAK zordur. Arama Click hızlandırmak, AlmakBazen belirli basitleştirilmesi ÖZELLİKLERİBir Araya Geldi ve Bu bir varsayımlar altinda Çözüm arıyoruz.Sonra olun Emin karşılandığından varsayımlar.S Aşağı. Biz kesinlikle hiyerarşik gidip Bir Sistem insa oncebaşlangıçta Sadece Çok Genel, Soyut düzeyde. Sadeceayrıntılı olarak met düzeyde anlaşılması varsa, biz TedaviAltta biz Kadar Ayni sekilde sistemin bireysel parçaları,Geldi ve tum Parçaları Hayata geçirdik.Aşağıdan yukarıya Bazen TAM Bir tersi strateji mantıklı:Biz düşük s, muhtemelen gerekli programı bileşenleri TemalarıYavaş Yavaş Doğru yolumuza uygulamak ve çalışmak Click Seviyedaha once Yüksek, daha Soyut düzeyde.Kademeli Arıtma. Eger belirli karmaşıklığınıBir Bir görevin büyük boy Miktarı, met Kadar önünde genellikleBu bir tür görevin Sadece Küçük bolumunu tetikler. SonraEksik Parçalar Click Adım Adım Çözüm eklendi.Prefabrik parça Kullanımı. Sik sik tekrarlayan Görevler Clickdirect kullanılabilir Hazir Çözümler vardir.S Önemli HEDEF olarak, Olduğu Kadar basitlik arayışı olarak ikna ediciMet met görünümde amaçla, bazen uygulamada tutmak zordur.Ayşe birkaç nedeni vardir:Büyük Bir Bir tek Algoritma kullanıyor • BirlikteSistem istihdam, Odak verimliliği Sadece Çok KOLAYİlişkileri Hakkında Algoritma ve met görünüyorBütün Ile. Bir basitlik ve Iki sonuçlarıGenel Sistem zarar edebilirsiniz.• Program lama sırasında misjudging tehlikesi varkarmaşıklığı. Kadar Basit ve Bu bir etkili Çözüm düşünülmektedirOlduğu tespit, ancak Diğer insanların met Çözüm AnlamakBir süre sonra artik Kendini IFAD deðil ve.2394 VERİ, Algoritma ve stratejilerZor olduğunda Bu bir tehlike ÖZELLİKLER BüyükturÇözüm ilki ÖZELLİKLER gurur Duyar uzerinde vardir.• En belirgin algoritmalar ve VERİ Yapıları deðilOnun Zaman ve en tr Basit verimli. Genellikle, met s GibiBölüm 4.1.1 'de örneği olarak daha Basit ve etkili algoritmalarve karmas VERİ Yapıları Gerekens Click daha Çok biliyoruz.Ayşe nedenle, basitlik Geliştirme çabası Artar.Ilk Iki nedenlerinin kaçınma Çok Überwindung.Man maliyetisözde bazi bölümleri Click göreve Kendini getirmek gerekirClick Bir Bir daha güzel Iyi Bir DEĞİŞİM ÇözümClick kararsız Stratejik HEDEF görüntülenir de Ayşe. Gel Ama Uzun vadede met kanıtlanmış stratejileri Takip etmek İMKB yarıyorve ayrıntılı düzeyde abartılı verimliliği konuları verir.4.2 Özyineli VERİ Yapıları ve YöntemleriHemen hemen tum büyük boy VERİ Yapıları özyineli olarak tanımlanmıştır. Yani,VERİ VERİ yapısı Tanımı Içinde yapısını Adını(Direct ya da dolaylı olarak) Bir özyinelemeli Yöntemi olarak, ortayaYöntemi (direct veya dolaylı olarak) Içinde Denir. Algoritmalarözyinelemeli VERİ Yapıları uzerinde Dogal Bir sekilde genellikleözyinelemeli yöntemlerle expressible. Onun özyinelemeli Yönten ClickAyni zamanda eşdeğer olmayan özyinelemeli (Yani yinelemeli) yöntemidir. Buna karşılıközyinelemeli VERİ Yapıları hemen hemen olmayan özyinelemeli olduklarıVERİ VERİ Yapıları kullanarak ersetzbar.Wir özyinelemeli Yapıları GözBağlantılı list've ikili, Ağaç.4.2.1 Bağlantılı listesiListeleme 4-4 Bağlantılı uygulanması ana bölümden gösterirTamsayılar listesi buz çözücü madde. Iki tane Sınıf kullanılır. Bunlardan Biri(IntList) tum Herkesi tarafmdan görülebilir VERİ yapısını temsilDışındaki İşlemleri Erişim. Diğer (IntListNode) SağlarGerçek özyinelemeli VERİ yapısı, ancak IçindeGerekli intList ve intList aracılığıyla dışında direkt olarak deðil kullanılabilir;Yöntemleri halk hiçbir gruba nedenle Ayşe, met Sınıf aynıdır.2404.2 Özyineli VERİ Yapıları ve YöntemleriListeleme 4.4: Tamsayıların Bağlantılı listesi1 public class {intList tamsayı / / list2 Özel IntListNode Kafa = null; Kafa tip = / / list Eleman3 public void iğrenç (int elem) {/ / a memb basinda ekleyin4. Kafa = new IntListNode (elem, BAS);5}Listelenen 6 public boolean buz çözücü madde (int elem) {/ / elem?7 dönmek Kafa = null & & head.contains (elem);8}9 public void remove (int elem) {10 / / list eden elem tür geçtiği silElem bulunmazsa, 11 / / liste değişmez12 if (head! = null) {Sildikten sonra 13 = bas head.remove (elem) / / Yeni Bir Başlangıç14}15}16}17IntList tarafmdan kullanılan 18 IntListNode class {/ / liste düğümleri19 Özel int elem / / Gerçek liste öğesi20 Özel IntListNode / Sonraki / önceki = Düğün artik listesi görüntüle21 IntListNode (int elem, IntListNode Sonraki) {22 this.elem = elem;23 = this.next yanında;24}Kalan listesi 25 boolean buz çözücü madde (int s) {edilir Arama / * s * / ... }26 IntListNode remove (int s) {/ * sil e dinlemek Geri kalanından * / ... }27}Bu bir IntListNode Sonraki degisken (line 20) görülebilir kiDeğişkenlerin Türü: Sınıf Ayşe, Bir özyinelemeli VERİ yapısını temsil Ederdegisken tanımlandığı sınıfın adıdır. Bu yuzdenC: IntListNode VERİ potansiyel olarak Sonsuz miktarda tanımlarSınıfın örneğini Sonraki Baska Bir de örneğini değişkenleri içerirSınıf, o Kadar Yeniden Sadece Bir Örnek, met ve içerirvelet. Ilk Bakista öyle görünüyor ki Sanki biz hicbir örneğiBiz Emin varolan Çunku IntListNode sağlayabilirAyni sınıfın Örnek gerektirecektir. Ama yine de dahildirbiz SIFIR de Bir Bir sınıfının örneğini Yerine kullanabilirsiniz Java.Bu yuzden Sonraki bölümde, IntListNode Bir tür örneğini oluşturmakSIFIR içerir. Daha sonra, Bir tür Sonraki örneğini oluşturmakÖrnek ve Benzeri içerir. Özyineli VERİ Yapıları tanımlamak2414 VERİ, Algoritma ve stratejiler???????????????????????????? @?@ ?????????@?@@@ - - - -- - - - -- - - -
?- - -
?
?(A)(B)(C)(D)44411113 '3 '3 '3 '22223333Şekil 4.5: Bazi liste operasyonların grafiksel gösterimiHerhangi Bir VERİ Büyük miktarda peki, AMA Sonsuz Büyük deðil, icindeBir bilgisayarın Bellek safra boşluk asla.Şekil 4.5 semantik bazi Bagli Listel gösterir. Her daire temsilIntListNode buz çözücü madde, daire Sayısı Bir örneğinidegisken elem ve Bir daire buz çözücü madde giden okSonraki. Hayır giden ok degisken değeri içerirSIFIR. Var biz Örnekleri IntListNode örneklerini ErişimKüçük kutular Ile şekillenmiştir intList. DegiskenÖrneği bas Bir Liste Başlığı içerir önce intListIntListNode Örneğin liste, ile baslar. Birer BirerAyşe değişkenin içeriğini işaret giden Kutusu ok.Ayşe SUNUM formu, biz ve Matematik biliyoruzsik sik Bilgisayar Bilimi kullanın. Ayşe yönlendirilirGrafikler. Çemberler ve kutu temsil düğümlerin farklıGrafikler (adından IntListNode) temsil, oklar kenarları gösterir. Pratik olarakTum özyinelemeli VERİ Yapıları yönettiği grafikler elde edilebilirgöstermektedir. Ayşe grafik ÖZELLİKLERİ özelliklerine jelleri karşılıkVERİ Yapıları. Listesi onu Zaman bitis(Yani, tum düğümler birbirine kenarlarından BagliBagli) yönettiği sanat eseri, onu düğümün sembolizeEn Çok Kenar Hayran kalacaksınız. Içerir önce Bizim Özel VaryantDaire SAYI içerir önce Üzerine TAM Bir kutu listesi ve Bir2424.2 Özyineli VERİ Yapıları ve YöntemleriBir liste uzerinde yapilan işlemler Gibi liste özelliklerini ihlal etmemelidir.Sadece Üç Temel İşlemleri intList desteklenir -Ile 4.4 4.6 listeleme Uygulamaları Yöntemi listeleme:• Yeni Bir Liste düğümü basinda oluşturduğu ve iğrenç ekleyebilirsinizVarolan liste düğümü once Bir. Grafik, (b)Şekil 4.5, 4 örneğin ekleyereklistede gösterilen oluşturulan grafik tarafmdan (a). Siparişyerleştirilmesi sağlanır. Listesi (a) oluşturulabilir:IntList intList x = new ();x.add (3); x.add (2); x.add (3); x.add (1);3 Numaralı ama eklenen numarası Ile Iki kez takıldıktan3 'tarafmdan şekil amac 4.5 distinguishability seçilir 3.• Arama listesi ve Bir Bir Numara Hakikat değeri döndürür vardırSirte, Numara en az Bir kez aranır olmadığını belirtenDahildir listesi. Uygulama anaListeleme 4.6 Gereke Kadar liste uzerinde yinelemeli Düğün GöçerGiris bulundu veya daha fazla Düğün artik var oldugunuvardir. BURADA jeller Kısa Devre operatörleri ve & & | |Oyuna: Eski IFAD değerlendirilir yalnızca SayGerçek gibi ya Değerlendirme (Içinde & &) veya (in | | false) elde edilir.• kaldırmak argüman listesi bulundu tip Düğün kaldırırBoyle Bir Düğün varsa sayının içerir. Ayşe makarnalıkIntList uygulanan yöntemin Bir Sonuç döndürür.IntListNode Uygun Yöntemi (listeleme 4.6) verirSonuç olarak silindikten sonra dinlemek Geri Kalani. Ayşe kolaylaştırırözyinelemeli sssug.php, Sadece Bir Düğün Gerekne Zaman ve zammı liste Arama düğümleri bulacağımo var aksi takdirde halefi döner BuldukDüğün kendisi (met) Geri. Sonra Koyun önceZiyaret düğümleri, özyinelemeli sonucu Bir Sonraki degiskenArayın. Brat de degisken intList kaldırmanız gerekirIntListNode kaldırmak için arama sonucu bas. Seti şekil listesi 4.5 (c), çünkü Zaman neler oldugunu gösterirlistesi (b) çıkarın (3) çağrısı: BURADA Ayni adi taşıyan görüşlerinden ibarettirSon tür Üç Düğün (4, 1 ve 3 '), YöntemleriSonra Iki döner, değişkenleri Ile Düğün Çağrı2434 VERİ, Algoritma ve stratejilerListeleme 4.6: ic ice Bulun ve Bağlantılı liste uzerinde silme/ / Bu Methods Sınıf IntListNode bulunmaktadırGeri kalanında boolean (int s) {/ / e ardis Arama listesini içerirDönüş elem == e | | (next.contains Sonraki = null & & (e));}IntListNode remove (int s) {/ / Dinlenme kaldırın e = Ayşe Başlangıç/ / Sonuç sildikten sonra Kalan Birif (elem == e) {/ / bu silinecek İMKB:Sonraki Dönüş; Önceki = / / yeni Kalani (bu Olmadan)} Else if (Sonraki = null) {/ / aksi Halde ve başka bir düğümde:Sonraki = next.remove (ler) / Diğer listelerden / s Sil} / / Ve Kalan Sonraki = new ListDönüş met / / Yeni Bir Liste Ile met kalıntı baslar}Sonraki Ocak düğüme 2-01 aşağıdaki hangi saklanır. DiğerSon Aramalar Dönüş met tip Düğün değişmeden böylece. Kalir Düğün 3 'böylece, liste eden kaldırılır olmasina ragmenHala var ve Düğün içerir 2. Liste zamandan beri BulunanDüğün 3 'ulaşılabilir artik. O Baska BeriOrada Erişilebilir Yol, met bazen Java sistemden BirUzak Hafiza. Ayni sekilde grafik (d)Silin 4 (c). Ama burada, Düğün silinir tip,böylece intList halefi Düğün 1 BAS ayarlanır.
Cerrahinin maliyeti genellikle şans bağlıdır. Örneğinİsterseniz bir bağlantılı liste içinde arama çok etkindirEleman yalnızca sonunda, verimsiz çok başında, amabulunur. Çaba tahminleri zorlaştırıyor. Bir araçrasgele çaba araştırmak için ele almaktırdurumlarda çok sayıda. Yerine arama, sık sık göz önündeFarklı numaralar ve listeler ile arama tekrarladı. Bu yüzdenbir arama işleminin ortalama maliyeti hesaplayabilirsiniz.Bizim başvuruları incelemek bir fark yapar. Örneğindoğrusal en kötü durumda ikili ağaç aramak için nedenÇaba, ancak ortalama sadece logaritmik havai gör. Hesaplaması içinortalama, ne hakkında varsayımlar yapmak gerekir2614 veri, algoritma ve stratejilerSırayla sayılar ağaçların içine yerleştirildi. Genelliklebunu düzgün rasgele sayı dağıtılır varsayalım.Bu varsayım, gerekli bilgi birikimi ile siz, yokOlasılık logaritmik bir çaba üzerinden gösterebilirsinizçünkü ortalama meydana ağaçlar, logaritmikDerinlik (seviye sayısı) var. Ancak biri bakarTeorisinin çok daha yaygın önerilen daha Uygulama bu ikili ağaçlar göstermektedir. Bozucu Hata yanlış hesaplamalar değil yatıyor amaneredeyse her zaman dolaylı olarak kabul eşit dağılımı olmadığı içinverilir. Biz ağacı inşa var ki sayılar vardırhesaplamalar veya ölçüm sonuçları ve ilişkilerde genelliklebirbirlerine. Bu bir tekdüze dağılım değildir. Eğer sadece sayıölçülen yükseklik, örneğin, artan düzende eklemekbir yükselen balon, biz 1-1 almak için eminHiç en kötü çabayla ağaç dejenere ListesiAccess işlemleri. Ağaç sadece bunun için uygun değildir. Ne zamanÖte yandan takın, aslında eşit sayıda dağıtılmış, bir ağaçtırneredeyse her zaman çok verimli. Bir veri yapısı seçerkenBu yüzden gerekli verilerin dağıtımı ödersiniz.İkili ağaçların rasgele dağıtım için geliştirilmiştirVeri faydaları çizmek edebilmek için. Birçok veri yapıları ve algoritmalarşans yararlanmak. Listeleme 4.18 iyi gösterildiği gibi bir karma tabloBu örneği. Esasen, hash tablosu, bir dizi olduğuVeri mevcut değildir. Belirli bir elemanı hangi için diziye endeksibulundu, eleman doğrudan hesaplanır. Bu indeks denirbir karma değeri. Sınıfının örnekleri biz IntHashtable kullanıneleman Absolutwert1 modulo dizinin boyutu hash değeri olarak.Bu değer, dizi indeksi arasındadır. Hash değerleri olabilirsürece tekrar hesaplamaları gibi herhangi bir şekilde hesaplanabiliraynı veri elemanı için sonuç her zaman aynı karma değerdir. Bu yanaKarma tablo indeks aralığı sınırlı, farklı yapabilirsinizVeri elemanları karma değerlerini eşit olmalıdır hesaplanır. BuDurum elemanları birbirleriyle çarpışır. Çeşitli yolları vardırçarpışmalar ile başa çıkmak için, biz örneğin doğrusal bir sonraki serbestTablodaki bir iş arıyor ya da başka bir hash değeri hesaplamak. IçindeListeleme 04:18 aslında aynı dizine daha fazla eleman izinNegatif olmayan bir sayının 1Güç mutlak değeri sayının kendisidir ve bir negatif sayıreddedildiği numarası (olumsuzlama ile pozitif olan) 'dir. Mutlak değer negatif değildir.2624.3 Hesaplamalı MaliyetListeleme 4.18: tamsayı bağlı listeler ile karma tablo1 public class IntHashtable {sayının / / hash tablosuListe 2 özel IntListNode [] sekmesini / / IntListNode. 4.43 kamu IntHashtable (int size) {/ / table boyut> 04 sekmesi = new IntListNode [size];5}6 özel int hashcode (int elem) {/ / hash değeri (h) Hesapla7 dönüş Math.abs (% tab.length elem) / / 0 <= <h tab.length8}9 public void ekle (int elem) {/ / elem bir ekle10 int hash = hashcode (elem);11 sekme [karma] = new IntListNode (elem, sekme [karma]);12}13 public boolean içeren (int elem) {/ / Arama elem14 int hash = hashcode (elem);15 geri sekme [karma] = null & & sekmesi [karma] içerir (elem)!.;16}17 public void remove (int elem) {/ / elem silme18 int hash = hashcode (elem);19 if (sekme [karma] = null) {. 20 sekmesinde [karma] = sekmesini [karma] kaldırmak (elem);21}22}23}ve bağlantılı liste saklayın. Bir program koduListeleme 4.4 intList bu kadar IntHashtable eşdeğer dışındabiz sadece bir liste başı, ancak listesinin başında bir dizi olmadığını varsayalımvar. Karma değeri liste başlığı kullanmak için belirlenir.Bir karma tablo kalitesi kalitesi ile öncelikle kullanılanhesaplanan hash değerleri belirlenir. Iyi üzerinde karma değer sürecebölge genelinde dağıtılan ve indeksi tablo yeterince büyük, tümÇok verimli bir şekilde erişim işlemleri: eklemek var, arama ve silmeEn iyi sadece sabit zaman Aufwand.Wenn ama karma olarakaynı, bazı değerleri tablo daha ağır ya da çok küçüksonra çarpışma tedaviler veya liste işlemleri hakim olacak,bulma ve silme maliyeti böylece doğrusal vardır. IçindeUygulamada birçok uygulama için iyi ölçekli hash tabloları vardırgerçekten çok verimli. Ancak, yanlış boyutlu hash tabloları nedenya büyük bir bellek tüketimi, ya da neredeysesadece uzun erişim süreleri basit bir bağlantılı liste gibi.2634 veri, algoritma ve stratejiler4.4 Bölüm ve kuralBazı bölgelerde çok başarılı bir çözüm stratejisi denirBöl ve yönet (İngilizce böl ve yönet). Bu bir kırıkOlan çözüm programın diğer parçaları alt sorunları birkaç haline sorunubırakır ve sadece doğru kombinasyonu önemserTüm Teilergebnisse.Wir bazı referansla bu stratejiyi göz önündeTamsayılar dizilerle örnekler.4.4.1 ilkesiBöl ve yönet arkasındaki prensip anlamak için, bulmakbir numaraları sıralamak için verimli bir algoritma içinDizi. Bölüm 4.3.2 'de zaten kabarcık-sıralama yöntemleribilmek. Bu yöntem, anlaşılması kolaydır ve tabii kibir dizi için de geçerlidir. Ama oldukça verimsiz olduğunu vedaha efektif bir yöntem arıyorum.Bu kanıtlanmış teknikleri kullanmak ve yararlı olurgünün koşullarına uyum. Teknikleri düşününBirçok ofisleri bir dosya dolabı içinde sıralama kayıtları için kullanılırsaklayın. Örneğin, her biri en kısa zamanda kullanılabilir olarak hareket edebilirhemen kabine dosyalama doğru kişi arıyor ve orada tutmak.Birden fazla dosya aynı anda oluşturulan, bu yaklaşımEğer doğru yere tekrar tekrar bakmak verimsiz, çünküve klasörler arasında dolaşmak gerekir. Kim sık sık bulur yaparyakında daha verimli bir çözüm: Bu kayıtların bir yığın toplar,elle bir şekilde sıralamak, yığın ve yerleri dosyaları varOnu tutan veya baştan sıralanır. Yığınının yönetilebilir bir boyuttade zor değil. Sonra sırayla dosyaları sıralamakdosya dolabı içinde bir toplu iş olarak. Sıralama nedeniyle İhtiyacıönden arkaya doğru dosya dolabı için sadece bir kez geçmesi,çünkü önceki arkasında tek bir yerde bir sonraki hareketsınıflandırılabilir. Bu da arama kolaylaştırır.O sıralanmış iki basit olduğu için bu yaklaşım iyi çalışırDosya yığınına Birleştirme: Bu yan iki kazık yan koymakve her biri iki yığınlarının birinin eylemi sürüyoriçin yukarıdaki. Her hareket karşılaştırmak için yeterli olduğunugereken zamanı bu nedenle doğrusaldır. Bu aynı zamanda bir bilgisayar programı bulabilirsinizuygulamak için basit ama hala sıralama yöntemidir çünkü2644.4 Bölüm ve kuralListeleme 4.19: mergesortArtan düzende sıralanmış 1 / / elem; yöntemi herhangi bir sınıf mevcuttur2 public static void mergesort (int [] elem) {3 if (elems.length> 1) {/ / sıralama?4 int [] sol = new int [elems.length / 2];Için 5 (int i = 0; i <left.length; i + +) {/ / 1 Bölüm6 sol [i] = elem [i] kopyalanır / / bir7}8 mergesort (solda) / / ve sıralı9 int [] sağ = new int [elems.length - left.length];10 (int i = 0; i <right.length; i + +) {/ / 2 Bölüm11 sağ [i] = elem [left.length + i] kopyalanır / / bir12}13 mergesort (sağ) / / ve sıralıBuradan 14 / /, iki sıralanmış parçalar birleştirilir15 (int i = 0, l = 0, r = 0, i <elems.length; i + +) {16 if (r> = right.length / / 2. Bölüm Tamam17 | | açık (l <left.length / / 1. kısım18 & & sol [l] <= sağ [r])) {19 elem [i] = sol [l], / / 1 Bölüm20 l + +;Else {21}22 elem [i] = sağ [r] / / 2 Bölüm23 r + +;24}25}26}27}varsayalım ki bir araya bile iki yığınları,sıralanır. Böl ve yönet stratejisi bir hızla bizikomple bir çözüm, biz ikiye sıralanmasını veri miktarını bölmekSıralama parça ve iki parça, o zaman iki ihtiyaçsadece çeşitli parçalar (iki dosya yığınları gibi)birlikte bir bütün halinde. Kullandığımız parçaları sıralamak içinalgoritmasına özyinelemeli çağırır. Listeleme 4.19 basit bir uygulama gösterirmergesort ki, sıralama yöntemi olarak tanımlanmıştır.
Sıralanması için dizi sadece bir unsuru olduğunda Özyineleme, dururzaten sıralanmış yardımı olmadan çünkü.Bu bölümde önceki bölümlerde aksine, biz türsadece basit diziler veya argüman değil, listeler gibi geçti2654 veri, algoritma ve stratejilerSıralama hakkında daha geride Ağaçlar, bu nedenle daha iyiVeri yapıları konsantre olabilirsiniz. Tabii ki, algoritmalarlisteler üzerinde çalışmak, böylece kolayca değiştirin. Onhesaba dayalı çabanın bu değişiklik önemli bir etkisi vardır:Zaman T gerekli (n) oluşurkopya oluşturma ve montaj için doğrusal karmaşıklığı O (n)çeşitli parça ve zaman 2 · T (n gerekli2) sıralama içiniki parça. Gerekli matematiksel arka plan ileo = O (n log (n)) elde edilir T (n) bir zaman taahhüttür.Bu çok etkilidir. Ancak bu her zaman aynı unutulmamalıdırMaliyet sadece iyi gibi, en kötü durumda ortaya çıkar. Tam olarak değilbellek gereksinimleri açısından algoritma bu kadar iyi görünüyor: Çünkübiz dizi bölümleri tekrarlanır kopya, aynı zamanda bir bellek gereksinimi varO (n log (n)). Birkaç hile ve usta bir işleme ilebellek, biz O (n) için bellek gereksinimlerini azaltabilir.Algoritması uygun olmadığı için o zaman biz burada ancak,Daha basit anlamak.Nasıl Mergesort gösterir, doğal olarak neden böl ve yönetözyinelemeli programları, çözümü yine aynı altproblemler eğerVerilerin bir alt kümesini görev Çözme. Sorunun her parçası değilgenel sorun olarak aynı tür ve bu nedenle nedenÖzyineleme için strateji değil her uygulama. Tersine olarak, temelolarak böl ve yönet hemen hemen her özyinelemeli yöntem bir şekilde,kısmi bir sorunu çözmek için özyinelemeli çağrıdır. Şimdiye kadar varönceki örneklerde görülen bu stratejinin birçok uygulama için.Çözüm olarak, bölme ve ne zaman iyi bir strateji çalışmaları elebir sıralama işlemi için arama yapın: İlk gözkesinlikle de başka yerlerde umut vaat eden bir yaklaşım vardırgörevleri dar bir aralıkta bulunabilir. Muhtemelenbazı koşulların yaklaşım gitmek, otomatik olarak yokyerine getirilir. Bu yüzden şartlar yollarını arıyor, Burada tekrar bir çözüm olarak böl ve yönet stratejisi kullanarak karşılamakolabilir. Zaman tüm gereksinimlerini yeterli arama, başarılıiyi yerine getirilir. Biz herhangi bir ön koşul değilseuygun bir çözüm bulmak, sonra başka bir ile şans gerekiyorDenemek yaklaşım. Böl ve yönet hangi bir teknik değilUygulama her zaman hedefe yol açar. Daha ziyade bir stratejidir kiyaratıcı bir çözüm bulma konusunda destek. Yaratıcılık eksikliğiherhangi bir strateji ile değiştirilebilir.2664.4 Bölüm ve kural4.4.2 Pragmatik bakış açısıDe çaba açısından özellikle kötü durumda mergesortçok iyi bir kesim, şimdi sipariş etmek çok daha yaygın kullanılanQuicksort, Listeleme 4.20 bakın. Quicksort (yani, uygulamada genelliklemergesort göre) daha hızlı ortalama. Bunun nedenleri vardırMergesort veri gerekli kopyalama • çok yüksek maliyetleri,Her ne kadar da gider teorik hesaplamasabit faktörler de göz ardı olarak yansıtılmaz,yapmak ancak çalışma zamanı ölçümleri çok hızlı bir şekilde fark edilebilir,Quicksort önemli parçaları • basit, küçük için sabitBöylece Faktörleri ve kısa süreli bir ortalama sağlar.Çeşitli optimizasyonlar ile Quicksort birçok türevleri vardırbazı durumlarda dönem için devam edengeliştirmeye yardımcı olur. Listeleme 4.20 basit bir varyantı gösterirBüyük kolaylıkla sıralama işlemi tarafından kabul edilmektedir. Quicksortİlk olarak adlandırılan veri yapısının bazı elemanı belirlerPivot elemanı (Almanca: Melek ya da pivot noktası). Daha sonra veri yapısıiki bölüme ayrılır: Bir kısmı sadece öğeleri veya daha az bulunurPivot elemanı eşit, sadece diğer öğeleri daha büyük ya da eşitPivot öğesi. Bu iki parça buna böl ve yönet vardırtekrar özyinelemeli aramaları ve birbirine puan sıralamasıbirlikte bir birim. Basit birleştirme puan yeterliancak her tüm majör ve minör elementlerin sadece bir bölümü bu yanaiçerir. Mergesort farklı unsurları aşmak içinBir pivot eleman karmaşık göz önünde bulundurulması, diğer taraftan, ortadan kaldırıriki sıralanmış listeleri birleştirme karmaşık.Ortalama durumda sonuç quicksort verimliliği avantajlarıöncelikle algoritmanın basitliği ile. Içinde varyantıListe elemanları ve seri puan 4:20 kopyalama ihmalDizinin bölümleri kolayca sıralanması çünkü iki bölümden sıralanmışsadece sol ve sağ indeksi (l ve r) oluşturulmalıdır.Bir tek sol endeksleri l parçası ve i-1 ve ihtiyaçlarınıi ve r doğru sıralama arasında arasında dizi varl ve r sıralanır. Kopyalanamaz gerekmez tür prosedürler,ihtiyaçlarını yerinde sıralama algoritmaları olarak adlandırılır.2674 veri, algoritma ve stratejilerListeleme 4.20: Quicksort1 / / azalan sıralama elem; yöntemi herhangi bir sınıf mevcuttur2 public static void quicksort (int [] elem) {3 quicksort (elem, 0, elems.length - 1);4}Elem endeksi l r indeksi (dahil) için artan 5 / / sıralama6 özel void quicksort (int [] elem, int l, int r) {Soldan sağa 7 int i = l / / çalışırSağdan sola 8 int j = r / / çalışır9 int mil = elem [(l + r) / 2] / / sağ / sol ayırır10 while (i <= j) {/ / i ve j birbirini geçmek?11 if (elem [i] <mil) {/ / tüm küçük özet ...12 i + + / / ... sol tarafında kalır13}14 while (Pivot <elem [j]) {/ / her şeyi Pivot büyük ...15 j - / / ... sağ tarafına kalır16}Burada 17 / / geçerli: elem [i]> = Pivot> = elem [j]18 if (i <= j) {/ / birbirini geçemiyor?19 int h = elem [i] / / takas elem [i], elem [j]20 elem [i] = elem [j] / / if i == j değişmeden21 elem [j] = h;22 i + + / / ve devam ...23 j - / / ... Aşağıdaki endeksleri24}25}26 if (l <i-1) {/ / birkaç öğe sol?27 quicksort (elem, i, i-1) / / sıralama sol28}29 if (i <r) {/ / birden çok öğe değil mi?30 quicksort (elem, i, r) / / sıralama sağ kısmına31}32}Iki parça elemanlarının atama çok değiltüketen, algoritma endeksi değişkenleri üzerinde çalışıyor i ve j hemsol ve sağ kadar ortalarına doğru kadar ive j buluşuyor. Burada sol tarafta öğeler vardırama sağ tarafta olanlarla değiştirilir, sağa ait, ancak, sol aittir. Eşit bir değer olan öğelerPivot elemanı değişimi dahil edilecek. Bu hamlegerektiği gibi sağ ve sol kısmı arasındaki çizgi:I ve j birleştiği noktada ortasıdır. Bazen,2684.4 Bölüm ve kuralgerektiğinde olmaz bile, aynı elemanlar için alışverişinde bulundu. EkGereksiz değiştirin önlemek için Vaka kararlarvadeli düşüş daha artırmak yerine olacaktır.Son Quicksort gibi birleştirme sıralama, ortalama zaman maliyetO (n log (n)), fakat O (n2) en kötü durumda. Gibi, yukarıda iddiagenellikle ancak Quicksort için transit süre ölçülürmergesort için çok daha kısa. Bu scheinbareWiderspruch olabilirböylece quicksort için en kötü durum nadiren oluşur ve netleştirilmesiQuicksort mergesort çok daha küçük sabit faktör vardır.Kritik bir yönü eksen elemanın seçimidir. Değerisonuçta dizi iki bölüme ayrılır bu noktada, kararolduğunu. Bu, her iki taraf eşit olması tercih edilir, çünküsonra O (n log (n)) maliyeti tutmak. İkinci dereceden maliyet ortayaeğer bir tek eleman ile her bölümünün bir parçası ve birgeri kalanı ile ikinci bölümünde yaptı. Çok zaman rasgele sayılarolası. Dizideki her öğe olarak prensipte birPivot öğeyi seçin. Eğer, ancak, örneğin, her zaman ilkSeçilen Eleman, daha sonra ne yazık ki zaten sıralanmış diziye direkt bağlı olankuadratik çaba: Pivot elemanın tek unsurudursol. Bu nedenle, orta Listeleme 04:20 de pivot elemanalınır. Emin olmak için, bazen ilk karşılaştıranElement, son eleman ve orta seçilmiş bir eleman veBu orta değeri. Iyi seçilmiş bir dönüş için bir garantiÖğe yok. Eğer giderleri mutlaka kare hariç tutarsanızistiyor, örneğin, mergesort geri götürür.4.4.3 Yapısal benzerliklerÇok önceden sunulan yöntem arkasında benzer bir yapı yer almaktadır.Örneğin, Bölüm 4.3.2 bir ikili ağaç kurdukelemanları sıralanır ve görüntülenir. Bu gider oldugerekli ortalama ve O (n2) en kötü durumda O (n log (n)) arasında.Quicksort kullanarak bir dizi sıralama için, aynı maliyet var.In: bir tesadüf, ancak ortak bir yapı arkasındaHer iki durumda da iki parça tekrar bir ortak var, bir solve sağ alt ağaç ya da bir sağ ve sol kısmıSıralama. Kesin dağılımı, şans eseri her iki durumda da kontrol edilirve yapıların dejenere olması mümkündür - Bir ağaçListesi, dizinin iki eşit bölünmüş yarısını tekrar tekrar2694 veri, algoritma ve stratejilerListeleme 4.21: bilinmeyen bir numara tahmin etmeye çalışır sayısı/ Rasgele sayı için çalışmaların sayısı / max numaraları öğrenmek içinpublic static int deneyin (int max) {zuErraten = new (max) ödemeden biliyordu ödemeden biliyordu;int i = 0, / / alt sınırint j = max - 1, / / üst sınırfor (int count = 0;; count + +) {/ / sayısı çalışır:int k = i + ((j - i) / 2) / / orta deneyinif (zuErraten.kleiner (k)) {j = k - 1 / / yeni üst sınırı} Else if (zuErraten.gleich (k)) {sayısı dönmek;Else {}i = k + 1, / / yeni alt sınırı}I ve j karşılaştıklarında} / / döngü en geç sona erer}Cleave sadece bir öğesi. Benzerlik farklı olmasına rağmen birHedefleri, tüm diğer veri yapıları ve temel rağmenListeleri için veri yapılarını yer ve algoritma sıralamadahildir. Için bile bu tür benzerlikler bazen zortanımlamak, onlar hızlı bir şekilde biraz tecrübe ile tanımlayabilirsiniz.Bilgisayar programlama sanat yapıları için genellikleBilinen ve benzer yaklaşımlar problem çözme yapılandırılmış belirlemek içinSorunları ele. Zamanla birçok yapı olsunbizim programlarda değişik şekillerde yüklemek biliyoruz.Olmayan pek çok yapı günlük deneyim alınırsadece programlama bağlamında.Örneğin, Listeleme 4.21 yılında yöntemi deneyin alınmümkün olduğunca hızlı bir şekilde rastgele bir sayı tahmin etmeye çalışır ve sayısıDönmek için çalışır. Bunun için bu büyük olasılıkla bir arama yordamı kullanınzaten Bölüm 1.1 'de sayım oranları denediğinizsezgisel geliştirdik: Biz mevcut düşününOrta bir numara ile şans denemek Aralığı veZaten bulunamamıştır varsa, mevcut sayısını sınırlaryaklaşık bir buçuk arasında değişmektedir ayakta. Birkaç denemeden sonrasayı aralığı çok sınırlı olduğunu ancak bir diziSoru geliyor. 0 ile 99 arasında bir sayı, biz en fazla olarak var2704.4 Bölüm ve kuralLİSTESİ 4.22: sıralanmış bir dizi ikili arama/ / Elem x bulun ve başka -1, onun endeksi geri ver/ / Elem artan şekilde sıralanmış olmalı, herhangi bir sınıfpublic static int index (int x, int [] elem) {int i = 0, / / alt sınırint j = elems.length - 1, / / üst sınırwhile (i <= j) {int k = i + ((j - i) / 2) / / orta deneyinif (x <elem [k]) {j = k - 1; ileri / arama / bağlantılar} Else if (x == elem [k]) {k dönmek;Else {}i = k + 1; ileri / sol / arıyor}}-1 dönüş / / x bulunamadı}7 ortalama biz yaklaşık 5 girişimleri gerekecektir tahmin etmeye çalışın.Genel olarak, mümkün olan en yüksek sayıda ihtiyaç n yaklaşık ld (n)Çalışır. Her zaman biz girişimi, çünkü Logaritma almakArama kapsamı yarısı azaltmak için. Ve giderdeneyin bu nedenle de O (log (n)), ld (n) = log (n) / log (2) geçerli olduğundan, gelirve log (2) sabit bir faktör. Bu da ortalamave maksimum çaba, sadece ağır en rakamları berisayı sınırlı bulunacak. En çok bu bulacaksınızYardımı olmadan doğal olarak numaralarını tahmin Usul velogaritma bilmeden. Bu, uygun bir göstergesidirYapılar zaten bilinçaltı bilinmektedir. Bizdaha fazla almak yeterlidir. Ne yazık ki, algoritmalar kadar iyi olabilirher zaman çok basit bulmak, ancak herhangi bir uygulanabilir çözüm yöntemibiz sezgisel sorunların çoğu için bulabilirsiniz.Gibi Listeleme 4.22 görüldüğü gibi, algoritma bir tahmin olabilirikili arama bilinmiyor sayısı daha da etkin geliştirmekSıralanmış bir dizi numara aramak algoritma. Yapılarve böylece çaba hemen hemen aynıdır. Biraz hayal gücü de vardır ileIkili arama ve ikili arama arasındaki benzerliklerAğaçları tespit etmek. Hatta ikili ağaç arama ortasında başlıyor2714 veri, algoritma ve stratejilerve sol veya sağ alt ağaç devam ediyor. Farklı bir ikili dahaAğaç sıralanmış bir dizi bir listesine bozulur olamaz.4,5 Soyutlama ve GenericityŞimdiye kadar sadece tamsayılar veri yapıları kabul var. GirişGenellikle, aynı veri yapısı örneklerini hemen hemen herTipleri dahil. Pratik sonuçlar, ancak sorun olduğunu bizJava her zaman veri öğelerinin türleri belirtmeniz gerekir. Biz alırsakTamsayılar listesi ihtiyaç dizeler bir listesi olduğu için,çünkü değişen kod ve çünkü diğer tip tüm listesiKarşılaştırma işlemleri yeniden yazın. Bu bir en azından kısmi bir çözümgenericity sağlar: Bu dil mekanizma bize program kodu veriyorbağımsız bazı türleri korumak ve yaygınlaştırılması.Birlikte genel kod ile de yararlıdırVeri yapılarının soyut tanıtmak.4.5.1 Genel veri yapılarıListeleme 4.23 genel bir listesini program kodunu gösterir. Bir itibarenlistelerinin genel liste birçok farklı türde üretebilirolan - bu yüzden adı. Bu nedenle, gen <String> bir liste listelerdizeleri, bilinmeyen gen listesi <UnbekannteZahl> bir listeRastgele numaraları ve gen <Object> keyfi nesnelerin listesini listeler.Genel listenin kodu birkaç nokta sadece farklılıkListeleme 4.4 ve 4.6 tamsayı listesinin kodu ile:• Bir sözde tip parametreleri boyunca yerine eleman türü intBir kullanılır. Tür parametresi o, kendisi bir tür değilancak bir tür ya da simgeler daha sonra bir tür ile değiştirilir.Genel sınıfların • Tanımlar meydana sınıfları beyanAçılı ayraçlar yazın parametreleri (<...>). IçerecekHer iki gen listeleri ¶ ¶ sınıf ve ListNode başına bir sınıfBir tür parametresi A. BeyanıGenel sınıfların isimleri • Tüm diğer olaylar (ancakMarkalar) da türlerini içeren parantez işaret ediyorhangi genel tanımına tür parametresi2724,5 Soyutlama ve GenericityListeleme 4.23: Genel bağlantılı liste1 public class gen listeleri ¶ bir örneği {/ / Liste¶ 2 özel ListNode kafa = null; / / liste başlığı3 public void ekle (A elem) {/ / a memb başında ekleyin¶ 4 kafa = new ListNode (elem, baş);5}(A elem) {/ / elem listesinde 6 public boolean içerir dahil mi?7 dönmek kafa = null & & head.contains (elem);8}9 public void kaldır (A elem) {10 / / elem ilk geçtiği silBulunmazsa eğer değişmeden 11 / / elem listesi12 if (head! = null) {Sildikten sonra 13 baş = head.remove (elem) / / yeni bir başlangıç14}15}16}Sınıf 17 ListNode ¶ {/ / liste düğümleri18 Özel bir elem / / gerçek liste öğesi¶ 19 özel ListNode sonraki / / önümüzdeki = düğüm artık listesi20 ListNode (A elem, ¶ ListNode sonraki) {21 this.elem = elem;22 this.next = yanında;23}Arama listenin geri kalanında 24 boolean içeren (A e) {/ / eE.equals 25 return (elem) | | (next! = null & & next.contains (e));26}¶ 27 ListNode kaldırmak (A e) {/ / artık listeden e çıkarmak28 if (e.equals (elem)) {/ / bunu silmek için mi?Sonraki 29 dönmek;Else 30} if (next! = null) {31 = sonraki next.remove (lar);32}33 Bu dönüş;34}35}Sınıflar değiştirin. Örneğin, gen liste <String> türüdürgenindeki bir sınıf her geçtiği listeler ortaya çıkmaktadır ¶tür parametresi bir dize ile değiştirildi. Bir örneği<string> Gen liste ayrıca dizeleri listesidir. İlk baştaGenericity temas, bu şaşırtıcı olduğunu da¶ ¶ ListNode gen listeleri sınıfları ve türü ListNode ¶oluşur. Ayrıca, neden bu ListNode <A> türü için standları2734 veri, algoritma ve stratejilerbiz türüne göre A yerine ortaya çıkmaktadır, bir anlamına gelir.Bir kez bir dize ile değiştirilir, aynı zamanda ListNode açılımı ¶ListNode <String>. Tecrübesi ile kullanımıDoğal tür parametreleri yerine her türlü.== Işleri, malzemeleri kullanarak herhangi bir nesne • karşılaştırılmasıAma örneğin, ipler istenilen sonuç değildir.Bu nedenle, karşılaştırma kullanarak ile yapıldı ==yerine eşittir. Bu yöntem, programlanabilir, böylece tarafındanBu karşılaştırma çok farklı uygulanabilir.Bu genel liste esnek hale getirir. Bir yapabilirsinizAncak, genel sınıflarda eşit genel olarak söylemiyorum== yerine kullanmaktır. Fark anlamsal edilir.Bu karşılaştırma tür tabi bağlıdır.Oluştururken özellikle Genericity, çok değerli bir araçtırkonteyner sınıfları olan örnekleri diğer nesneleri yani sınıflarıniçeren ve erişimi düzenlemek. Aslında uygulamakKonteyner sınıfları veri yapıları. Sadece bir ihtiyaçBu konteyner yazmak ve almak için genel konteyner sınıfKonteyner içeriğin her türlü Sınıflar.Nesne yöntemi önceden tanımlanmış eşdeğerdir eşittir ==ancak 04:24 Listeleme öğrenci, örneğin geçersiz kılınabilirolmak. Öğrenci iki örneğini tam olarak olacakolgunluk numaraları aynı ise eşit sayılır. Böylece sağlar<Student> her zaman doğru olmadığını gen listelerinin bir örneğini içerirgerekli olgunluk herhangi bir öğrenci örneğiaynı bir öğrencinin bulundu örneği istenen olsun, birya da değil. Bile dize geçersiz kılar, böylece tüm eşittirDizeleri karakter karşılaştırılır.Genericity için daha az cazip bir alternatif olarak, bir olabilirContainer sınıfı, istenen içerik yazmak da olabilirbiz gerçekten istiyoruz. Bu bir bağlı olurEserin tüm örneklerini içerebilir listesi. Ancak, içindeBu alternatif önlemek için pek mümkün olduğunu diğer nesneleriveri yapısı içinde toprak, var istediğiniz gibi. Genericity önceJava sürüm 1.5 ile birlikte, bu vardıAlternatif kullanın. Bu arada, bu teknoloji eski haline gelmekte ve yeniHala zaman zaman eski Java kod rastlamak eğer üzerinde çalışan2744,5 Soyutlama ve GenericityListeleme 4.24: karşılaştırma özel bir yöntem ile bir sınıf alıntıpublic class Öğrenci {private int mnr / / olgunluk... / / Diğer değişkenler ve kurucularpublic boolean {/ / bu gibi (Object o) eşittir?dönüş this.getClass () == that.getClass ()Mnr == & & ((öğrenci) o) mnr.;}... / / Diğer yöntemler}se tür programlanmıştır. Bunun yerine genel olmayan konteyner sınıflar arasındaNesne örnekleri, artık gereken sadece genel içerenKonteyner sınıfları yazın. Eğer gerçekten nadir bir,bir veri yapısı ihtiyacı keyfi içerebilir ki, bu oluyorAncak, Menter Nesne tarafından tür parametresi yerine. ÖrneğinHerhangi bir nesne türünü gen listesi <Object> listesiiçerir. Derleyici garanti Ancak, örneğin bir örneğiniGen listesi <String> sadece dizeleri içerir.Genericity sadece sonuçlanan Java daha sonra eklenen bu yanaEski sürümleri ile gerekli uyumluluk Maalesef nedeniyleDiğer dillerde bulunmayan bazı dezavantajları:Bu gen listeleri gibi genel türleri • isimleri keskin varKullanılan hemen hemen hiç parantez semantik bir anlam,ve başka bir nedenle gidin. Hata mesajı yokbiz açılı ayraçlar unutursam. Iyi durumdabiz anlaşılmaz bir mesaj derleyici (not denir) olsun.Biz köşeli parantezler özel önem ihtiyacımız var yani,anlamsal yanlış programları önlemek için.• tip parametreleri gerektiği yerde türleri meydana olmamalıdırvardır. Örneğin, bir tür parametresi hiçbir örnek olabilir, bir tür parametresi örnekleri bir dizi üretme ve yaratmaiçerir. Ayrıca instanceof ve türünü kullanarak sorgular yazın atmalarınıtür parametreleri kullanımı kısıtladı.• tür parametreleri sadece türleri (sınıflar tarafından hangi başvurabilirtanımlı türler) değiştirilebilir, ancak ilkel tarafındanGibi int, double, ya da mantıksal olarak Türleri.2754 veri, algoritma ve stratejilerSon nokta çünkü aslında özellikle ağır tartmak gibi görünüyorliste tamsayılar listesinde yerini genel olabilir, ancak olmayabilir.Bu neyse, o kadar kötü değil. Bu sorunu aşmak için,orada her ilkel türü için Java ve karşılık gelenReferans türü. Referans bir int türü tamsayı için, hangi mantıksal içinBoole vb. Böyle bir başvuru türü basit birSınıf kim (bir kutu ya da kutu gibi) bir örneği tanımlarilgili ilkel tipleri ve erişim ve bir diziÜzerinde karşılaştırma işlemleri içerir. Örneğin, karşılaştırma eşittirBu derslerde, kutuya değerler. Bunun yerine izin türü<int> Gen liste için, gen listeleri tamsayı türünü kullanabilirsiniz.Örneğin, x int listesinin bir örneği ve bir örneğiGen listesi tamsayı, biz list.Add (x) arayabilirsiniz. Derleyiciotomatik olarak Tamsayı bir örneğini x dönüştürür. Bu otomatikDönüşüm autoboxing adı verilen ve otomatik dönüşümautounboxing bir int içine Tamsayı bir örneği. Javaautoboxing ve ilkel türleri için autounboxing veya desteklerilgili başvurusunu yazın.4.5.2 Detayları GenericityBasit veri yapıları için güzel basit genericity İşlerilisteler, ikili ağaçlar veya sıralama algoritmaları gibi, ama bizböylece henüz uygulanmadı. Bu boyut arasındaki karşılaştırmalar vardırVeri yapısı öğeleri gerekiyordu. Boyut karşılaştırmalar değilyararlı veya olası tüm nesneler.Ciltli genericity bu sorunu çözer: Bir bildirdiğinizdeTip parametresi bir engel olarak bir tür eklenir. Bariyerininbağlı tip parametreler sadece bariyer bir alt tipi olabilirolarak değiştirilmesi ve bu nedenle bariyer bir örneği olarak erişilebilirErişilebilir tür parametresi bir örneği Yöntemleri.Listeleme 04:25 bir uzantısı bu kavram göstermektedirListesi: özetlenebilir öğelerin bir listesini eklenen tüm "değerler"olmak. Başka bir şey her öğe türü için, "değer". Delalet Bu yöntem değerini sadece bir arama belirlemekDeğerini verir. Şimdi değil, her nesne böyle bir yöntemi vardır. Bundan dolayıBiz A, bu tür parametresi sabit bir sınır belirleyebilirsinizyöntem ilan ara HasValue alt türleri yalnızca2764,5 Soyutlama ve GenericityListeleme 4.25: toplamı ile Genel Listesiortak arabirim HasValue {/ / bir engel türü olarak kullanılanint değeri () / / Bu yöntem gereklidir}public class SumList A A üzerinde HasValue> {/ / sınır uzanırÖzel ListNode <A> kafa = null;Özel int toplam = 0;public void ekle (A elem) {/ / elem HasValue bir örneğidirkafa = new ListNode ¶ (elem, baş);toplam + = elem.value () (dolayısıyla / / elem.value) çağrılabilir}...}public class Öğrenci bariyer HasValue {/ / Türü uygularprivate int numberOfCourses / / bu nedenle SumList <Student> sağlarpublic int değeri () gerekli yöntemi {/ / uygulamanumberOfCourses dönmek;}}tür parametresi değiştirilmelidir. <Student> Örnek SumList olarakböylece öğrenci arayüzü ve değer uygular çünkü izin verdi. AncakSumList <Object> izin verilmez. Sözdizimsel, engeltür parametresi adını yazın parametre bildirimindeve sivri parantez içine uzanır. Burada her zaman uzatırbariyer bir arayüz olarak tanımlanmış olsa bile. Genel içindeGörünür bariyer yöntemler ve değişkenler sınıf olabilirtür parametresi örnekleri tarafından erişilebilir. Ilişkili değilBir engel olmadan, yani tür parametreleri, hangi aracılığıyla bir karşılıkNesne türü parametre bağlı bağlı.Bir ağacın genel uygulama başka bir mücadeleZorluk: iki unsur arasında bir boyut karşılaştırma sadece yararlıdırher iki eleman da aynı şekilde benzer bir tür varsa.Yöntemi, bu nesnenin bir örneğini eşit karşılaştırırhangi bilinmeyen bir örneği ile bir karşılaştırma çünkü mümkündürDiğer tür her zaman yanlış sunabilirsiniz. Bu basit çözümdeğil boyut karşılaştırmalarda. Biz emin olmalısınız resmiKarşılaştırma yöntemi parametreleri istenen türü vardır.2774 veri, algoritma ve stratejilerListeleme 4.26: Gerekli sınıfları ile Genel ikili ağaçortak arabirim Karşılaştırılabilir <T> {/ / sonuç <0: Bu <kiint compareTo (yani T) / / = 0: this.equals (o)} / /> 0: Bu> dapublic class GenTree A {/ / ikili ağaç Karşılaştırılabilir ¶> uzanırÖzel TreeNode ¶ root = null;public void ekle (A elem) {/ * bir elem eklemek * / ... }public boolean (A elem) içeren {/ * arama elem * / ... }public void (A elem) kaldırmak {/ * sil elem * / ... }}sınıf TreeNode <A ağacında {/ / düğüm Karşılaştırılabilir ¶> uzanırÖzel bir elem / / true elemanıÖzel TreeNode <A> sol = null; / / sol alt ağaçÖzel TreeNode <A> sağ = null; / / sol alt ağaçTreeNode (A e) {elem = e;}boolean ağaç (A e) {/ arama / e içerenint c = e.compareTo (elem) / karşılaştırma / sonucuEğer sol alt ağaç (c <0) {/ / e?! Sol left.contains dönüş = null & & (e);} Else (c == 0) {/ / s bulursareturn true;} Else / * c> 0 sağ alt ağacında * / {/ / e?! Sağ right.contains dönüş = null & & (e);}}eklemek void (A e) {/ * Bir ağaç * / e ekleyin ... }¶ TreeNode kaldır (A e) {/ * sil e ağacından * / ... }}public class Öğrenci Karşılaştırılabilir {<Student> uygularÖzel int mnr = ...;public int compareTo (öğrenci o) mnr arasında {/ / karşılaştırmathis.mnr dönüş - that.mnr;}public boolean {/ / uyumlu (Object o) eşittir: compareTodönüş this.getClass () == that.getClass ()Mnr == & & ((öğrenci) o) mnr.;}}Yinelemeli bağlı Genericity olduğu gibi, bu bir çözüm sunuyorListeleme 04:26 bir ikili ağacın genel uygulama kabataslaktür parametresi A Karşılaştırılabilir <A> bağlı olduğunu gösterir düzilan tür parametreleri kendi bariyer bu nedenle mevcut2784,5 Soyutlama ve Genericity- Özyineleme sekli. Karşılaştırılabilir <T> içinde tür parametresi TcompareTo formal parametre türünü belirler. TarafındanBariyer olarak tekrarlama, T A ile aynı tip ile değiştirilirse¶ GenTree var, bu yüzden compareTo aynı tür bu ve buvar. Ağaç işlemleri gibi örneğinde, bu yöntem çağrısıbulunduğu gösterilmiştir. Liste Öğrenci 04:26 sınıf uygulananKarşılaştırılabilir <Student> ve böylece o bir alt koşulu karşılayan¶ Karşılaştırılabilir biridir. Yani GenTree <Student> izin verilir.Uygulamada, biz tanımlamak için <T> Karşılaştırılabilir arayüzü gerekmezsadece liste 4.26 önceden tanımlanmış gibi zaten çünkü. Neyse ki,birçok önceden tanımlı sınıflar bu arabirimini uygular. ÖrneğinKarşılaştırılabilir tamsayı tamsayı tarafından yürütülmektedirDize ve Karşılaştırmalı <String>. Bu yüzden kolaycaTürleri ve nasıl GenTree tamsayı GenTree <String> kullanın.Veri yapılarının 4.5.3 soyutGenericity soyutlama belli bir formu verir, bizBizim için farklı veri yapıları üzerinde, bir kez yazma KoduEleman tipleri kullanılmıştır. Kendilerini hala veri yapılarıher zaman aynı. Ayrıca, sık sık farklı bir form var istiyorumsoyutlama, ama aynı eleman türü kalır, ancakVeri yapıları değişebilir. Biz erişmekVeri toplanması gerektiğini, ancak detay listeleri arasında,Ağaçlar, vb farklıdır. Soyutlama son biçimi üzerinde olabilirAlt ilişkileri gerçekleştirmek.Listeleme 4.27 alt türü ilişkilerin kullanımı bir örnek gösterilmektedirgenel türler arasında. Arabirimi Koleksiyonu <E>veri yapıları birçok çeşit vardı yöntemler açıklanırbeklenmektedir. Bu yüzden mümkün olduğu gen listeleri gibi birçok sınıf ¶¶ GenTree ve bu arabirimini uygular. Alt ilişkilergenel türleri yanı sıra genel olmayan çalışır.Supertypes ve özellikleri, alt türünü parametrehangi ilişki supertypes kümesi, böylece örneğinTür parametresi bir gen listesi parametre E tipi <A>Koleksiyon <E> yerini aldı. Alt türleri türü parametre karşılaştırıldığında olabilirsupertypes olanlar daha sınırlı olması. Bu nedenle,Bariyer GenTree türü parametre ¶ ¶ Karşılaştırılabilir2794 veri, algoritma ve stratejilerListeleme 4.27: Veri toplama: arayüzü, uygulama, kullanmaortak arabirim Koleksiyonu {<E>e eklemek için void ekle (E e) / / veri yapısıboolean içeren (E e) / / e veri yapısı içinde yer alır?kaldırmak void (E e) / / e (varsa) silin}public class ¶ ¶ {Koleksiyon gen listeleri uygular ... }public class GenTree A Karşılaştırılabilir ¶> uzanırKoleksiyon {uygular ... ¶ }bilinen kelimelerin public class kelime sinüsler {/ / yönetimÖzel Koleksiyon <String> kelimeler; kelime / / tahsilatkamu kelime sinüs () {kelime = new GenTree <String> / / veri yapısını sadece burada}public boolean isNew (String kelime) {/ / kelime yok?if (words.contains (kelime)) {return false;Else {}words.add (word) / / sonra kesinlikle varreturn true;}}}bağlı, ancak E <E> koleksiyon. Ancak, tarafındantür parametresi kısıtlayan de alt türü ilişkilerini azaltır.Örneğin, alt <String> KoleksiyonuGen listesi ve aynı zamanda <String> GenTree <String> Dize bir alt tipi olduğu içinbariyer. Ama sadece <UnbekannteZahl> Koleksiyonu varalt <UnbekannteZahl> gen listesi. Çünkü bariyerGenTree <UnbekannteZahl> yasaktır. Birbirine aksine uygun olabilirSupertypes yazın parametreler daha sınırlı değilalt türleri daha. Listeleme 4.26 bir öğrenci olarak, supertypes olabilirAlt hiçbiri olmasına rağmen yazın parametreleri var. Ayrıca altsupertypes meydana gelmez tür parametreleri olabilir.Listeleme 04:27 soyut ve anlamlı kullanımı bir örnektirKoleksiyon <E> gibi veri yapıları. Kelime sınıfı sinüsler başardısözcük kümesi. Her aramak sormak isNew bir olsun280
4,5 Soyutlama ve GenericityÖzellikle sözcük kümesi bulunmaktadır. Değilse, eklenir.Sinüsler için Word, o (ayrı etkinlik itibaren) yapar, ilgisi yokturister bir bağlantılı liste verileri, ikili ağaç ya da birdiğer veri yapısı saklanır. Sadece Datenstuktur üretmek içindoğaları bilinmelidir. Biz yararlanmakDeğişken kelime türü olarak supertype veri yapısı tipiyapıcı tek bir yerde dışında bilinmemektedir. Böylecebiz program değişikliği ile kolayca veri yapısı türünü kullanabilirsinizbaşka sadece tek bir yerde değişim. Bu artışİdame. Fazla soyutlama büyük programlarda, bu formuUygulama detayları yine bu küçük örnekte çok daha önemlidir.Genericity ve alt ilişkiler soyutlama farklı biçimleridirgenellikle değiştirilemez kullanıma hazırbiz Bölüm 3 gördüğümüz sind.Wie kullanılan, alt-türü ilişkileriuygulama ayrıntılarını kapsüllü tutmak ve yerel ileIkame değişim ve program parçalarının yenidenkolaylaştırmak için. Yukarıdaki örnekte görüldüğü gibi, bu da alt tip ilişkiler için de geçerlidirgenel türleri hakkında. Genericity kendini ikame desteklerdeğil. Bunun yerine, doğrudan bize genericity kaydetmek yenideniş konteyner program kodu yazarkenSınıflar. Genericity bize, ardışık resmi türleri bağlı sağlarOnlar aynı sınıfları, böylece parametreleri kısıtlamaolan yöntemlerdir. Biz compareTo örneği varŞekil 4.26 görülmektedir. Böyle bir alt ilişkiler açabilirsinizyok. Pratik programlama, biz her iki şekli gereközellikle genericity hemen hemen her yerde soyutlama, alt ilişkileri,Konteyner sınıfları ile ilgilidir.Diğer bazı Java destekleyen genericity kavramları ile bağlantılı olarak,soyutlama için kapasitesini genişletmek için. Bu nedenle, bireyselYöntem, sadece tüm arabirimleri veya sınıfların genel olarak.Örneğin, tanımlanmışListeleme 4.28: Genel kimlik fonksiyonu¶ Statik ident (A x) {x dönmek;}sadece sadece biçimsel parametre döndüren bir genel bir yöntem.Parametre x türü ve sonuç türü iki gereğidir2814 veri, algoritma ve stratejilerTür parametreleri kümesi, açılı parantez içinde olan doğrudanSonuç yazmadan önce ilan etti. Bir olan bir yöntemArgüman ve herhangi bir referans arama türü bir sonuç alırgeri aynı tip. Biz algoritmaları ile anlaşma bu yana,Veri Yapıları ve genel olarak oldukça iyi bir çözüm stratejileriYöntem bu konuda daha fazla açıklamak istemiyorum, anlayabiliyorum.Başka bir kavram joker çeşitleri, türleri, türü parametreleritamamen veya kısmen yerine tanımlanmamış olabilir. Örneğinbir Collection <?> bilinmeyen içeriği ile bir veri yapısı yazın.Koleksiyon <bir örneği? genişletir> ödemeden biliyorduolmayan tanıdık sayısı herhangi bir alt unsurları içerir veKoleksiyon <örneği? süper için> ödemeden biliyorduHer tür örnekleri, ham sayıların supertype bilinmektedir.Bu joker türlerinin mantıklı kullanır da karmaşık ve vardırbüyük ölçüde kısıtlanmış. Neden bu ders notlarında gitmiyordaha yakın biri.4.5.4 YineleyicilerGenellikle bir, sırayla bir kabın tüm unsurları okumak istiyorumbir dizi sınıf oranları ne biz zaten sayıda benzerDiğer okunmuş. Biz bir yineleyici ile bunu gerçekleştirmek.Listeleme 4.29 sınıf Baskı yineleyiciler nasıl kullandıklarını gösterenolmak. Bu örnekte, bir konteyner içinde tüm dizelerisatırları sırayla okumak ve görüntülenir. Bu ifade üretirlines.iterator () konteyner yeni bir yineleyici i döndürür.Her arama i.next için () konteyner bir dize döndürürarka ve i.hasNext () diğer dizeleri olup olmadığını kontrol eder.I.next () manzaralı yineleyici durumunu değiştirmez, ama bırakınKonteyner kendisi değişmez.Bir yineleyici oluşturulabilir hangi bir konteyner aynı zamandaAgrega. Java'da her birim arayüzü Iterable <E> uygulamalıdırbir yineleyici oluşturmak için tek yöntem içerir.Ayrıca Iterable <E> <E> Toplama uzatır ve bu nedenle destekYineleyiciler. Iterator arayüzü bir yineleyici yöntemleri anlatılmaktadır.Tüm bu arabirimler Listeleme 4.29 benzer (ama kısmenbiraz daha büyük) zaten Java sistemde tanımlı.2824,5 Soyutlama ve GenericityListeleme 4.29: Bir yineleyici kullanaraktoplu üzerinden ortak arabirim Iterator <E> {/ / yineleyiciGeri sonraki öğeyi ver A (bir sonraki) / /boolean hasNext () / / diğer unsurlar var mı?}ortak arabirim Iterable <E> {/ / impl agrega. Iterable <E><E> Iterator iterator (); / / toplamda yineleyici oluşturma}/ / Örnekleri Koleksiyonu agrega olarak <...>:ortak arabirim Koleksiyonu {<E> Iterable <E> uzanır ... }public class baskı {/ / kullanım yineleyici (örnek)Özel Koleksiyon <String> hatları;kamu baskı (Koleksiyon <String> ls) {lines = ls;}public void print () {<string> Iterator i = lines.iterator ();{(i.hasNext ()) iseSystem.out.println (i.next ());}}}Listeleme 4.30 bir yineleyici uygulanması temel bölümlerini gösterirbağlantılı liste üzerinde. Yineleyici kendisi bilir önemlidirListede şu anda nerede olduğunu. Bu değişkenListItem düğüm ¶. Her yürütme yanındaDeğişken içeriği geri itti düğüm listesidir.Küçük bir ek komplikasyon uygulanmasında ortayaAslında bu ListItem <A> örneklerini maalesef tarafından 04:30 ListelemeListNode <A> tarafından izin verilenler erişim. Bu sorun nedenisözde alıcı yöntemleri çözülmesi, değişkenleri okuma erişimi sağlar.Genellikle, çok iyi gidiyor alıcı yöntemleri önlemek istiyorAma, başka bir nesnenin değişkenlerine doğrudan erişimidiğer bir sınıfa ait, ama çoğunlukla vorzuziehen.22Java belirli nesnelere sözde iç sınıflar, yani sınıflar desteklervardır. İç sınıfları bile, bu nesneleri sınırsız erişimine izin2834 veri, algoritma ve stratejilerListeleme 4.30: bağlantılı liste üzerinde bir yineleyici Uygulanmasıpublic class gen listeleri uygulayan ¶ ¶ {KoleksiyonÖzel ListNode <A> kafa = null;kamu Iterator yineleyici ¶ () {/ / yeni yineleyici listeyeYeni ListItem ¶ (kafa) return;}...}¶ ¶ ListItem sınıf Iterator uygular {/ / ListIteratorÖzel ListNode ¶ her örnek için düğüm / / kendi düğümListItem (ListNode <A> kafa) {/ / ilk. liste başlayandüğüm = kafa;}kamu A) (sonraki {/ / ekran bir sonraki öğeyigeri liste if (düğüm = null) {/ / sipariş¶ ListNode result = düğüm;node.getNext düğüm = ();result.getElem return ();}boş dönmek;}public boolean hasNext () {/ / diğer liste öğeleri?düğüm = null dönmek;}}sınıf ListNode ¶ {/ / yineleyici genişleme için gerekli olanÖzel bir elem;Sonraki ¶ özel ListNode;ListNode (A elem, ¶ ListNode sonraki) {this.elem = elem;this.next = sonraki;}A getElem () {return elem;} / elem için / alıcıListNode ¶ GetNext () {return sonraki;} sonraki / / getter için...}Aynı ambalaj üzerinde aynı anda birden fazla yineleyiciler olması mümkündürkullanmak için. Her düğüm kendi değişken yineleyiciler veözel parçalar. Eğer agrega iç sınıflar olarak yineleyiciler uygularsanız,orada erişilebilirlik ile herhangi bir sorun vardır ve alıcı yöntemleri olabilirKaydedin. Biz hiçbir bize hazırlamak için iç sınıflar kullanmak için ihtiyacı varÇözüm konsantre olmak gerekli değil, daha önce başka sayılmaz ileAşırı dil kavramları.2844,5 Soyutlama ve GenericityListeleme 4.31: bağlantılı liste olarak Genel Yığın (Listeleme 4.30 olarak ListNode)1 public class GenStack ¶ {/ / yığını, bir liste halinde uygulanan¶ 2 özel ListNode üst = null; / / üst yığın elemanElem 3 public void push (A elem) {/ / ekranı yığın¶ 4 top = new ListNode (elem, top);5}6 kamu Bir pop () {/ / yığınının üst öğesi kapmak7 if (üst = null) {/ / eğer varsa, aksi takdirde sıfır8 A top.getElem sonuç = ();9 üst top.getNext = ();10 dönüş sonucu;11}12 return null;13}14 public boolean isEmpty () {/ / yığın boş?15 dönüş üst == null;16}17}Bu nedenle diğer yineleyiciler etkisi olamaz listesinde geçiş.Bu, bir kap içinde büyük bir fark yöntemlerierişim işlemleri benzer: biri doğrudan elemanları kere üzerindeGelecek, ancak doğrudan olmadan konteyner ve yineleyici değişimKonteyner, aynı anda birden çok çalışır birbirini etkileyecektir.Örnek olarak, yığın uygulama Listeleme 4.31 şöyledir:Pop sürümü yığından bir öğe çekerken çok benzersonraki bölümde bir çalıştırmak gibi bir yineleyici yapar. Rağmenaslında kap kaldırılır pop ile eleman vardırkonteyner kendisi bir yineleyici ile değişmez iken.Ayrıca etkilenen bir liste öğesinin bir ekleme ya da silmeIterator veya sadece beklenen temel silmek için değil. Yineleyicibu işlemler ile ilgili olarak sağlamdır. Yığın itmek için çağrıÖte yandan, pop sonraki çağrı hemen bir etkisi vardır.04:32 listeleyen bir ikili bir yineleyici uygulanmasını gösterirAğacı. Bu yineleyici sıralanmış düzende öğeleri döndürür.Bir Baumiterators uygulanması çok daha fazla karmaşıkbir ListIterator bu. Bunun sebebi yöntemiAğacın yanında yöntemi olarak aynı şekilde geçmelidirböylece, 04:17 değil elementlerin sıralanmış çıkış listesi yazdırma2854 veri, algoritma ve stratejilerListeleme 4.32: sıralı ikili ağaç yineleyici Uygulanmasıpublic class GenTree A Karşılaştırılabilir ¶> uzanıruygulayan Koleksiyonu {¶Özel TreeNode ¶ root = null;kamu Iterator yineleyici ¶ () {/ / yeni yineleyici yinelenirsıralaması için yeni TreeItem ¶ (root) / / dönüş}...}sınıf TreeItem <A Karşılaştırılabilir ¶> uzatır ¶ {Iterator uygularÖzel GenStack <TreeNode ¶> yığını= Yeni GenStack <TreeNode ¶> ();TreeItem (TreeNode ¶ n) {/ / yığın kökünden yolu içerir(n! = null) {/ / yukarı yaprak tamamen sol (üst sırasındastack.push (n) / / en küçük elemanı ile düğüm)n = n.getLeft ();}}() kamu Bir sonraki {/ / sonraki öğeye geri ver¶ stack.pop TreeNode sonuç = (n) / / üst: sonraki düğümeif (= null sonuç) {/ / henüz sonunda:TreeNode n = on ¶ result.getRight () / / sağ ->süre = küçük (n! = null) {/ / üstsağa stack.push (n) / / elemann = n.getLeft () / ve / sonuç}result.getElem return ();}boş dönmek;}public boolean hasNext () {/ / diğer unsurları?stack.isEmpty dönüş (!);}}sınıf TreeNode <A Karşılaştırılabilir ¶> uzatır {/ / uzatma gerekliÖzel bir elem;Özel ListNode <A> sağ, sol;A getElem () {return elem;} / elem için / alıcı¶ getLeft ListNode () {sol return;} / sol / getter için¶ GetRight ListNode () {return hakkı;} / sağ için / alıcı...}Özyineleme kullanamazsınız. Özyineleme mümkün değildir, çünküSonlandırılmalıdır her öğe için yürüyerek bulunabilir2864,5 Soyutlama ve Genericityve sonraki bir sonraki arama başlayana kadar devam ettirilebilir.Ağacında geçerli konum değil, listede aksine, yapraklarıtutmak için sadece basit bir değişken. Programlama dilleri kullanmakprogramcı için bir içinde değişkenlere görünür yığını değilGeschachtelterMethodenaufrufe, özyinelemeli kaydetmek içinEtkinleştirilmelerinde. Bu nedenle, bir yığın genellikle yararlı bir veri yapısı, birözyinelemeli olmayan bir özyinelemeli haline dönüştürmek için yöntem. Biz almak04:31 yığın yardımcı Liste uygulanmaktadır. Biz yığını koymakAğacın aslında edilmemiş düğümleri özyinelemeli hangi04:17 maç Listeleme left.print () çağrılıyor. IçinRight.print () bakan bir yığın gerek yok, çünkülistesiyle sonuçlara çok benzer bir durum. Yapıcı SetBiz tüm yolu (tüm ziyaret düğümleri arasında seyahat yani)en soldaki yaprak düğüme ağaç köküyığını. Bu küçük eleman ile düğümdür. Yapılan her çağrısonraki döner yığını üst öğeyi ve sonra setsağ alt ağacında soldaki düğüme yolyığını. Bu, sonraki unsurdur. Hakkı varsaAlt ağacı gibi, orada ağaç ata sonraki unsurudurSonra, yalanlar üstüne yığın.Bir ağaç travers için birçok yol vardır. Yerine birçıkış örnek sıralanmış, her zaman kök kaldırabilirsinizsonra sol ve son olarak sağ alt ağaç sorunu. BizAyrıca ilk iki alt ağaç ve sadece dieWurzel harcayabilirsiniz,sonra veya ilk kök, bir düzey altında elemanlarıBu ve benzeri altında Kök, daha sonra bu iki seviye. Hangi sırada olursa olsunşu anki saklamak için tek bir değişken ile, tercihDüğüm, biz aus.Wir ya bir yığın, ihtiyaç hiçbir zamanya da her ağaç düğümü ve üst düğüm saklayın, ya daBiz düğüm arama ağaç birkaç kez yürüyüş.Yineleyiciler düzen empoze etmemelidir. Genellikle, belirli birÇeşitli kullanmak için yineleyici Uyum içinolabilir. Bazen farklı birden çok yineleyici sınıfları varAynı kap sınıfına Diziler uygular, ancakIterable <E> belirtilen bunun bir olabilir sadece örnekleriIterator yöntem oluşturulur.Yineleyiciler bir soyutlama çok değerli araçlardır. Tüm elemanlar alabilirsinizkonteyner tipi bilmeden, bir konteynerin ziyaretvar. Yineleyiciler sık kullanılan olduğundan, Java ile bir spe-bir2874 veri, algoritma ve stratejilerdöngüler için benzer kaplar üzerinde döngüler için için tasarlanan özel sözdizimi(V T: c) "için: diziler hakkında. . . "Döngü değişkeni v çalışırC bir örneği olan konteyner c tüm unsurları Tip T,<T> Iterable gerekir. Öğeler yineleyici üzerinden okunurve yineleyici tarafından verilen sıraya göre işleme.
Biz yazabiliriz kısa 04:29 Listeleme yazdır yöntemi:Listeleme 4.33: bir kap içinde bir döngü için kullanmapublic void print () {{: (satır dize ler)System.out.println (lar);}}Bu tanım tam Listeleme 4.29 de aynı semantik olduğunu.4.6 Tipik çözüm stratejileriBireysel veri yapıları ve algoritmalar birçok programlama görevlerinin temelini oluşturur.Genellikle karmaşıklığı, ancak değilAna pratik sorunların çözümünde sorun, sadecegörevleri sadece hacim. Yapılacak çok şey yaptığınız vardırNereden başlayacağımı bilmiyorum. Tüm detaylar anda imkansızgözden kaçırmak. Özellikle bu durumlarda yük-Çözüm stratejileri. Genellikle görevleri daha zordurve geniş dışında, biz başından inanıyorum. Bu nedenle, bu stratejileriher hangi bir programlama görevi için yararlıdır.4.6.1 Prefabrik parçalarBir program tasarımı meşhur sık duydum okur:"Her zaman tekerleği yeniden icat etmeye gerek yok." Sayısız görevler içinveya alt görevlere, iyi, zaten tam düşünülmüş varetkili çözümler ve genellikle güçlendirdi. Bu bir sadece gerekiryerine sürekli değişen program kodu hemen hemen aynı çözümü içinGörevleri yazma. Bu kadar basit ve zorlayıcı davetKodları kullanarak sesleri üretmek çok zor olan bağlılığı olanuygulama. Aşağıdaki nedenler rol oynar:Cehalet: Program parçalar bitmiş en yaygın nedenlerinden birikullanılmayan, sadece eksikliği2884.6 Tipik çözüm stratejileriVarlıklarından haberdar. Genellikle sadece standart kütüphanelerJava dağılımları zaten birkaç bin sınıfları içerir.Neredeyse herkesin bir tümüne genel bakış vardır. Neyse ki,yeterli zaten sınıfların küçük bir kısmını bilmekBirçok alt görevler için pratikte gerçekleşmesi çözümler özelbulmak için.
Sadece varlığını bitmiş eğer Öte yandan, yeterli değilÇözümler yok. Ayrıca, doğru çözümler üretmek için öğrenmek gerekirkullanmak için. Çoğu zaman, görünüşte doğru kullanımını öğrenmedaha karmaşık bile daha hızlı yeni bir çözüm geliştirmek. RağmenBu çözümün hızla çok kötü tasarlanmış geliştirilençok daha yüksek, geçmişe bakıldığında, hata ve bu yüzden eğilimliÇaba beklenenden daha yol açabilir. Eğer yüksek kalitede iseiçerik ve bir alt görev için bulunan ses çözümüvarsa, yüksek Einlernaufwand rağmen, onları kullanmalısınız.Farklı modeller: Belli her çözüm arkasındazihinsel modeli. Sadece nadiren arkasında modelleri uygunhazır bir çözüm ve rastgele programın gerisindebirlikte iyi. Modelleri maç için, varZaten bazı parçaların kullanımıyla ilgili program. Geliştirmek Bu arada, en azından standart kütüphanelergeride modelleri genellikle birlikte kullanıldığını olgunlaştıbitmiş sınıflar da birbirine uygun. Bu açık olmaktan uzaktır.Eğer bir görev için hazır bir çözüm arkasında modelitamamen program ile uymuyorolarak, nihai çözüm vazgeçmek daha iyi olabilirNihai çözümün tüm aralık adapte. EkÖzelleştirmeler için Kod geniş ve hataya açık olabilir.Eksikliği vertauen: Programın bitmiş bir parçası kullanan herkes, gerekenemin olduğunu sürekli olarak beklentilerinin bu bölümü.Bu bile zararlı veya ücretsiz programın o kısmını içerirkötü niyetli kod, ve zaman içinde ortaya çıkan hataların,gecikmeksizin kaldırılacaktır. Bu kullanılan üreticisi varProgram parça güven. Güven birkaç biridirSözde değil-icat-İşte sendromu nedeni,diğer şeyler arasında sebep, diğer grup veya şirketlerdeProgramın gelişmiş yerlerine göre önemli ölçüde daha az katılıyor2894 veri, algoritma ve stratejilergrup ya da kendi şirket gelişti.Güven bir teknikle zorlanamaz.Ben daha iyisini yapabilirsin: Bazen biz hazır kullanım vazgeçmekInandıkları için Parçalar, kendilerini daha iyi ya da en azından daha iyigöreve adapte çözüm bulmak için. Aslındakendi çözümlerini daha küçük ve basit olabilir, yaniavantajlıdır. Ancak, sık sık neden olduğu içinde olduğunuoluşabilecek bazı özel durumlar için kendi çözümunutulmuş eksik ve gelecekteki genişlemelere ihtiyaç duyuluyordu.Programın bitmiş parçaları (her zaman olmasa da) genellikle çok iyidüşünülmüş, tüm özel durum dikkat çekmek ve karşılığı olanen çok sağlanan daha fazla büyütme ihtiyacı vardı.
Bu parça ve birçok kez kullanılmıştır çünküBu kalkınmada çıkarılan dersler içeriyorvardır. Bu gelişme, kendi çözüm öndedirçıkarılabilir değil görev için onun daha iyi uyum rağmen.En önemli veri yapılarının standart kütüphaneler sağlamak için özellikleHazır (sadece Java) kapsamlı çözümler. Diziler zatenJava entegre. Bir başlangıç noktası için uygun arama gelinceJava ile Veri Yapıları <E> Toplama ya da (daha geniş) olabilirIterable <E> hizmet vermektedir. Ana kap sınıfları uygulamakbu arabirimler. Bu LinkedList <E> dahilHashSet (bağlantılı liste kapsamlı uygulanması), <E>(A hash tablosu) ve yığın <E> <E> TreeSet (etkili bir uygulama) dejenere edilemez bir ikili ağaç. Buna ek olarakKoleksiyonlar ve Diziler sınıfları statik bir dizi içerenKonteyner ve diziler ile birlikte kullanılabilir Yöntemlerisıralamak için, örneğin vardır. Aslında hiçbir neden yokturBu bölümde öğrendik Veri yapıları, hattaApart bakış eğitim açısından, çünkü - programlanabilir içinProgramlama yaparken, biz de veri yapılarının iç ayrıntıları varBu konuda bilmemiz gerekir.Örneklerde kullanılan verilerle karşılaştırıldığında konteyner sınıflardırbiraz daha kapsamlı Java konteyner sınıfları tarafından sağlanan,Ama çok açık bir şekilde yapılandırılmış. Bunun nedeni deneyim birçok yılgelişme onlarla mücadele dahil. AncakJava kullanılan konteyner ilk sürümlerinde orijinal olupSınıflar koleksiyon <E> türü hiyerarşisi ve saman parçası değildir2904.6 Tipik çözüm stratejilerite kullanılan nadiren. Bugün, hiçbir olağandışı işlemlerartık desteklenmemektedir ve mevcut operasyonları çok tekdüzetasarlanmış. Bu özellikler çok hızlı bir şekilde sizin için önemlidirMevcut veri yapıları tarzlarını çeşitliliği bulabilirsiniz. Sadeceüniforma tasarımı çok özel bir modelini oluşturur. Omevcut operasyonları dayanmaktadır. Programlama yaparkenJava aksi halde, bu varsayılan modele sadık olmalıdırhazır çözümler kullanmak oldukça zordur. Için bir ihtiyaçstandart kütüphaneler ile ilgili bazı deneyim.Özet olarak bir söyleyebiliriz prefabrik kullanımıParça onunla hemen hemen hiçbir deneyimi, diğer taraftan önemli bir parçasıdırbaşarılı olacaktır. Bir yandan kendinizi çok fazla iş kaydedebilirsinizgüvenilirliğini artırırken. Öte yandan, kullanmakbaşlangıç için hazır çözümler ek iş ile ilişkilidir. Olması gerektiğiHerhangi bir bitmiş parçalar içerir, ancak takviye olan bu değilve hangisi güven vardır. Bu koşullar altındaBu modelleri kullanan böylece yapı programlarına öderhazır çözümler arkasında birbirine uygun.4.6.2 Top Aşağı vs Up AltYukarıdan aşağıya stratejisi soyut sistemlerde başlangıçta çalışır, Yapı düzeyi için ve yavaş yavaş ayrıntı zenginleştirici tüm kadarParçaları uygulanmaktadır. İlk olarak, gerekli işlemleri tespitve sonra ayrı ayrı uygulanır.Bir örnek bu yaklaşımı ortaya koyacak, biz geliştirmekSayıları okur ve sıralaması sırayla yazdırır Programı.Görevin parçası zaten Bölüm 4.3.2 'de gördük.Şimdi yukarıdan aşağıya devam etmek istiyorum: Bu görev oldukça aşağıdatabii ki, üç işlem oluşan bir yapı: sıralama, sayı okumave hizmet vermektedir. Doğrudan uygulanması şu şekilde olabilir:Listeleme 4.34: Top-down stratejisi: okuma ve sıralama çıktısıpublic static void main (String [] args) {Nums = Liste tamsayı readNums ();Collections.sort (nums);print (nums);}2914 veri, algoritma ve stratejilerBir kap olarak, Listesi tamsayı bir örneği seçtim çünküSıralama için statik bir yöntem için Koleksiyonlar sınıfıiçerir. Bu nedenle sıralama için daha ayrıntılı bakmak gerekmez.Bir tarayıcı oluşturulması ayrılabilir okuma,Veri yapısı ve sayıları okumak için bir döngü oluşturun:Listeleme 4.35: Top-down stratejisi: Okuma Numaralarıözel statik Listesi tamsayı readNums () {Tarayıcı sc = new Scanner (System.in);Liste = new LinkedList nums tamsayı tamsayı ();while (sc.hasNextInt ())nums.add (sc.nextInt ());nums dönmek;}Bir adım olarak, ihraç ederek bu yöntemi kullanmalısınızIster ve kullanıcı dostu bir hata mesajlarını hatalı girişleri. Yapmak O zaman burada değil vermekÖnemli ölçüde yukarıdan aşağıya stratejisi arkasında dikkatini dağıtmak için. Sonuç olarak gerekAyrıca dağıtım için bir yöntem vardır:Listeleme 4.36: Top-down stratejisi: harcamaprivate static void print (Liste tamsayı nums) {for (int i: nums)System.out.println (i);}Görüldüğü gibi, yukarıdan aşağıya stratejisi daha geleneksel yol açarçok nesne tabanlı programlar daha zorunluluk, tüm yöntemlerstatik ve herhangi bir sınıfta verebilirsiniz. Bir arızaGörevi başka bir yol açar ve kısa bir süre sonraSorun çözüldü. Ancak, ortaya çıkan program yapısıgenellikle değil iyi: Erken alt bağlantıları kalırparçalar arasında tespit edilmemiş. Genellikle parçalar hazır çözüm değildirBu taslak ile aynı fikirde değilim çünkü kullanılır.Aşağıdan yukarıya strateji tam tersi bir yaklaşımdır. İlk olarak görünüyorzaten muhtemelen ihtiyaç vardır ayrı ayrı parçalarının çözülmüştür.O zaman daha büyük parçaları kalıp çalıştığınızda kadar gerçekSorun çözüldü. Bu kadar sıralanmış bir veri yapısını görmek çok kolaykolay numune görevin çözümü. Biz ihtiyaçOkuma ve harcama destekler Konteyner - gibi Listeleme 4.37 gösterilmektedir.2924.6 Tipik çözüm stratejileriListeleme 4.37: Alt-Up Stratejisi: İlk önemli parçalarjava.util.Scanner ithalat;java.io.PrintStream ithalat;public class {SortedNumsTamsayı özel GenTree tamsayı nums = new GenTree ();public void {(içinde Tarayıcı) okumawhile (in.hasNextInt ())nums.add (in.nextInt ());}public void printto (PrintStream çıkış) {for (int i: nums)out.println (i);}}Listeleme 4.38: Alt-Up Strateji: ana sonunda geliyorpublic static void main (String [] args) {SortedNums nums = new SortedNums ();nums.readFrom (Yeni Tarayıcı (System.in));nums.printTo (System.out);}Neredeyse bitmiş demektir. Sadece ana yöntem yoksungibi Listeleme 4.38 gösterilmektedir.Dikkatlice o aşağıdan yukarıya parçalar seçerek oluşturulan, olabilirmevcut program bileşenlerini de kullanılır. Bu kolayparça ve arasındaki mevcut ilişkileri tanımlamak içingüzel yapılandırılmış sınıf entegre etmek. Ancak, daha büyük de olabilirGörevler kolayca yolumuzun kaybetti olur. O zaman yazmakBu çözmek için sonunda kullanılmayan SınıflarGenel olarak görev kolay değildir. Top Aşağı Stratejisi ile olurdeğil.Yukarıdan aşağıya ve aşağıdan yukarıya strateji Genellikle bir aradaanlamlı. Güvenle kullanılan özel görevler çözme için sınıflar,biz hiç bile arıza önce aşağıdan yukarıya oluşturabilirsinizgenel sistem bilinmektedir. Sistemin kaba taslakBiz yukarıdan aşağı almadan önce Ancak, bu yüzden bu kadar kolay kayıp alamadım.2934 veri, algoritma ve stratejilerAyrım için biz gweissen tarafından bir dereceye kadar kendimizi izinzaten aşağıdan yukarıya parçalar doğrudan yarattı. Özet arıza meydanadaha yukarıdan aşağı, aşağıdan yukarı beton gerçekleşmeleri ve ikiStratejileri soyutlama orta düzeyde bir yerde buluşuyor.4.6.3 Kademeli arıtmaBu yukarıdan aşağıya ve aşağıdan yukarıya olarak Stratejileri ve kesin uygundurnispeten küçük programlama görevleri çözmek için. Uygulamadasık sık kendi içinde imkansız büyük görevler ile ne ilgisi varTamamen şeffaf. Prensipte rağmen hala olabiliryukarıdan aşağıya prosedür küçük parçalara görevleri yıkmak, ama bunakendini kanıtlamış değil. Biz geribildirim kadar çok geç olsunseçilmiş bir çözüm yaklaşımı çalışıp çalışmadığını. Biz bir deyişle,biz test önce tasarlamak ve uygulamak için büyük bir programıolabilir. Testler neredeyse kesinlikle ciddi eksiklikler ortaya çıkaracaktır.Onların neden olan programın boyutu sayesinde ücrettirzor bulmak ve ortadan kaldırmak için bile zor. Bazensadece genel yaklaşım yanlış olduğunu testve sistemin büyük parçalar geliştirilmelidir. Bu yüzdenProje zaten, çünkü bazı yazılım başarısız oldu.Kademeli arıtma vaatlerin stratejisi, bu sorunukavramak. Biz, sadece küçük bir başlangıç çözmekprogramlama görevin yönetilebilir bir parçasıdır. Bu parça sayesindeAnaliz için yazılım geliştirme Tüm aşamalarıDenetim, test ve doğrulama için tasarlanması ve uygulanması.Program bölümü uygun bir seçim ile üst aşağıya ve aşağıdan olanStratejiler genellikle up-regülasyonu. Duch özellikle son adımlarBiz programın geçerli kalitesi iyi geri bildirim almak.Bu bilgiler Weiterentwicklung.Wir kullanılırDaha önceki görevle ilgili çözüm ve genişletmekHer uzatma kablosu için geri bildirim ve tüm yazılım geliştirme adımlarıtarafından. Çoğu durumda, bizim fikirGörev süresi geçiş yorumlamak için hakkında nasıltecrübe kazanmış ve sürekli hareket. Ayrıca, görevkendisi yüzünden gelecekte kullanıcıların yeni şartlara bir sonucudurProgram değişikliğinin ilk sürümüyle beraber yaşamaktadır. Tarafındangerekirse kademeli arıtma, bizim çok esnek bir tür için olabilirDeğişiklikler yanıt verir.2944.6 Tipik çözüm stratejileriAşamalı arıtma avantajları belirgin hale gelir sadece çözümbüyük görevler. Bu nedenle, her örneğin yönetilebilir görünüyoroldukça gekünstelt.Wir hala iki modeli bu stratejiyi uygulamakYukarıdaki örnekte (okuma ve çeşitli çıkış numaraları), olmadanAncak somut bir program kodu gibi yapmak:• İlk olarak, ve sayıları sadece kabul eden bir program geliştirmekBu program yeniden ausgibt.3 Sıralanmamış biz kullanıcıları gösterirve bir sonraki arıtma adımda göz önündeKullanıcı arabirimi ile ilgili geri besleme. NihayetBiz son adım, bir de sıralama inşa.• bölünme çok farklı bir biz ilk anlaşmasıralama ve geliştirmek bir program ile bu rasgele sayılarsıralanır ve test çıkışları. Sadece Sıralama fonksiyonu,biz (daha önce kullanıcı arayüzü programı genişletmeközellikle) okumak için, kullanıcılardan gelen geri bildirim almaktek ve son adımda onları düşünün.Burada özetlenen iyi uygulamaların hangi söylemek zorolduğunu. Dikkat etmeniz gereken bir kural olduğunun ve her zaman ilk bu parçalarınEn zor ve en olası görevleri çözmek içingeldi. Etkileşim ise ilk seçeneken zor ve önemli bölümü için kullanıcılarlaProgram durur, ikinci seçenek, eğer teknik sorunayrıştırılması zor ve önemli durur. Bu öncelikleribitmiş programında görünür. İlk varyant yolgelişmiş bir kullanıcı arayüzü olması muhtemel değil, birorta halli sıralama yöntemi. İkinci türev sıraladığınıMuhtemelen daha sofistike kullanıcı arayüzü aksine.Kademeli arıtma strateji sorunlara yol açabilirSonuç: Programın bir uzantısı olarak, bazen çıkıyorbir veri yapısı ya da için programın çarpanlaraYeni programın bir parçası ya da kötü değildir. Böyle bir durumdaOlgular veri yapısı ya da çarpanlara değiştirmek zorunda. Ikincisiüstlenmeden denir - kendi adını, çünkü üstlenmedenBir ikili ağacın 3The kullanımı, bu prosedür çok yararlı değildir, çünkü birHarmanlanmış çıktı neredeyse tek başına. Ama yine de hayal edebiliyorumnasıl bir görev ilk bölümünü seçin.2954 veri, algoritma ve stratejilersık sık gereklidir. Bu tür değişiklikler pahalıya mal olabilir. Yine dedeğişiklikleri daha, çünkü en kısa zamanda bunu yapmalıyımkarmaşıktır, daha sonra bir bunları yapar. Aşırı durumlarda olabilirBu, gerekli değişiklikleri, ve hemen hemen her adımdaProgram çok yavaş ya da hiç gerçek genişlemeilerlemektedir. Bu nedenle, ona ne kadar süreceğini planlamak zordurprogramı bitmiş ve tamamlama maliyeti kırlangıç olduğuolduğunu. Bununla birlikte, adım adım arıtma ve güçlendirilmişbirçok yazılım projelerinde uygulamada kullanılır.Aşamalı arıtma ilkesine Yazılım geliştirme süreçleriartan işlemleri denir. Bu ad açıktır.Bugün genellikle çevik süreçleri, deneyler, yazılım geliştirme olarak adlandırılırdaha esnek ve daha küçük (bürokrasi daha az)geleneksel kalkınma süreçleri ile mümkün olandan tasarımıolduğunu. Bir gerçek hedeflere daha fazla odaklanmak istiyorum.Artan süreçler çevik süreçleri için iyi bir temel vardır.4.7 Program yapıları öğrenmekBilgisayar bilimleri algoritmalar ve veri yapıları konu ilebüyük önem taşımaktadır. Ama kendi zorunlu modülü sahip olduğumümkün olduğu gibi çok daha derinlemesine konuyu burada kabul edilirolduğunu. Başarılı strateji ve elde edilen yöntemlerive teknikleri modelleme modülü parçaları tanıtıldı.
genel programlama modülü detaylı paradigmalar programlamaele.4.7.1 Kavram ve önerilerÇözümler bulmak ve yapılanma için pratik yaklaşımlarprogramları her zaman tarafından, zaman içinde evrimtekrar yeni programlama görevleri tetikler. Egzersizler çoğunluklaBöylece seçilen yeni, daha önce bilinmeyen yönleri ile her zaman bir veTek başına çözüm bulmak için sorunlar, karşı karşıyaolmak. Şeklinde destek olmamasına rağmen buna bir çözümgörevleri gerekli bilgi mevcut ve gerekirse birYöneticiler doğrudan yardım, ama bir sürü çözme gerektirir olabilirYaratıcılık ve kendi kendine organize. Görevler zorlu ve vardır2964.7 Program yapıları öğrenmekzaman daha fazla ve daha çok talep ile. Bu gerekli şekildeBilindiği madde sadece art arda görevleri çözerek,aynı zamanda gerekli, her zaman yeni yaklaşımlar ve tekniklerdeneyin ve - bir dereceye kadar - hatta kendiProsedürleri geliştirmek. Bu ne son olarak: Eğerdeğiştirmek ve yeni gerçeklerine uyum bilinen öğrenme işlemlerikendi yaklaşımlar geliştirmeye devam etmeleri için ayarlayın.Bu aynı zamanda algoritmalar ve veri yapıları etkilenir. Bir öğrenir,bağımsız, yeni algoritmalar ve veri yapıları geliştirmektek bilinen yapıların başlangıç noktası olarak alır.Bağımsız veri yapıları geliştirmek ve yeteneğiAlgoritmalar ve bilinen veri yapılarının bağımsız birleştirinalgoritmalar ve daha büyük birimlere özellikler, bir çokprogramlama öğrenmede büyük bir adım. Bir kere, bu hakim varbir çok programlama görevleri denetleyebilir. Bu ile olabilirKarşılaştırmak okuma ve yazma odaklanın: İyi bir anlayışSözdizimi ve temel dil yapıları semantik ve pragmatikBu yapıları uygulanması için bir ön koşuldurprogramlama, hem de bireysel harfler ve bilmeKelime ve basit cümleleri bir ön şart Kompozisyonuokuma ve yazma için. Ama daha fazla ihtiyacı var.
Programlar ve algoritmalar yapılar olarak ağırlıklı olarak kullanılırlarGörünür Veri yapıları. Bu yapılar ve kendi anlamak gerekirEğer düşünce okuma gibi Yapıları, gelişebilirarkasında ilkelerini anlamak ve kendi düşüncelerini yazarkenCümleler giyinmek gerekir. Bunu da biliyorum yalnızca sorunsuz yapabilirsinizProgramlama ve okuma ve bilgi yazma ve kendiProgramlama veya stilini geliştirmek yazma.4.7.2 Kontrol Sorular• Hangi algoritmalar ve veri yapıları, ve nasılBu iki kavram ilişki?• Hangi koşullar altında iki algoritma ve veri yapıları vardıraynı? Orada değil ne zaman?• Liste beş farklı veri yapıları.• Hangi stratejiler kullanılır?2974 veri, algoritma ve stratejiler• Neden bu kadar çok veri yapıları ardışık vardır?• Hangi operasyonları yığınlar, bağlı listeler ve ikili varGenellikle ağaçlar?• Hangi özellikler bir bağlantılı liste ayırtve ikili ağaç?• Nasıl veri yapıları yönlendirilmiş bir grafik ile birlikte mi?• İlgili özyinelemeli farklı yöntemleri nelerdir(özyinelemeli değil) iteratif?• yinelemeli veri yapıları ve özyinelemeli yöntemleri nelerdirortak indüksiyon?• Nasıl bir algoritma maliyetini tahmin edebilir?• O (1), nelerdir O (log (n)), O (n), O (n log (n)), O (n2) ve O (2n)?Iki katına ya da n yüz kat artışın etkisi nedir?• Nasıl bir maliyet tahmini sabit faktör olabilirgöz ardı?• içinde ekleme veya arama maliyeti nedirbağlantılı liste, ikili ağaç, hem de karma tablo içindeOrtalama ve en kötü durumda? Her kötü nedirKasa ve ne zaman oluşur?• Nasıl bir kabarcık-sıralama, sıralama ve quicksort birleştirme nedir? Neortalama ve en kötü durumda maliyeti nedir?• Bir ikili arama nedir?• Hangi genel genel olmayan sınıfları ayıran?• Ne tür parametresi ile bir tür ayıran? Eğer CanTürleri ve tür parametreleri, aynı kullanabilir miyim?• Nasıl böyle genel olarak int öğe türleri gibi ilkel türlerineKaplar kullanılmalıdır?• bağlı genericity engelleri nelerdir?• Özel özyinelemeli bağlı genericity amacı nedir?2984.7 Program yapıları öğrenmek• benzer alt tip ilişkiler ve genericity ne ölçüde? Vasıtasıylaonların uygulanabilirliği farklılık?• nedir ve neden yineleyiciler kullanılır?• Ne zorluklar yineleyiciler uygulanmasında ortayasık nüks ile ilişkili? Nasıl çözerimonlar?• ne göre özel bir dil inşa Java kullanımını destekleryineleyiciler arasında?• Ne zor bitmiş parçaları ile program yapan nedir?Nasıl nedenleri ele alabilir?Karşı yukarıdan aşağıya stratejisinin • avantajları ve dezavantajları nelerdiraşağıdan yukarıya strateji? Nasıl bu iki strateji olabilirbirbiriyle birleştirmek?• aşamalı arıtma gündeminde sağlar?• Hangi özel görevler kademeli arıtma olmalıdırbaşlar? Bu neden böyledir?Avantajları ve zorlukları yavaş yavaş doğabilecek • nelerdirArıtma sonucu?
Viyana Teknik Üniversitesi Bilgisayar Mühendisliği bölümü: 185.A02 Grundlagen der Programmkonstruktion dersi hakkında bilgiler , ödevler ve açıklamaları , çözümler , kaynak linkler..
Blog Arşivi
-
▼
2011
(34)
-
▼
Kasım
(17)
- Test 2 - Kontrol Soruları - Kimlik, durum ve davra...
- Test 2 - Kontrol Soruları - Getter ve Setter Metot...
- Test 2 - Kontrol Soruları - Sınıf nedir? Ne işe ya...
- Test 2 - Kontrol Soruları - Nesne için Arabirim n...
- Test 2 - Kontrol Soruları - Kapsülleme, veri sakla...
- Test 2 - Kontrol Soruları - Yerel değişkenler ile ...
- Test 2 - Kontrol Soruları - Dönem çarpanlara ayırm...
- Test 2 - Kontrol Soruları - Artan yazılım geliştir...
- Test 2 - Kontrol Soruları - büyük programların gel...
- Test 2 - Kontrol Soruları - Nesne yönelimli Progra...
- Test 2 - Kontrol Soruları - Nesne (Object) Nedir?
- Test 2 - Kontrol Soruları - Prosedurel ve Nesne yö...
- Test 2 - Kontrol Soruları ve Cevapları * TÜRKÇE
- Test 1 - Kontrol Soruları ve Cevapları
- Test 2 - Kontrol Soruları ve Cevapları
- Test 2 - Konular ve Açıklamalar
- Ödev - 3 / Übung - 3
-
▼
Kasım
(17)
30 Kasım 2011 Çarşamba
Test 2 - Konular ve Açıklamalar
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder