Nesneye yönelik tasarım becerilerini nasıl değerlendirirsiniz? [kapalı]


11

ne tür bilgiler veya sorular bir kişinin OOAD becerilerini belirlemenize yol açacaktır.


Onlara benim i'leri çizip çizmediklerini sorun.
İş

Yanıtlar:


10

Basit bir problemin yarı yamaçlı OO tasarımını gösterebilir ve ne yaptığını, neyin iyi ve kötü olduğunu, yeterince esnek olup olmadığını, neyin geliştirilebileceğini ve nasıl yapılacağını tartışabilirsiniz.

Tartışmayı başlatmanız gerekiyorsa, kişinin kodun bazı yönleri hakkında ne düşündüğünü sorun, ancak önde gelen bir soru ile değil.

Önemli olan cevapları önceden bildiğinizden değil, tartışmanın önemli olduğunu hatırlamaktır. İyi bir geliştirici, daha önce düşünmediğiniz kod hakkında bir şey işaret edebilmelidir.


Soru-cevap yerine tartışma olduğu bu röportaj yöntemini seviyorum.
Rohan Monga

5

Açık uçlu tasarım problemini kişiyle tartışın. Sistemin bir modelini nasıl geliştirdiğini, ne tür sorular sorulduğunu, yeni bilgilere yanıt olarak tasarımın nasıl değiştiğini görün.

Steve Yegge tarafından blog yayınlarından birinde bahsedilen harika bir örnek, kişiden XML için bir nesne modeli bulmasını istemektir.


Bana bağlantıyı verebilir misiniz :)
Rohan Monga

1
@bronzebeard - İşte başlıyoruz - sites.google.com/site/steveyegge2/… . Aslında OO modelleme HTML hakkında konuşuyor - ama XML bu sorunun daha zor bir versiyonu olabilir :)
talonx

4

Tüm en popüler tasarım desenleri hakkında iyi bir bilgiye sahip olmak , adayın tasarım sorunlarına çözüm aradığını kanıtlayabilir.

Onları tartışabilmek ve ne zaman uygulayacağınızı bilmek, onları anladığının iyi bir göstergesidir.

Örneğin geçmiş deneyimlerindeki kullanımlarını istemek de yardımcı olabilir.


Bu, aşırı yüklemenin C # 'da nasıl çalıştığını bilmenin bir testidir, ancak OOAD tasarım becerileri için neredeyse bir test değildir.
user281377

Çok haklısın. Sorunuzu çok hızlı okudum, değiştiriyorum.

4
Bununla birlikte, tasarım desenleri hakkında bilgi sahibi olabilir ve konsepti hiç duymamış olabilirsiniz. İsimleri olduğunu bilmeden çok önce sorumluluk zinciri, gözlemciler ve kontrolörler gibi şeyleri kullanıyordum. Birisi bir desenin adını bilmediği için bunu yetkin bir şekilde kullanamayacağını varsaymamaya dikkat edin.
Michael K

@Michael: Evet, bu yüzden önce belirli bir sorunun nasıl çözüleceğini sormak, daha sonra desenin gerçek adı hakkında konuşmak daha iyidir. Her gün strateji modelini kullanan birçok insan tanıyorum ve buna böyle bir şey bilmiyor. Sadece dördü orijinal grubun yaptığı gibi düşünerek "yarattılar". Fark, ikincisinin konu hakkında bir kitap yazmasıdır.

Dörtlü Çete, diğer projelerde kullanılan OO kodunu görmekten desen aldı. Tasarımların hiçbiri için, sadece onları tanımak ve tutarlı bir şekilde tanımlamak için hiçbir şekilde kredi almazlar.
Macneil

3

Do not bir kelime sınava tabi. "Miras Tanımla" veya "OO tasarımının 3. adı özellikleri", bireyin becerileri hakkında hiçbir şey anlatmayacak, sadece bir ders kitabını en son ne zaman okuduğuna dair sorulardır. Her gün bu becerileri kullanan birkaç harika programcı ile tanıştım, ancak resmi tanım vermesi istendiğinde boğulurdu.


2

Bir oda veya başka bir sanal varlık için iş nesnelerini, sınıflarını ve arabirimlerini / yöntemlerini yazmasını isteyecek


2

Mümkünse örnek kod isteyin.

Aksi takdirde, örnek olarak kullanılacak bazı prosedür kodlarını (veya kötü tasarlanmış bir OO kodunu) bulun ve daha sonra nasıl yeniden tasarlayacaklarını, genelleştireceklerini ve geliştireceklerini sorun. Yeniden tasarımın anlamlı olabilmesi için programın fazladan içeriğe sahip olduğundan emin olun.

Sonuçta test ettiğiniz şey - tasarım - özneldir. Bu nedenle, değerlendirmeniz sadece tek bir çözüm değil, birkaç olası iyi çözüme olanak sağlamak için açık uçlu olmalıdır. Ardından, bir arabirim değişikliğini zorlayacak gereksinimlerdeki olası değişiklikleri düşünün: Bunu nasıl ele alırlar?


1

İlk Tasarım Desenleri kitabını okuyun. Kitaptaki tüm örnekler Nesneye Dayalı bir problemle başlar ve Tasarım deseninde son bulur. Ayrıca belirli OOP kavramlarının neden sınırlı sonuçlar elde edeceğini ve bazılarının neden diğerlerinden daha iyi olduğunu da söylüyorlar.

Bir Tasarım Desen kitabı olmasına rağmen bu kitap OOP'un problemleriyle dolu :-)


Bunu bilmiyorum, çünkü kitaptaki tüm örnekler özellikle bir Tasarım Deseni veya diğerine yönelik. Yeterli teorik bilgiye sahipseniz, bunu anlayabilirsiniz ve bu pragmatik uygulamayı yansıtmaz
Rohan Monga

1

Başlamak basit: OOP ne hakkında?

OOP'nin temel öncüllerini sorarak başlayabilirsiniz: soyutlama, polimorfizm, kalıtım ve kapsülleme. Onları ısıtmak için düşünce için iyi yemek.

Onlara bir problem ver

Daha sonra, onlara kalıpları içerebilecek bir sorun sunun. Kalıpları adlandırmak veya kullanmak gerekli değildir, ancak yaklaşımları bölgede deneyimleri varsa muhtemelen biraz verilecektir.

Belki de dinamik metin girişi doğrulaması. Geçerli bir tarih, saat veya tarih ve saatin ISO8601 biçiminde olup olmadığını görmek için giriş karakterini karaktere göre doğrulamak istiyorsunuz. Bir tuşa her basıldığında giriş dizesinin bir kopyasını alırsınız ve metnin formatlardan en az birinde iyi kalıp kalmadığını belirtmek için bir boole döndürebilirsiniz. Onlardan OO tasarım ilkelerini kullanarak bir tasarım yapmasını ve taslak çizmelerini isteyin.

Hakkında konuşmayı bitirene kadar

  1. Denetleyici (değişiklik olaylarını başlatan ve yanıtları değerlendiren şey),
  2. Gözlemci (doğrulayıcılar değişiklik olaylarına yanıt verir),
  3. Strateji (her doğrulayıcı, girdinin geçerli olup olmadığını belirlemenin farklı bir yolunu temsil eder),

OOD'u anlarlarsa oldukça iyi bir fikriniz olacak.

Onlara tekrar aynı sorunu verin, ama bu sefer farklı bir tasarım isteyin

Şimdi, bir Gözlemci kalıbı kullanmadan sistemi yeniden tasarlamalarını isteyin (eğer belirtmişlerse) - bir Sorumluluk Zinciri yaklaşımı veya belki de bir Komut kalıbı seçmeyi seçebilirler. Hangisini umursamıyorsunuz, ilgili ilkeleri makul bir şekilde kavradığını biliyorsunuz.

Örüntü temelli bir yaklaşım için gitmeseler bile, sadece problemi ilgili işlevselliğine bölmeye çalıştıkları yolu dinlemek peşinde olduğunuz sonuçları verecektir.


1

Herkes tarafından iyi bilinen gerçek bir dünya senaryosu seçme eğilimindeyim ve onlardan varlıkları tanımlamalarını isterim; ilgili aktörler; aralarında hangi etkileşimler var; ortak özelliklerin soyutlanabileceği yerler; hangi özelliklerin dikkate alınması gerektiğini.

Evet, onlardan oturup UML'yi çizmelerini isteyebilirsiniz, evet onlardan bazı OOP uygulama özellikleriyle ilgili soruları aramalarını isteyerek "çalışmakta olup olmadıklarını" görmek isteyebilirsiniz.

Ancak bir işverenin ekibinde gerçekten ihtiyaç duyduğu şey, söz konusu kavramları anlayan ve ortaya çıkan her şeye uygulayabilen bir zihindir. Kavramlar yerleştirildiğinde ayrıntılar hızlı bir şekilde öğrenilebilir.


† Derin aşinalık ve kod yardımı ile bağlantı olmaması: Bir ailenin sabah banyo kullanması; akşam yemeği pişirmek; çalışmak için bir otobüs güzergahı; bir araba montajı.


0

Oldukça iyi görünen ve aslında sadece birkaç saniye süren bir şey: onlardan bir nesne modeli tasarlamalarını isteyin. Ne için önemli değil. Kesinlikle önemsiz olabilir. Aslında, testi gereksiz yere sürüklememek muhtemelen önemsiz olmalıdır.

Yazdıkları ilk şey bir nesne ise, OO anlayışında akranlarının% 99'undan zaten öndeler. Yazdıkları ilk şey bir sınıfsa, onlardan dışarı çıkıp bir sonraki adayı göndermelerini isteyin ve neden COP değil OOP olarak adlandırıldığını düşünün.


Ne demek istediğini anlasam da, bunu tam anlamıyla almak konusunda biraz dikkatli olabileceğimi düşünüyorum. 'Serbest düşünme' tasarım çözümleri olduğumda, diyagramlama ile gerçekten demek istediğim şey olmasa bile UML sınıfı notasyonlarını kullanma eğilimindeyim.
Ken Henderson
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.