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] 1. Bölüm: Nesneler, Tasarım

  • 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

  • Yazılım geliştirmede uygulama teoriden daha önemlidir ve basit bir program aracılığıyla nesne yönelimli tasarımın önemini anlayabilirsiniz.
  • Bilet satış uygulamasını örnek alarak, nesneler arası bağımlılıkları ve birleştirme derecesini azaltarak değişikliklere esnek kod yazma yöntemini açıklıyoruz ve prosedürel ve nesne yönelimli programlama arasındaki farkları karşılaştırıyoruz.
  • Nesne yönelimli tasarım, değiştirilebilir kod oluşturur ve nesneler, işbirliği yapan nesneler arasındaki bağımlılıkların uygun bir şekilde yönetilmesi gereken kendi kendini yöneten varlıklar olarak verilerden sorumludur.

Giriş

Robert L. Glass, teoriden ziyade pratiğin önce geldiğini savundu. Özellikle yazılım geliştirmede, uygulama teoriden önce gelir; geliştiriciler, en çok ellerini kirleterek somut kodlarla uğraştıklarında öğrenirler. Bu nedenle teori ve kavramları bir kenara bırakıp, basit bir programı inceleyeceğiz.


Bilet Satış Uygulaması Oluşturmak

  • Küçük bir tiyatronun tanıtımı için küçük bir etkinlik düzenliyoruz.
    • Etkinlik içeriği: Kura çekilişiyle seçilen izleyicilere ücretsiz gösteri izleme davetiyesi gönderilecek
  • Etkinlikte kazanan ve kazanamayan izleyiciler ayrılmalıdır.
    • Etkinlik kazananları: Davetlerini bilete çevirebilirler
    • Etkinlik kaybedenleri: Bileti parayla satın alabilirler



Sorun Nedir?

Robert Martin, bir yazılım modülünün (boyutundan bağımsız olarak, bir sınıf, paket veya kütüphane gibi bir programı oluşturan herhangi bir öğe) sahip olması gereken üç işlev hakkında konuşur.


  • Çalışma zamanında düzgün çalışır.
  • Değişim için vardır.
    • Basit bir eylemle değiştirilebilmelidir.
  • Kodu okuyan kişilerle iletişim kurar.
    • Geliştiriciler tarafından kolayca okunabilir ve anlaşılabilir olmalıdır.


Yukarıdaki bilet satış uygulaması, düzgün çalıştığına dair ilk kısıtlamayı karşılasa da, değişiklik kolaylığı ve iletişim hedeflerini karşılamıyor.


Beklentileri Bozan Kod

İletişim hedefini karşılayamadığı nedenlerine bakalım.


  • Theater sınıfının enter() yönteminin yaptığı şey
    • Tiyatro, izleyicinin çantasını açıp içinden davetiye olup olmadığına bakar.
    • Çantada davetiye varsa, satıcıya gişede saklanan bileti izleyicinin çantasına taşımasını söyler.
    • Çantada davetiye yoksa, izleyicinin çantasından bilet bedelini çıkarır, bileti satın alır ve bileti çantasına koyar.
  • İzleyici açısından, üçüncü bir taraf olan tiyatronun çantasını istediği gibi karıştırmasına, parayı almasına ve bileti koymasına şahit olmak zorunda kalır.
  • Satıcı açısından, üçüncü bir taraf olan tiyatronun izni olmadan gişedeki bilet ve nakdin değerini değiştirmesine şahit olmak zorunda kalır.
  • Anlaşılabilir kod, işleminin beklentilerimizi çok fazla aşmadığı bir kodu ifade eder; yukarıdaki tiyatro, beklentilerimizi aşmaktadır.
    • İzleyici, kendi çantasından parayı çıkarıp satıcıya ödeyerek bileti almalıdır.
    • Satıcı, gişede bulunan bileti doğrudan alıp izleyiciye vermeli ve izleyiciden parayı alıp gişede saklamalıdır.
  • Ayrıca, enter() yöntemini anlamak için birçok ayrıntıyı hatırlamak zorundayız.
    • Audience, Bag'e sahiptir.
    • Bag'in içinde nakit ve bilet vardır.
    • TiketSellet, TicketOffice'ten bilet satar ve TicketOffice'in içinde para ve bilet bulunur.


Değişime Duyarlı Kod

enter() yöntemi iki koşulu varsayar.

  • İzleyici, nakit ve davetiyeyi saklamak için her zaman bir çanta taşır.
  • Satıcı, bileti yalnızca gişeden satar.


Peki ya aşağıdaki durumlar?

  • İzleyicinin çantası olmayabilir.
  • İzleyici, nakit yerine kredi kartı kullanabilir.
  • Satıcı, gişeden dışarıda bilet satabilir.


Örneğin, ilk gereksinimi karşılamak için Audience'ın Bag nesnesini kaldırmalı ve bununla bağlantılı Theater sınıfının enter() yöntemini düzeltmeliyiz. Bunun nedeni, Theater sınıfının izleyicinin bir çanta taşıdığı ve satıcının yalnızca gişeden bilet sattığı konusunda aşırı ayrıntılı bir bilgiye dayanmasıdır. Bu ayrıntılardan biri bile değişirse, ilgili sınıfı ve ona bağımlı sınıfları (örneğin Theater) değiştirmemiz gerekir.


Bu, nesneler arasındaki bağımlılık ile ilgili bir sorundur ve bağımlılık, değişikliklere ilişkin bir etkiyi ima eder. Ancak nesne yönelimli tasarım, birbirine bağımlı olarak işbirliği yapan nesnelerin bir topluluğunu oluşturmayı amaçladığı için, bağımlılığı tamamen ortadan kaldırmak yerine, uygulamanın işlevselliğini sağlamak için gerekenen az bağımlılığı korumakve gereksiz bağımlılıkları ortadan kaldırmak gerekir.


Nesneler arasındaki aşırı bağımlılık durumu, birleşmeolarak adlandırılır; iki nesne arasındaki birleşme ne kadar yüksekse, birlikte değişme olasılıkları da o kadar artar. Bu nedenle, tasarımın amacı, nesneler arasındaki birleşmeyi azaltarak değişiklik yapmayı kolaylaştıran bir tasarım oluşturmaktır.


Tasarımı Geliştirmek

İzleyicinin bir çantaya sahip olması ve satıcının gişeden bilet satması gerçeği, Theater tarafından bilinmesi gerekmez. Theater yalnızca izleyicinin tiyatroya girmesini ister. Bu nedenle, izleyici kendi çantasındaki nakit ve davetiyeyi işlesin ve satıcı da kendi gişesinin biletlerini ve satış fiyatını işlesin; yani onlara özerk bir varlık gibi davranın.


Özerkliği Artırın

Sadece yakından ilişkili işleri yapan ve ilişkisiz işleri başka nesnelere devreden nesneler, yüksek birleşmeye sahiptir. Kendi verilerini kendi başına işleyen özerk nesneler oluşturursak, birleşmeyi azaltır ve birleşmeyi artırabiliriz.


Prosedürel ve Nesne Yönelimli

  • Prosedürel
    • Theater'ın enter() yöntemi bir işlemdir; Audience, TicketSeller, Bag ve TicketOffice verileridir.
    • İşlemleri ve verileri ayrı modüllere yerleştirme yöntemi, prosedürel programlama olarak adlandırılır.
    • Kodumuzda sezgiye aykırı birçok şey vardır. (örneğin, izleyici kendi parasını ve davetiyesini yönetir.)
    • Veri değişikliklerinin etkisini daraltmak zordur.
    • Sorumluluklar merkezi olarak yönetilir. (Theater her şeyi yönetir)
  • Nesne Yönelimli
    • Verileri ve işlemleri aynı modülde bulundurma yöntemi, nesne yönelimli programlama olarak adlandırılır.
    • Sezgiye uygun kod yazabiliriz.
    • Veri değişikliklerinin etkisini, kapsülleme yoluyla etkili bir şekilde daraltabiliriz.
    • Her nesne kendini yönetir.


Daha İyi Hale Getirebiliriz.

  • Audience sınıfının Bag sınıfı hala Audience sınıfı tarafından taşınan pasif bir varlıktır; bu nedenle Bag sınıfını özerk bir nesne haline getirmemiz gerekir.
  • TicketSeller sınıfının TicketOffice'i de TicketSeller tarafından istediği gibi yönetiliyor. TicketOffice'i özerk bir nesne haline getirmemiz gerekiyor.
    • Ancak değişiklikten sonra TicketOffice, Audience ile ek birleşme yarattı.
    • Bu nedenle, tasarımda ödünleşimler göz önünde bulundurulmalıdır. Bu durumda, Audience ile birleşmeyi azaltmak için TicketOffice'i biraz pasif bir nesne yapmaya karar verebiliriz.



Evet, Yalan!

  • Gerçek dünyada, pasif bir varlık olsa bile, nesne yönelimli dünyaya girdiğinde her şey aktif ve özerk bir varlık haline gelir.
  • Pasif nesneleri, gülümseyen, konuşan ve öfkelenen varlıklarmış gibi düşünmek için kişileştirmeyi kullanmak iyidir.


Nesne Yönelimli Tasarım

Tasarım Neden Gerekli?

  • Tasarım, kodu yerleştirmektir.
  • İyi bir tasarım, bugün ihtiyaç duyulan işlevleri tam olarak yerine getirirken yarının değişikliklerini sorunsuz bir şekilde kabul eden bir tasarımdır.


Nesne Yönelimli Tasarım

  • Değiştirilebilir kod, anlaşılması kolay koddur.
  • Nesne yönelimli paradigma, dünyayı gördüğümüz şekilde kod yazmamıza yardımcı olur.
  • Nesne, kendi verilerinden sorumlu özerk bir varlıktır.
  • Mükemmel bir nesne yönelimli tasarım, işbirliği yapan nesneler arasındaki bağımlılıkları uygun şekilde yöneten bir tasarımdır.


Kaynaklar

  • Nesneler
제이온
제이온
제이온
제이온
[Nesne] 2. Bölüm: Nesne Yönelimli Programlama Film rezervasyon sistemi uygulaması için nesne yönelimli programlama metodolojisini açıklayan bir dokümandır ve işbirliği, nesne, sınıf, kalıtım, çok biçimlilik, soyutlama, kompozisyon gibi kavramları ele almaktadır. Kapsülleme, arayüz, uygulama gizleme y

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

[Etkin Java] Madde 5. Kaynakları Belirginleştirmeyin, Bağımlılık Enjeksiyonunu Kullanın Bir sınıfın harici kaynaklara bağımlılığı varsa, singleton ve statik yardımcı sınıflar kullanılmamalıdır. Bağımlılık enjeksiyonu, sınıfın esnekliğini, yeniden kullanılabilirliğini ve test edilebilirliğini iyileştirmeye yardımcı olabilir; fabrika yöntemi d

28 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

Fikirlerim hakkında ne düşünüyorsunuz? Fikirlerin anlamı, sadece yaratıcı düşüncelerin ötesinde, başkalarının günlük yaşamlarını nasıl etkilediğini ve onlara anlam kazandırdığını ifade etmektedir. Heidegger'in felsefi bakış açısıyla, fikirlerin gerçek değerini ve anlamını yeniden gözden geçire
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

7 Mayıs 2024

Yatırımın Neden Olasılıksal Bir Düşünce Biçimiyle Yaklaşılması Gerekir: Yatırım Sonuçlarının Kesin Nedenini Asla Bilemezsiniz Yatırım sonuçları, beceriye ek olarak şansa da büyük ölçüde bağlıdır ve kesin nedeni belirlemek imkansızdır. Bu nedenle yatırım, olasılıksal bir düşünce biçimiyle ele alınmalı, avantajlı durumlarda mümkün olduğunca savaşılmalı ve dezavantajlı durumlarda i
고집스런가치투자
고집스런가치투자
고집스런가치투자
고집스런가치투자

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

[SI Geliştirici Hikayesi] 09. SI Projesine Katılım Sonrası Gerçek Geliştirmenin Başlangıcı SI geliştiricisi, projeye katıldıktan sonra RFP'de belirtilen işlevleri geliştirir ancak müşteri ek talepleri nedeniyle kod değişiklikleri sıklaşır ve verimlilikten ziyade hızlı geliştirme önem kazanır. Bu nedenle, temiz kod veya verimlilikten ziyade işle
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

18 Nisan 2024

Yatırım Kazanç Oranını Artırmanın Yolları: 1) Çoğunluğun Görüşlerine Kapılma, 2) Sonuçlara Katı Ol Yatırım başarı oranını artırmak için, çoğunluğun görüşlerine kapılmamak ve sonuçlara katı olmak gerekir. Başarıya gösterilen tevazu ve başarısızlığa gösterilen soğukkanlı analizle yatırım becerisi geliştirilebilir.
고집스런가치투자
고집스런가치투자
고집스런가치투자
고집스런가치투자

3 Nisan 2024