SORU
17 Kasım 2010, ÇARŞAMBA


Nasıl Python ile bir sınıf tasarımı mı?

Benim önceki soru for detecting paws toes within a paw, gerçekten harika biraz yardım aldım ama bütün bu çözümler, bir seferde sadece tek bir ölçüm için çalışır.

Now I have data:

  • 30 köpekler;
  • her 24 Ölçümler (çeşitli alt gruplara bölünmüş) vardır;
  • her ölçüm en az 4 kişiler (her pençe için)
    • her kişi için 5 bölüme ayrılmıştır
    • parametreleri, kişi, zaman, yer, toplam kuvvet vb çeşitli vardır.

alt text

Belli ki büyük bir nesnenin içine her şeyi yapışmasını onu kesmek için gitmiyor, fonksiyonları mevcut takım yerine sınıfları kullanmak için lazım olur dedim. Ama dersleri Öğrenmeye Python bölüm okumuş olsam da, benim kendi kodu (GitHub link) uygulamak için başarısız

Ben oldukça garip bir şekilde tüm verileri işlemek için değil, aynı zamanda gibi hissediyorumherzaman biraz bilgi almak istiyorum. Her pençe yerleri biliyorum bir kere bana bunu tekrar hesaplamak için bir sebep yok. Ayrıca, pençe ait olduğu belirlemek için aynı köpeğin tüm pençeleri (ön/arka, Sol/Sağ) karşılaştırmak istiyorum. Bu sadece fonksiyonları kullanmaya devam edersem bir karmaşa olacak.

Şimdi bana mantıklı bir şekilde verilerimi (link to the zipped data of one dog) işlem izin veren sınıflar oluşturmak için tavsiyeler arıyorum.

CEVAP
17 Kasım 2010, ÇARŞAMBA


Nasıl bir sınıf tasarımı için.

  1. Kelimeleri yaz. Bunu yapmak için başladı. Bazı insanlar sorunları var ve bu yüzden merak etmeyin.

  2. Bu nesneleri ne yapacağını hakkında basit ifadeler kelime kümesini genişletin. Ki, bu şeyler yapıyor olacak çeşitli hesaplamalar yazınız. 30 köpek, 24 ölçümleri, 4 kişiler ve birkaç kısa liste "parametreler" kişi başına ilginç, ama sadece hikayenin bir parçası. "" Ve "pençe" nesne tasarımı bir sonraki adımdır. hangisine ait belirlemek için aynı köpeğin tüm pençeleri karşılaştırın yerlerde senin

  3. Bu isimler altı çizili. Cidden. Bazı insanlar bunun değerini tartışma, ama ilk kez OO geliştiriciler için yardımcı olur. Bu isimler altı çizili.

  4. İsimler gözden geçirin. Genel isimleri "" ve "ölçü" sorunu senin sorunun için geçerli olan belirli, somut isimler ile değiştirilmesi gereken etki. parametre gibi Detay sorunu açıklığa kavuşturmak. Jenerik sadece elide detayları.

  5. Her isim için ("", "", "", vb.) köpek pençe temas bu ismin niteliklerini ve hangi nesne yürütmektedir eylemleri yazın. Yok kısa yol bu. Her öznitelik. "Veri Kümesi içerir 30 Köpek" için örnek önemlidir.

  6. Her öznitelik için, eğer bu tanımlanan bir isim için bir ilişki olup olmadığını belirlemek, ya da "" veya "atom" bir dize ya da bir şamandıra falan gibi veri indirgenemez. ilkel

  7. Her eylem veya İşlem, fiil sorumluluğu olan, ve sadece katıldıkları tanımlamak gerekir. Meselesi "mutability". Bazı nesneler güncel olsun, Diğerleri yok. Değişken nesneleri mutasyonları için toplam sorumluluk sahibi olmalı.

  8. Bu noktada, sınıf tanımları içine isimler dönüştürmeye başlayabilirsiniz. Bazı toplu isimler listeler, sözlükler, dizilerini, ayarlar veya namedtuples ve çok fazla çaba harcamanıza gerek yok. Diğer sınıflar daha karmaşık, ya da gerçekleştirilen karmaşık türetilmiş veri veya bazı güncelleme/mutasyon yüzünden.

İzolasyon unittest kullanarak her sınıf test etmeyi unutmayın.

Ayrıca, sınıflar kesilebilir olmalıdır olduğunu söyleyen bir kanun yok. Örneğin sizin durumunuzda, neredeyse hiçbir değişken veri var. Ne türetilmiş veri, kaynak kümesi dönüştürme işlevleri tarafından oluşturulur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dylan Dubay

    Dylan Dubay

    10 Temmuz 2013
  • Jay Will

    Jay Will

    19 NİSAN 2006
  • Roger Huffman

    Roger Huffma

    4 ŞUBAT 2007