Nesneye yönelik programlamanın ana sorumluluğu nelerdir?


10

Nesneye yönelik programlama konusunda yeniyim ve ana programın amacının ne olduğunu anlamıyorum.

Evet, bunun programın "giriş noktası" olduğunu okudum ama anlamadığım şey esas olarak ne olmalı? Sorumlulukları nelerdir?

Ana metinde yazılmış bir şey başka bir nesnede kapsüllenmiş olabilir, ancak bu yaklaşımı ne kadar kullanmalısınız?

İşte benim Java'da yazdığım ilk ana, çok basit ama şüphemi daha iyi anlamanıza neden olabilir. Ben "Kedi" ve "Köpek" tarafından uzatılmış soyut bir sınıf Hayvan var. Bazı nesne oluşturmak için ana kullandım ve aynı zamanda kullanıcı ile bir "arayüz" olarak kullandım, aslında gördüğünüz gibi "kullanıcıya ne yapmak istediğini sormak" için bazı koşullu talimatlar kullandım.

Sorum, arayüzün başka bir nesnede kapsüllenebilmesi ve bu sorumluluğu anaya verememesinden kaynaklandı.

    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.println("What type of animal do you want to create? \n dog cat");
    String type = input.nextLine();
    if ( Objects.equals(type, "dog")){
        System.out.println("Enter the animal's age: ");
        int age = input.nextInt(); // Scans the next token of the input as an int.
        System.out.println("Enter the animal's name: ");
        String name = input.next();
        Dog first = new Dog(name, age);
    }
    else if ( Objects.equals(type, "cat")) {
        System.out.println("Enter the animal's age: ");
        int age = input.nextInt(); // Scans the next token of the input as an int.
        System.out.println("Enter the animal's name: ");
        String name = input.next();
        Cat first = new Cat(name, age);
    }

    else{
        System.out.println("Error: the specified type does not exist.");
    }
    System.out.println("The number of animals is:" + numberOfAnimals);
}

2
mainFonksiyon OOP bir kavram değildir.
Andres F.

Yanıtlar:


10

Öncelikle, örneğin nesne odaklı bir program değil. Verileri nesnelerde saklamak için kullanılan yordamsal bir programdır, çünkü dilinizin (Java?) Yapılandırılmış veriler için sağladığı araç budur.

Gerçek bir nesne yönelimli program birbiriyle etkileşime giren nesnelerden oluşur - veri yerine davranışla ilgilidir (tartışmalı bir ifade olduğunun farkındayım, bu yüzden daha fazla kimlik bilgisine sahip kişilerden nesne yöneliminin çoklu tanımlarını görebileceğiniz bir bağlantı benden daha fazla; davranışların çoğunda göründüğüne dikkat edin).

Gerçek bir nesne yönelimli programda, kullandığım tanıma göre, birbirinizle etkileşen bağımsız nesneler var. mainİşlevin rolü , ilk nesneleri oluşturmak ve bunları birbirine bağlamaktır.

Basit bir örnek olarak, bir veritabanının üzerine inşa edilmiş bir web uygulamasını düşünün. Bu uygulama birçok yönden nesnelere bölünebilir, ancak burada bunlardan biri: Networkingbağlantıları kabul eden, HTTP isteğini ayrıştıran ve Controllerbir Databasenesneyle etkileşime giren ve yanıtı üreten uygun bir nesneye gönderilen bir nesne bir veya daha fazla Viewnesneyi her denetleyiciyle ilişkilendirmek için çekinmeyin). ThreadpoolAyrı yürütme akışları sağlamak için bir nesne de ekleyebilirsiniz .

mainBu uygulamadaki rolü şunlar olabilir:

  1. DatabaseNesneyi oluşturun
  2. Tüm oluşturma Controllernesneler ve onları ilişkilendirmek Databasenesne
  3. NetworkNesneyi oluşturun ve tüm Controllernesneleri onunla ilişkilendirin.
  4. Başlangıç Network(ayrıca oluşturma içerebilir amacı, çalışma Threadpoolve içine kablo Network).

Bu kurulum adımları açıkça içinde belirtilebilir mainveya başka bir nesne tarafından işlenebilir. Örneğin, tipik bir Spring uygulamasında, mainişlevin yaptığı tek şey uygulama içeriğini (tek bir nesne) oluşturmaktır. Bu, söz konusu uygulama bağlamının yapılandırmasında belirtilen tüm nesnelerin oluşturulmasını ve kablolanmasını tetikler.


1
OO'yu o kadar ciddiye alan, mainyöntem gibi bir şeyin bile var olamayacağı bir dil örneği için Newspeak'e bakın .
Jörg W Mittag

1
Güzel cevap, ama ben olsaydım Bağımlılık Enjeksiyonundan da bahsederdim.
Arseni Mourzenko

Kodumun nesne yönelimli olmaması konusunda ne demek istediğini anlıyorum Fark etmedim, ama aslında oluşturduğum nesnelerin herhangi bir davranışı yok. "Daha fazla OO" yapmak için bir fikir, zaten sahip olduğumları "kullanan" başka nesneler oluşturmak olabilir, ancak yöntemsiz bir nesneye sahip olmamak daha iyi olur mu?
Elia

@Elia - Hayır, daha iyi olmazdı. Yapısal verilerin yazılması ve adlandırılması için bir değer vardır (sadece a'ya dökülmesine karşı Map). Ancak Java bunu yapmanın yalnızca bir yolunu sunar (yapılar ve sınıflar arasında ayrım yapan C ++ ile karşılaştırıldığında). Bu nedenle, davranışları olmayan sınıfları tanımlayın, çünkü bu programınızın daha kolay anlaşılmasını sağlar, ancak bunu yaptığınızda programınızın "nesne yönelimli" olmadığını unutmayın.
kdgregory

1

Buna bağlı. İki uç noktaya götürün:

  1. Tüm kodu satır satır yerleştirin main. Bu iyi derlenecek ve çalışacaktır. Ancak bir insan için kod sindirilemez.
  2. Tek bir işlevi yerleştirin mainve onu arayın doWhatNeedsToBeDoneve sonunda bu rutinde aynı şekilde devam edin. Şimdi çok düzgün bir şey var mainama elbette, yapılması gerekeni alamıyorsunuz.

Yani, gerçek aradaki bir yerde. mainBir sayfaya uyan bir tane oluşturmayı deneyin , böylece birisi yapılması gereken ana talimatları alabilir. Doğru sınırı elde etmek sadece bir deneyim meselesidir.

Yukarıdaki genel bir kuraldır ve OO için olduğu kadar fonksiyonel programlama için de geçerlidir.


1

Statik ana yöntem, nesne-olmayan yönelimli dünyadan nesne-yönelimli dünyaya geçiş olarak mevcuttur. 80'lerde en az C ++ 'dan beri bu şekilde yapılmıştır.

Statik yöntemler esasen nesne yönelimli olmayan yöntemlerdir: bunlar prosedürel yöntemler olabilir; fonksiyonel yöntemler olabilirler. Statik yöntemler kavramı aslında OOP'un diğer programlama paradigmalarına bir kaçışıdır.

Java, C # ve C ++ 'nın tümü, statik C'yi geleneksel C stili anadan kendi programlama dillerine geçiş olarak kullanır; artık istediğiniz zaman nesneleri kullanmayı (veya istememeyi) seçebilirsiniz.

Bu diller, statik ana yerine bir birincil örnek nesne gerektirebilir, ancak bunun yerine statik ana yaklaşımı seçmiş olabilir. Bir örnek yaklaşımı alternatifi kullanıldığında, mainsınıf sınıfın bir alt sınıfı olur threadve dil çalışma zamanı, mainsınıfın ilk nesne örneğini oluşturur ve daha sonra runek iş parçacıklarının başlatılması / oluşturulması gibi örnek yöntemini çağırır .

Ancak bunun yerine tarihsel olarak başka bir yolla yapıldı: kısmen, bu diller sadece uyumu takip ediyor ve kısmen, çünkü o günlerde iplik geçirme bir öncelik değildi, bu yüzden daha basit statik yaklaşımı kullandılar.

Ayrıca, statik ana yaklaşım "daha basittir", çünkü alt sınıflamayı kullanmak zorunda değilsiniz, bu nedenle önemsiz öğretici programlar hello worldbir anlamda daha basittir (yine de nispeten açıklanamaz bir şekilde kullanılırlar static, önce OOP öğretmeye çalışıyor.)


-1

Programı çalıştırmak için Main () Yöntemi kullanılır

Sorumluluk - Programınızı çalıştırmaya başladıktan sonra Main () Yöntemi, programınızı çalıştırmaya başlamak için diğer yöntemleri çağırır.

Bu, Main () yönteminin sorumluluğunun ne olduğunu anlamama yardımcı olan basit bir cevaptır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.