it-swarm.dev

OOP kavramları teknik olmayan bir kişiye nasıl açıklanır?

Çoğu zaman insanlara bir programcı olduğumu söylemekten kaçınırım çünkü çoğu zaman onlara gerçekte ne anlama geldiğini açıklarım. Onlara programlama yaptığımı söylediğimde Java genellikle dil ve bunun x ve y'den nasıl farklı olduğu hakkında genel sorular soruyorlar. alanda çok fazla deneyime sahip değilim ve 2) teknik olmayan insanlara bir şeyler anlatmaktan gerçekten nefret ediyorum.

Bir şeyi bir başkasına açıkladıktan sonra gerçekten anladığınızı söylüyorlar, bu durumda OOP terminoloji ve kavramları teknik olmayan bir kişiye nasıl açıklarsınız?)

10
John

Genellikle denemek ve gerçek dünya örnekleri kullanarak Nesne Yönelimli-Programlama tanımlamak.

Örneğin, Vehicle adlı bir sınıfın, bir aracın minimum şeylerini açıkladığını söyleyebilirim. Kişiden bana bir aracın ne olduğunu düşündüğünü söylemesini isteyeceğim. Bazen "Peki, bir araba ya da bir kamyon gibi" gibi şeyler söylerler, ben de başını sallayarak onaylarım. Sonra bir araba ile bir kamyon arasındaki farkların ne olduğunu soracağım. Bazen büyüklükten, bazen amaçtan ve diğer şeylerden bahsederler.

Sonra onlardan bir araba veya bir kamyonu unutmalarını isteyeceğim ve sadece bir aracı tarif etmeye devam etmelerini isteyeceğim:

"Ah, iyi hareket ediyor"

"Bir operatörü ya da bir sürücüsü var"

vb...

Yakında, bir aracın ne olduğunu biliyoruz ve OOP içinde bir araç tanımlayacağımızı söylüyorum ve tartışma uğruna onun hareket edebileceğini ve ona bir çeşit sürücü verebileceğini söyledim. diye soracağım, tamam, bir arabanın nesi var?

"Kapılar"

"Pencereler"

Ve sonra bir kamyon ....

"Kapılar" "pencereler" "Daha Fazla Tekerlek!"

Çok geçmeden, birçok tartışmadan sonra, diğer kişi genellikle şunları tespit etti:

1) Bir aracı ne oluşturur

2) Bir arabayı ne oluşturur

3) Kamyonu ne oluşturur

4) Bir uçağı neyin oluşturduğu.

Hepsi herhangi bir teknik olmadan. Her birinin özelliklerini doğru alanlara ayırdık. Kalıtım anlıyorlar ("Evet, bir araba bir araç, bir kamyon bir araç, ancak bir araba bir kamyon değil, BASİT, duh!").

Polimorfizmi bile anlıyorlar, "Tabii, temelde aynısını yapıyorlar, ama bu biraz farklı olabilir.". Davranış ve bunun nesneler ağacımızda nerede yaşanması gerektiği hakkında konuşabiliriz.

Eğitimine ve geçmişine bağlı olarak, bazıları diğerlerinden daha hızlıdır. Ama OOP gerçek hayattaki nesnelerle karşılaştırdığımda, çoğu insan bunu her zaman elde eder. Aslında, teknik olmayan insanlarla konuşmalarda hiç düşünmediğim şeyler buldum. Örneğin (dronlar) insanlı olmak zorundadır, ancak bir programcı aracın operatörünü bir mülk olarak düşünür müydü? Bir operatörün bahsetmesinin doğru veya yanlış olduğunu söylemiyorum, ama düşünmemize neden oluyor neyi modellediğimiz ve yazılım geliştirirken neyi başarmaya çalıştığımız hakkında.

Şimdi ise kısmi şablon uzmanlığı .... :)

27
Moo-Juice

Nesneler isimlerdir, yöntemler fiillerdir.

14
k rey

Ultra teknik olmayan bir kişiye verdiğim hazır cevabımın bir versiyonu:

Programlama, bilgisayarda gerçekliğin bir temsilini yaratma girişimidir. Bunu zaten yapan birçok araç ve cihaz var - bir e-tablonun muhasebe veya istatistikleri temsil etmemizi nasıl kolaylaştırdığını veya bir PowerPoint sunumunun sunumlarımızı depolayıp görüntülememize nasıl izin verdiğini düşünün.

Bazen iş süreçlerimizi yansıtan yeni veya mevcut uygulamalara gerçekliğin özel temsillerini inşa etmemiz gerekir. Programlamanın birçok yolu vardır ve programlamanın en yaygın yollarından biri, oluşturduğumuz kodun gerçeklik kavramlarını çoğaltmak için özel olarak tasarlandığı nesne yönelimli programlamadır. Gerçekte "şeylerin" nitelikleri ve davranışları vardır. Örneğin, bir insanın genellikle kolları ve bacakları, saç rengi, etnik kökenleri vardır ve genellikle Konuşabilir ve yürüyebilir.

Konuşma ve yürüme, hangi dili konuştuğu veya yürüdüğü hız veya yol gibi farklı çeşitlerde olabilir.

İnsanlar, ister hayvan, diğer insanlar, diğer canlı organizmalar veya cansız nesneler olsun, diğer tür “şeylerle” etkileşime girerler. Gerçekte "şeyler" arasındaki etkileşimler, şeylerin kategorizasyonu, vb. Gibi temsil edilmesi gereken bir konuya ihtiyaç duyan temalar vardır. Kuruluşumuzda devam eden iş süreçlerini düşünün. Kuruluşumuzun kullandığı yazılımda temsil edilmesi gereken çok karmaşık bir "iş mantığı" vardır.

Nesneye Yönelik programlama, bu "gerçek dünya kavramlarını" ve "iş mantığını" doğru bir şekilde temsil etmek için bir araç sağlar.

-> Bu ifade genellikle meraklarını gidermek için yeterlidir (veya belki de gözyaşlarına sıkar), ancak daha fazla soruları varsa, yukarıdaki ifade (inanıyorum) konuşmanın nereye gidebileceği için iyi bir temel oluşturur. Teknik olmayan kişinin "Soyutlama", "Kompozisyon," "Çok Biçimlilik" vb. buna dayalı örnekler çekmek.

3
Tim Claason

Ben her zaman öğrendim OOP böyle:

Bir saatiniz var ve zamanı anlatıyor - programlamada, tüm kodları ve hepsini bir araya getirmeniz gerekiyor (oldukça açık görünüyor, ancak insanlar ilk günlerde bu şekilde yapmadılar). Her neyse, buna kapsülleme denir.

Şimdi bir saat şeyiniz var, bir çalar saat isteyebilirsiniz - peki, tüm şeyleri bir araya getirdikten sonra, alarmı ayarlamak ve çalmak gibi daha fazlasını yapmak için bir şeyler ekleyebilirsiniz. Buna kalıtım denir.

Ayrıca, bileğimdeki saate bakıyorsunuz, ancak büyükbaba saati veya dijital saat gibi farklı görünen diğer saatleri de yapabilirsiniz. Farklı görünüyor, ama yine de bir saat - buna polimorfizm deniyor.

Ve burada nesne yönelimli programlamanın 3 köşesi var. Geri kalan her şey sadece kodlama.

1
gbjbaanb

Bu cevapta eşimle bu konu hakkında yaptığım bir konuşma hakkında konuştum: https://softwareengineering.stackexchange.com/questions/45464/how-to-convince-non-programmer-his- kavramlar-yaklaşık-bilgisayarlar-are-yanlış/45467 # 45467

EDIT: Orada cevapladığım soru ılımlı oldu, bu yüzden burada cevabımı tekrar yazacağım.

Eşimle bir restoranda otururken bana "Nesneye Dayalı ne anlama geliyor?" Diye sordu.

Kodun yeniden kullanımı, kapsülleme ve polimorfizm hakkında şişkinliğe başladım ve bir noktada gözlerinin ölümcül bir şekilde sırlandığını fark ettim.

Bu yüzden bir Splenda paketini kaptan aldım. Dedim ki, "İşte bir nesne. Özellikleri nelerdir?"

"Dikdörtgen, kağıttan yapılmış, splenda içeriyor, mavi, üzerine baskı var." Dedi.

Bir şeker paketi aldım. "Bununla ortak noktası nedir?"

Dedi ki, "Dikdörtgenlik, kağıt, baskı var."

"İkisinin de tatlı bir şey içermesine ne dersiniz?" Dedim.

"Tabii" dedi.

Ben de "Her ikisi de soyut bir tatlandırıcı paketi diyebileceğimiz şeylerin örnekleridir. İsterseniz platonik bir ideal tatlandırıcı paketi."

"Tabii" dedi.

Dedim ki, "Ve her birinin soyut paketten miras alınan özellikleri ve daha sonra onun türüne özgü varyasyonları var."

Dedi ki, "Doğru. Oh! Ve eğer bir Sakarin paketi yapmak istersem, jenerik olanı alırdım ve onunla ilgili ayrıntıları Sakarin için ayarladım ve sonra buna sahip olurdum!"

"Bingo: Nesneye Yönelik Programlama" dedim.

Sen ve ben, fabrika tasarım örüntüsüne doğru ilerlediğini biliyoruz. Her neyse. Kalıtım, kapsülleme, nesne sınıfı kimliğini gösterir ... İyi şeyler.

1
Dan Ray

Onlara OOP) kursuna kaydolmalarını söylerdim.

Yani Car.startEngine () gibi tüm benzerlikler; yüzleşelim - saf rap. OOP yıllar önce ilk girdiğimde, bunları yalnızca etki alanını daha da soyutlamak için buldum.

OOP yöntemsel dillerin karmaşıklığını yönetmekle ilgili olduğunu açıklamak yerine, programlama kitabı yazarlarının yaklaşık% 80'i programcıların basitçe konuşulması gereken ipucusiz aptallar olduğunu varsaymaktadır (burada ironi? terimleri.

Evet, Listeler ve Vektörler'i açıklamak kesinlikle normaldir, çünkü Car.Engine ve PoliceMan.Arrest ile değil, çoğunlukla birlikte çalıştığımız şeydir (bir oyun geliştiricisi değilseniz, ancak yine de, eski).

Konuya geri dönersek, onlara sadece, programcının zihninde, bordro işleme/oyun oynama/uzay mekiği navigasyonu vb. Amacıyla var olan somut olmayan nesneler oluşturduğumu söyleyebilirim.

Hala soruları varsa, tartışmayı bırakın, çünkü buna değmez. Çoğu insan soyut kavramları hayal etmede başarısız olur ve hemen hemen her şey için örneklere ihtiyaç duyar (bu, gerçek konunun daha basitleştirilmesi/uzmanlaşması anlamına gelir).

1
Jas

Yine de bu soru kapalı olmaya aday görünüyor ...

Çoğu şey gibi, OOP aslında kavramsal düzeyde açıklamak çok basittir.Programcılar nesneleri modeller ve:

  • nesnelerin durumu vardır (alanlar/veri üyeleri)
  • nesnelerin eylemleri vardır (yöntemler/işlevler)
  • birbiri üzerine inşa edilen nesneler (kalıtım)

Bunlar yüzlerce ince ayrıntı, elbette. Ama birisine sadece 10 saniyelik bir genel bakış sunmaya çalışıyorsanız, bunun iyi bir başlangıç ​​olduğunu düşünüyorum. Açıklamakta zorlandığınız daha spesifik kavramlar var mı?

0
zourtney

Cep Telefonu örneği:

Bir fabrika sahibi olduğunuzu, genel bir telefon tanımlamak istediğinizi düşünün

  • Adım 1: Bu genel telefonların özelliklerini listeleyin: örneğin: boy, ağırlık, renk vb.
  • Adım 2: Bu genel telefonları listeler Örn: çağrı yapma, çağrı alma, sms gönderme vb.

Artık jenerik "planınıza" sahip olduğunuza göre bana aşağıdaki telefonları oluşturun:

Telefon 1:

  • Yükseklik-> 102mm

  • Ağırlık-> 85g

  • Renk-> pembe

Telefon 2:

  • Yükseklik-> 125mm

  • Ağırlık-> 96g

  • Renk-> kırmızı

0
Darknight

Mirasımı açıklamak için araba örneğini seviyorum (araçlardan ziyade hayvanları kullanma eğilimindeyim ama aynı fikir), ancak nesne odaklı bir programın nasıl çalıştığını açıklamak için bir zamanlar Chris Crawford'un web sitesinde okuduğum bir benzetmeye atıfta bulunuyorum: program şöyle gerçekten verimli bir bürokrasi. Programdaki tüm farklı nesneler bir bürokrasideki farklı bölümler gibidir; her departmanın kendine özgü görevleri vardır, iyi tanımlanmış girdileri vardır (kiminle konuşulacağı ve hangi formların doldurulacağı) ve diğer departmanlar genellikle içeride neler olduğu hakkında çok fazla şey bilmezler. İK soyut bir fabrika gibidir, bu bir singleton vb.

Bir bilgisayar programına yanlış bir şey yazdığınız için bir hata mesajı almak, bir ofise göndermek için yanlış formu doldurmak gibidir.

0
jhocking

OOP, insan düşünce sürecinin herhangi bir şeyi - bir soyutlama - ve bilindik süreçleri ve sınıflandırmaları dijital olarak taklit etmek için işlevselliği dijital bir “boşluğa” yansıtmak için dünyanın anlaşılması durumunda kaba bir sadeleştirmedir. Birçok açıdan, ilkel dil durumumuz hakkında "bilgisayar gibi düşünmekten" daha fazla.

Programlama gerçekliği veya insan düşüncesini taklit ederse, doğada çok daha organik, kaotik ve gelişigüzel olurdu - hatta yanal. Bunun yerine gerçeği bebek adımlarına, "2 + 2 mantığına", kaba kategorilere, yeniden kullanılabilir küçük araçlara ve tarih öncesi akıl yürütmeye dönüştürüyoruz.

Hala düşüncelerimizi ve arzularımızı bir protokole ve ortak dile nasıl indireceğimizi araştırmaya çalışıyoruz. Hiç de "akıllı" değil - en basit şeylere bile nasıl karar verdiğimizi veya anladığımızı nasıl kolayca açıklayamayacağımızı vurgular. Bilgi işlem hala "köpek bir köpek çünkü kedi değil" düşünce evrim düzeyindedir - temel konuşma dilinin bile binlerce yılı gerisindedir.

0
Glyn

İki çeşit sihirbaz var. Sihirli sözlerle belirli şeyleri yapan adam var. Ateşi çağırdığı için bir kelimesi var. Dondurulmuş bir tavuğu ince havadan göstermesi için bir Sözü var. Ve çırpınan iyilikle dolu bir kuvvet potu oluşturmak için başka bir Kelime (kuvvetimi yeşil, parıltılı ve yarı saydam tercih ederim). Kelimelerinin doğru uygulamasıyla kızarmış tavuk üretebilir.

Ve sonra OOP sihirbazı var. Markete nasıl gideceğini, bir tavuk (ya da hazırlamasını istediğiniz diğer yiyecekler için malzemeler) satın alacağını bilen bir imp'i kim çağırıyor, pişiriyor, ve size akşam yemeği servis ediyoruz. OOP Wizard onun imp'sini nasıl yapacağını söylemek zorunda değil. Sadece ona ne istediğini bildirmesi gerekiyor Bu durum kızarmış tavuk. Sadece bu değil, OOP sihirbazı imparatoruna ne yapacağını söylemek için diğer köleleri çağırabilir.

Yani, büyücü adam partilerde etkileyicidir, ancak OOP sihirbazı, bir grup karakterle sihirli bir restorana başlayacağınız zaman istersiniz (örneğin, sinirli bir Unicorn garsonu) ve bir trol kat yöneticisi) herkesin birlikte çalışması gerekir. Eğer "restoran" çözme sorununun her adımını çağırmaya çalışırsanız, kolayca detaylarda karışık alabilirsiniz ve hata yapmak gerçekten kolaydır. = OOP sihirbazı kendi ayrıntılarını sıralamak için kölelerini önceden eğitir, böylece daha büyük problemi insanlarının etkileşimde bulunarak çözmeye odaklanabilir.

Bahsetmemek gerekirse, ilkokul kafeterya probleminiz için şef-imp'nizi tekrar kullanmak daha kolay, o zaman sözcükleri arayarak her seferinde tek bir adım yaparken tekrar kullanabileceğiniz veya kullanamayacağınız tüm çöpleri ayırmaktır. ve diğer kelime gruplarını çağıran kelimeler (daha fazla problemle başa çıkmanız gerektiğinden daha fazla sayılacaktır).

Adil olmak gerekirse, çok, çok dikkatli bir uygulama ile, büyücü sihirbazı hepsini OOP sihirbazı kadar hızlı yapabilir). Doğru büyüyü çağırmak için işleri doğru şekilde parçalayabilir kendi adına OOP sihirbazından daha fazla çalışma gerektirmez. Ancak işin anlaşılması veya çoğaltılması çok daha zordur ve büyük bölümlerini yeniden kullanmak çok daha zordur çünkü hepsi belirli bir kompleks için birbirine bağlıdır sorun.

0
Erik Reppen

Ben teknik olmayan bir tür hakkında OOP hakkında onlara anlatmak için açıklamak için en iyi yolu düşünüyorum.

Esasen OOD & OOP bir şeyler etkileşim dünyası olarak tasarladığınız ve uyguladığınız sistemi düşünmenizi istiyor.

Öyleyse, (internette asla iyi gitmeyen) tartışma uğruna, bir çöp toplayıcıya OOD & P hakkında açıkladığınızı varsayalım. Onun adı Bob. 15 yıl önce onunla okula gidiyordun, bir barda ona çarptın ve ikiniz de birbirinizin hayatına ilgi duyuyorsunuz.

"Yani, John, sen bir programcı olduğunu söylüyorsun. Yeğenim tüm bu saçmalıkların içinde. Nesne yönelimli programlama ya da bir şey hakkında devam ediyor. Tüm bunlar ne?" Bob'un yanlış yazdığı yönden İngiliz olduğunu unutmayın.

"Şey, Bob," diye cevap veriyorsun, yönlendirerek. "Gerçekten çok basit. Çöp topladın, değil mi? Ne, genellikle işinde misin?"

"Şey, ben kasabanın etrafında çöp toplama ve minibüste koyarak minibüs takip," diye cevaplıyor Bob, merakla.

"Mükemmel. Eh, bunu simüle etmek için bir program yazdığımı düşünün. Nesneye yönelik tasarımda ilk adım, hangi nesnelerin olduğunu belirlemektir. İşinizde sokaklar, kutular, siz ve minibüs var gibi görünüyor. Daha sonra her bir nesnenin hangi davranışları gerçekleştirdiğini bilmeliyiz.Gerçek dünyada nasıl çalıştığından emin değilim, ancak temizlenmesi gereken cadde hakkında size söylendiğini varsayalım. Bu, bir şeylerin temizlenmesi gereken sokakları dinlemesi gerektiği anlamına geliyor, sanırım minibüsü takip ettiğiniz için minibüs, temizlenmesi gereken sokakları dinleyecek - bu iki, üçüncüsü, tabii ki minibüsü takip ediyorsunuz. minibüsün içine çöp koyar mısın, ayrıca bir çöp kutusu dolu olup olmadığını da farkedersin, sanırım minibüsün dolduğunda seni bilgilendirmesi gerekecek ve bunu dinlemen gerekecek. Bunlar bizim davranışlarımız. Nesneye yönelik programlama aslında uyguladığınız yöntemdir ent tasarımı. Dilden dile farklılık gösterir. "

Bob birasında uyuyakaldı. Sen git.

0
Matt Ellen