Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Çıkış Yap

translation

Bu, AI tarafından çevrilen bir gönderidir.

제이온

[Nesne] 2. Bölüm: Nesne Yönelimli Programlama

  • tr Writing language: Korece
  • tr Referans Ülke: tr Tüm ülkeler country-flag

Dil Seç

  • Türkçe
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Text summarized by durumis AI

  • Film rezervasyon sistemini uygulamak için nesne yönelimli programlama yöntemini açıklar ve işbirliği, nesne, sınıf kavramlarını tanıtır, alan yapısına uygun program yapısını vurgular.
  • Özellikle nesnelerin özerkliğini ve kapsüllemeyi kullanarak dış müdahaleleri azaltan ve arayüzü uygulamadan ayırarak programcı özgürlüğünü sağlayan yöntemleri sunar.
  • Ayrıca indirimli fiyat hesaplaması için işbirliğini, kalıtımı ve çok biçimliliği kullanarak esnek ve genişletilebilir kod yazma yöntemlerini açıklar ve soyutlamanın önemini ve kodun yeniden kullanılabilirliği için kompozisyonun avantajlarını vurgular.

Film Rezervasyon Sistemi


Gereksinimleri İnceleme

  • Çevrimiçi film rezervasyon sistemi geliştirmek istiyoruz.
  • Filmler, bir filmi temsil eden temel bilgileri içerir.
    • Başlık, gösterim zamanı, fiyat bilgileri vb.
  • Gösterimler, izleyicilerin gerçekten bir filmi izlediği olayları temsil eder.
    • Gösterim tarihi, saati, sırası vb.
  • İnsanlar filmleri rezerve ediyor, ancak aslında belirli birgösterimrezerve etmeliyiz.
  • İndirim Koşulları
    • Fiyat indirimi olup olmadığı
    • Sıra Koşulu: Gösterim sırasını kullanarak indirim olup olmadığını belirleyin.
    • Dönem Koşulu: Filmin gösterim başlangıç zamanını kullanarak indirim olup olmadığını belirleyin.
  • İndirim Politikası
    • İndirim ücretini belirle
    • Tutar İndirim Politikası: Rezervasyon ücretinden belirli bir miktar indirim
    • Oran İndirim Politikası: Liste fiyatından belirli bir oranda indirim
  • Her film için bir indirim politikası atanabilir veya hiç atanamaz ve indirim koşulları, birden fazla indirim koşulunu birleştirebilir.
  • İndirim politikası uygulanmış olsa bile, indirim koşullarını karşılamıyorsa veya indirim politikası uygulanmamışsa, ücret indirilmez.


Nesne Yönelimli Programlamaya Doğru

İşbirliği, Nesneler, Sınıflar

  • Nesne yönelimli, nesnelere yöneliktir.
    • Bir sınıfı belirledikten sonra, bu sınıfa hangi özniteliklerin ve yöntemlerin gerekli olduğunu düşünmemelisiniz.
    • Hangi nesnelerin hangi durumları ve eylemleri olacağına karar vermelisiniz.
    • Nesneleri bağımsız varlıklar olarak değil, işbirliği yapan bir topluluğun parçası olarak görmelisiniz.


Etki Alanının Yapısını Takip Eden Program Yapısı

  • Etki alanı, kullanıcının bir problemi çözmek için programı kullandığı alandır.

Untitled

  • Genel olarak, bir sınıfın adı, karşılık gelen etki alanı kavramıyla aynı veya en azından benzer olmalıdır.
  • Sınıflar arasındaki ilişkiyi de, mümkün olduğunca, etki alanı kavramları arasındaki ilişkilere benzeterek, programın yapısını anlamak ve tahmin etmek kolaylaştırılmalıdır.


Sınıfları Uygulama

  • Bir sınıf, iç ve dış olarak ayrılır ve mükemmel bir sınıf tasarlamak için, hangi bölümün dışarıya açıklanacağını ve hangi bölümün gizli tutulacağına karar vermelisiniz.
    • Bir nesnenin öznitelikleri özel olarak engellenir ve iç durumu değiştirmek için gerekli yöntemler herkese açık olarak bırakılır.
  • Bir sınıfın iç ve dışını ayırt etmeniz, programcılara uygulama özgürlüğü sağlayarak, nesnenin özerkliğini korur.


Özerk Nesneler

  • Bir nesne, durumu ve eylemleri olan özerk bir nesne olmalıdır.
  • Verileri ve işlevleri bir nesnenin içine birleştirmeye kapsülleme denir.
  • Erişim denetimi, dış müdahaleyi azaltarak nesnenin kendi eylemlerine karar vermesini sağlar.
  • Arayüz ve uygulama ayrımı ilkesi, nesne yönelimli programlamanın temel ilkelerinden biridir.
    • Genel Arayüz: Dışarıdan erişilebilen kısım
    • Uygulama: İçeriden erişilebilen kısım


Programcının Özgürlüğü

  • Programcı rolü, sınıf yazarı ve istemci programcısı olarak ayrılır.
    • Sınıf yazarı yeni bir veri türü ekler
    • İstemci programcısı, sınıf yazarının eklediği veri türünü kullanır
  • Uygulama Gizleme
    • Sınıf yazarı, yalnızca gerekli bölümleri istemci programcılarına sağlayarak iç uygulamayı gizleyebilir.
    • İstemci programcısı yalnızca arayüzü bilmesi gerektiğinden, bilgi miktarı azaltılabilir.


İşbirliği Yapan Nesnelerin Topluluğu

  • Parayı temsil etmek için, basitçe Long türünde bir değişken bildirmek yerine, Money gibi bir nesneyle sarmanız daha iyidir. Nesne kullanımı, anlam aktarımı için daha iyi ve aynı işlemin bir yerde gerçekleştirilmesine olanak tanır.
  • Bir sistemdeki belirli bir işlevi uygulamak için nesneler arasında gerçekleşen karşılıklı etkileşime işbirliği denir.


İşbirliğine Dair Kısa Bir Hikaye

  • Bir nesnenin başka bir nesneyle etkileşime girebileceği tek yol mesaj göndermek veya almak.
  • Alınan mesajı işlemek için kendi yoluna yöntem denir.
  • Mesajı ve yöntemi ayırt etmek önemlidir; buradan çok biçimlilik kavramı başlar.


İndirim Ücreti Almak

İndirim Ücreti Hesaplamak İçin İşbirliğine Başlama

  • Movie sınıfı, indirim politikasına ilişkin ayrıntılı mantığı içermez ve bu görevi DiscountPolicy arayüzüne devretmiştir. Miras ve çok biçimlilik, soyutlama kullanımı gerçekten önemlidir.


İndirim Politikası ve İndirim Koşulları

Untitled


Miras ve Çok Biçimlilik

Derleme Zamanı Bağımlılığı ve Çalışma Zamanı Bağımlılığı

  • Kod bağımlılığı ve çalışma zamanı bağımlılığı farklı olabilir.
  • İkisinin arasındaki bağımlılık ne kadar farklıysa, kodu anlamak o kadar zorlaşır, ancak daha esnek ve genişletilebilir bir kod olur.


Farklılığa Göre Programlama

  • Miras, mevcut bir sınıfa göre yeni bir sınıfı hızlı ve kolay bir şekilde eklemenizi sağlar ve üst sınıf uygulamasını yeniden kullanabilirsiniz.
  • Yeni bir sınıfı üst sınıftan farklı kısımları ekleyerek oluşturma yöntemine farklılığa göre programlama denir.


Miras ve Arayüzler

  • Miras, üst sınıf tarafından sağlanan tüm arayüzlerin alt sınıfa miras kalmasını sağlar.
  • Arayüz, bir nesnenin anlayabileceği mesaj listesini tanımlar.
public class Movie {

    public Money calculateMovieFee(Screening screening) {
        return fee.minus(discountPolicy.calculateDiscountAmount(screening));
    }
  • Movie, DiscountPolicy'ye calculateDiscountAmount mesajını gönderiyor. Movie açısından, hangi sınıfın örneğinin yanıt vereceği önemli değil, yalnızca başarılı bir şekilde yanıt vermesi yeterlidir.
  • Bu nedenle, hem AmountDiscountPolicy hem de PercentDiscountPolicy, Movie ile işbirliği yapmak için DiscountPolicy'nin yerine geçebilir.
  • Bu şekilde, alt sınıfın üst sınıfın yerine geçtiği duruma yukarı dönüştürme denir. Alt sınıfın üst sınıfa otomatik olarak tür dönüştürülmesi gibi göründüğü için.


Çok Biçimlilik

  • Çok biçimlilik, aynı mesajı aldığında nesnenin türüne bağlı olarak farklı şekilde yanıt verme yeteneğini ifade eder.
    • Movie aynı mesajı gönderir, ancak hangi yöntemi çalıştıracağı, mesajı alan nesnenin sınıfının ne olduğuna bağlıdır.
  • Çok biçimlilik, programın derleme zamanı bağımlılığının ve çalışma zamanı bağımlılığının farklı olabileceği gerçeğine dayanır.
  • Çok biçimlilik, çalıştırılacak yöntemi çalışma zamanında belirlediği için gecikmeli bağlama veya dinamik bağlama olarak da adlandırılır.


Arayüzler ve Çok Biçimlilik

  • Uygulamayı paylaşmanız gerekmiyorsa ve yalnızca arayüzü paylaşmak istiyorsanız, soyut sınıf yerine arayüz kullanabilirsiniz.


Soyutlama ve Esneklik

Soyutlamanın Gücü

  • Soyutlamanın avantajları
    • Sadece soyutlama katmanını ayrı olarak inceleyerek, gereksinimlerin politikalarını yüksek bir seviyede ifade edebilirsiniz.
    • Tasarım daha esnek hale gelir.


Esnek Tasarım

  • Soyutlama, tasarımın belirli durumlara bağlı olmasını önler, bu nedenle daha esnek bir tasarım yaratabilirsiniz.


Soyut Sınıflar ve Arayüzler Arasındaki Ticareti

public abstract class DiscountPolicy {

    private List conditions;

    public DiscountPolicy(DiscountCondition... conditions) {
        this.conditions = Arrays.asList(conditions);
    }

    public Money calculateDiscountAmount(Screening screening) {
        for (DiscountCondition condition : conditions) {
            if (condition.isSatisfiedBy(screening)) {
                return getDiscountAmount(screening);
            }
        }
        return Money.ZERO;
    }

    abstract protected Money getDiscountAmount(Screening screening);
}

public class NoneDiscountPolicy extends DiscountPolicy {

    @Override
    protected Money getDiscountAmount(Screening screening) {
        return Money.ZERO;
    }


  • Şu anda NoneDiscountPolicy aslında DiscountPolicy'nin calculateDiscountAmount() yönteminde indirim koşulu yoksa 0 döndürdüğü için, hiçbir sorun yok. Ancak, kullanıcı açısından Movie'nin argümanı olarak indirim politikası olmayan None politikasını eklemesi gerekiyor, bu nedenle eklendi.
  • Bu nedenle, kavramsal olarak NoneDiscountPolicy sınıfı kafa karıştırıcıdır, bu nedenle aşağıdaki gibi düzenlerseniz anlamak daha kolaydır.


public interface DiscountPolicy {

    Money calculdateDiscountAmount(Screening screening);
}

public abstract class DefaultDiscountPolicy implements DiscountPolicy {

    private List conditions;

    public DefaultDiscountPolicy(DiscountCondition... conditions) {
        this.conditions = Arrays.asList(conditions);
    }

    public Money calculateDiscountAmount(Screening screening) {
        for (DiscountCondition condition : conditions) {
            if (condition.isSatisfiedBy(screening)) {
                return getDiscountAmount(screening);
            }
        }
        return Money.ZERO;
    }

    abstract protected Money getDiscountAmount(Screening screening);
}

public class NoneDiscountPolicy implements DiscountPolicy {

    @Override
    public Money calculateDiscountAmount(Screening screening) {
        return Money.ZERO;
    }
}

public class PercentDiscountPolicy extends DefaultDiscountPolicy {

    private double percent;

    public PercentDiscountPolicy(double percent, DiscountCondition... conditions) {
        super(conditions);
        this.percent = percent;
    }

    @Override
    protected Money getDiscountAmount(Screening screening) {
        return screening.getMovieFee().times(percent);
    }
}

public class AmountDiscountPolicy extends DefaultDiscountPolicy {

    private Money discountAmount;

    public AmountDiscountPolicy(Money discountAmount, DiscountCondition... conditions) {
        super(conditions);
        this.discountAmount = discountAmount;
    }

    @Override
    protected Money getDiscountAmount(Screening screening) {
        return discountAmount;
    }


  • DiscountPolicy'yi bir arayüz olarak soyutlamak ve bunu NoneDiscountPolicy ve genel indirim politikasını ifade eden DefaultDiscountPolicy olarak uygulamalara ayırmaktır.

Untitled

  • Yalnızca NoneDiscountPolicy için bir arayüz eklemenin, artan karmaşıklığa kıyasla verimsiz olduğunu düşünebilirsiniz.
  • Tüm yazılımın bir ticareti içerdiğini ve tasarım yaparken bunu bilmeniz gerekir. Yani yazdığınız her kodun mantıklı bir açıklaması olmalıdır.


Kod Yeniden Kullanımı

  • Miras, kodu yeniden kullanmak için kullanılabilir.
  • Ancak, kodu yeniden kullanmak için miras yerine kompozisyon kullanmak daha iyidir.
  • Mevcut kodda, Movie'nin DiscountPolicy kodunu yeniden kullanma şekli kompozisyondur.
  • Eğer Movie'yi üst sınıf olarak kabul edersek ve AmountDiscountMovie ve PercentDiscountMovie olarak ayırırsak, bu mirası kullanmak olacaktır.


Miras

  • Mirasın dezavantajları
    • Kapsüllemeyi ihlal eder.
      • Üst sınıfın iç yapısını bilmeniz gerekir.
      • Üst sınıf değiştiğinde, alt sınıfın da değişme olasılığı yüksektir.
    • Tasarımı esnek hale getirmez.
      • Üst sınıf ve alt sınıf arasındaki ilişki derleme zamanında belirlenir.
      • Çalışma zamanında nesnenin türünü değiştirmek mümkün değildir.
      • Ancak kompozisyon, kullanıcının chageDiscountPolicy() gibi bir yöntem aracılığıyla çalışma zamanında örneği değiştirmesine olanak tanır.


Kompozisyon

  • Arayüzde tanımlanan mesajları kullanarak kodu yeniden kullanma yöntemine kompozisyon denir.
  • Kapsüllemeyi uygulayabilir ve gevşek bağlama sağlayabilirsiniz.
  • Çok biçimlilik için arayüzü yeniden kullanıyorsanız, miras ve kompozisyonu birlikte kullanmanız gerekir.
    • Örneğin, DiscountPolicy arayüzü, alt uygulamaları uygulamak için miras kullanmak zorundadır.


Kaynaklar

  • Nesneler
제이온
제이온
제이온
제이온
[Nesne] 1. Bölüm: Nesneler, Tasarım Yazılım geliştirmede uygulama teoriden daha önemlidir ve iyi bir tasarım, kodun anlaşılmasını kolaylaştırır ve değişikliklere esnek bir şekilde uyum sağlamasını sağlar. Nesne yönelimli tasarım, işbirliği yapan nesneler arasındaki bağımlılıkların nasıl uyg

28 Nisan 2024

[Efektif Java] Madde 6: Gereksiz Nesne Oluşturmayı Önleyin Java'da gereksiz nesne oluşturmayı azaltma yöntemleri hakkında bir kılavuz. String, Boolean gibi değişmez nesneler için literalleri kullanın ve düzenli ifadeler için Pattern örneklerini önbelleğe alın. Ayrıca, otomatik kutulama performans düşüşüne neden o

28 Nisan 2024

[Java] Yansıma Kavramı ve Kullanım Şekli Yansıma, Java programları çalışırken sınıf bilgilerine erişerek sınıfları manipüle etmeyi sağlayan bir API'dir. Çalışma zamanında sınıflar oluşturulmasını ve alanlara ve yöntemlere erişmeyi sağlar, ancak kapsüllemeyi ihlal edebilir ve performans düşüşüne

25 Nisan 2024

[Bilişim alanında olmayanlar için, geliştirici olarak hayatta kalmak] 14. Yeni Başlayan Geliştiricilerin Sıkça Sorduğu Teknoloji Görüşme İçerikleri Özeti Yeni başlayan geliştiriciler için bir teknoloji görüşme hazırlık rehberidir. Ana bellek alanı, veri yapıları, RDBMS ve NoSQL, yordamsal ve nesne yönelimli, geçersiz kılma ve aşırı yükleme, sayfa değiştirme algoritmaları, süreçler ve iş parçacıkları, OSI 7
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 Nisan 2024

Aktarım Aşkı 2 ve Kurumsal Kültür: Gözlem Gücü -2 Kurumsal kültürün iyileştirilmesi için dış danışmanlara güvenmek yerine, çalışanların etkileşimleri, mekan düzenlemesi, semboller gibi 'dahili' gözlemler aracılığıyla kurumsal kültürü analiz etmek ve değişiklikleri aramak gerekir. Popüler program 'Aktarım
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

9 Mayıs 2024

Film ve OTT İçerik Uzmanı Kütüphanecilik Online Dergisi CineLab, Uygulamasını Resmi Olarak Başlattı Film ve OTT içerik uzmanlığı kütüphanecilik dergisi 'CineLab', uygulamasını resmi olarak başlattı. CineLab, çeşitli film içerikleri, fragmanlar, film takvimi, puanlama sistemi, topluluk vb. sunarak 160 oluşturucu ile ortaklık kurarak güvenilir içerikler s
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)

17 Mayıs 2024

[Eşzamanlılık] Atomik İşlem: Bellek Çiti ve Bellek Sıralaması Bu blog yazısında, atomik işlemlerde bellek sıralamasının nasıl dikkate alınacağı ve Sıralama seçeneklerinin önemi açıklanmaktadır. Relaxed, Acquire, Release, AcqRel, SecCst gibi çeşitli Sıralama seçenekleri hakkında açıklamaların yanı sıra, her seçeneğin
곽경직
곽경직
곽경직
곽경직
곽경직

12 Nisan 2024

1. İlke Düşünme: Temelden Şüphe Etmek Elon Musk'ın 1. ilke düşünme yaklaşımıyla, sorunların özüne inin ve yenilikçi çözümler bulun. Batarya fiyat analizi ve ikiit teslimat uygulamasındaki toplu teslimat servisi gibi çeşitli örneklerle 1. ilke düşünmenin gerçek uygulama yöntemini inceleyin.
울림
울림
울림
울림

18 Mart 2024

Dolby Cinema'nın Baharı, Canlı Film Deneyimini Yaşayın Dolby Cinema, 'Les Misérables', 'Madam Web', 'Bob Marley: One Love' gibi 5 filmi Mart ayı boyunca gösterimde ve Dolby Vision ve Dolby Atmos teknolojileri ile canlı görüntü kalitesi ve zengin ses sunuyor.
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요

12 Mart 2024