Prosedür Kodu ve OOP kodu


19

PHP'de bir Prosedür Stili 13000+ satırlık bir projeyi bitirdim [çünkü OOP'u bilmeme rağmen çok aşinayım] ve proje mükemmel çalışıyor.

Ama onu OOP'ye dönüştürmeli miyim? [ çünkü dünya OOP ile meşgul ]

Kodum OOP [kapsülleme, kalıtım temelde ...] özelliğine ihtiyaç duymaz!

Peki ne yapmalıyım?

Ve onu OOP'ye dönüştürürsem nasıl bir yardım alacağım?


21
Bu projeyi değiştirmeniz gerekiyorsa lütfen bizi bilgilendirin. Bu kararı verdiğinizden veya pişman olduğunuzdan memnun olup olmadığınızı bilmek ilginç olacaktır.
JeffO

2
Kapsüllemeye ihtiyacınız var. OO bunu elde etmenin bir yoludur; belki sizin için çalışan bir tane daha vardır, ancak bir şekilde veya bu şekilde kod bağımlılıklarını kontrol etmeniz gerekir.
Marcin

Sizin için bir fıkra hakkında: birkaç yıl önce çoğunlukla JavaScript ile yazılmış orta boy bir web uygulaması üzerinde çalıştım (sormayın). Kodlama tarzı büyük ölçüde prosedüreldi. Proje tamamlanmak üzereyken, kodun yazılma şeklinden memnun kalmadım ve önemli bir bölümünü OOP-JavaScript'te yeniden yazdım. Bu, projenin yapılmasında gecikmeye neden oldu ve daha sonra proje üzerinde nispeten az bakım yaptık. Her zaman tüm bu kodlamanın çabaya değip değmeyeceğini merak ettim ;-)
Pandincus

evet buna değdi. tekrar kullanılabilirlik kapılarını açık tutmak her zaman buna değer.
Chani

1
Soru şu: daha fazla gelişme bekliyor musunuz? Prosedürel programlama, tam olarak neye ihtiyacınız olduğunu bildiğinizde ve değişmeyeceği en kolay ve en hızlı yaklaşımdır. Prosedürel kodda yapılacak herhangi bir değişiklik ağrı olacaktır, OOP'de çok daha kolay olacaktır.
Kamil Tomšík

Yanıtlar:


52

Kodumun OOP özelliğine ihtiyacı yok

Kendi sorunuzu cevapladınız - bu durumda OOP'ye ihtiyacınız yoksa ve projeniz çalışıyorsa, onu dönüştürmeyin.

Bununla birlikte, bir sonraki projeniz için OOP kullanmaya bakmalısınız - ancak sadece uygunsa.

Prosedürel programlama ile ilgili olarak yanlış bir şey yoktur - uygun yerde kullanıldığı sürece.


2
+ 1 katılıyorum "bir sonraki projeniz için OOP kullanmaya bakmalısınız".
Cary Chow

11
+1 evet, düzgün çalışıyorsa düzeltmeyin.
setzamora

4
Şimdilik doğru çalışıyorsa, değiştirmeyin, ancak bir sonraki özellik isteğinin ne olacağını asla bilemezsiniz.
JeffO

7
"Bir sonraki projeniz için OOP kullanmaya bakmalısınız", ancak mantıklı olmadıkça kullanmayın. Bazı şeyler prosedürel olarak daha iyi yazılır, bazıları OOP için daha uygundur. Uygun olanı kullanın.
TMN

@TMN - bu ima ediliyor - açıkça belirtmeliyim.
ChrisF

16

Hayır ve sadece OOP'ye ihtiyacınız olmadığı için değil.

Programınız zaten tamamlanmışsa ve tatmin edici bir şekilde çalışıyorsa, zamanın% 90'ından fazlası bitmiş kodu ne nedenle olursa olsun yeniden yazmak zaman kaybıdır.

OOP tamamen güçlü değil, OOP'un kullanılmaması gereken birçok yer var, bu yüzden sadece kullanmayın, çünkü OOP eğilimdir.


1
"Bitmiş kod" ile işe yarıyor mu?
JeffO

@ efendim ey evet efendim! mükemmel :)
Sourav

Projeyi bitirdiğini ve mükemmel çalıştığını söyledi. Benim için bu, müşteriye teslim edilmeye hazır olduğu veya bir tane olduğu varsayılarak müşteriye teslim edildiği anlamına gelir. Tamamlandığında, test edilmiş ve gönderilmeye hazır demek, elbette büyük hatalar ortaya çıkarsa, bir yeniden yazma devreye girebilir.
Skeith

Lütfen "OOP'un kullanılmaması gereken pek çok yer" hakkında ayrıntılı bilgi verin.
Falcon

3
@Falcon, OOP kodunuzun ne kadar iyi tasarlandığına bakılmaksızın, ancak sorun etki alanının kendisi OO modeliyle zayıf bir şekilde eşlenmişse, OOP tasarımınız berbat olmak zorundadır. Bir sürü sorunlu alan var zaman OOP cinsinden ifade edilmemesi gereken .
SK-logic

8

Genel paradigmaları ele almam (ve neden üç büyük paradigmadan hiçbiri programlamanın doğru yolu veya yanlış yolu değildir):

Yüksek düzeyde basit (düşük düzeyde karmaşık olsa da) bir sorununuz olduğunda ve buna bağlı olarak basit, doğrusal kod yazmak istediğinizde yordamsal programlama iyidir. Problemin herhangi bir yerde güçlü bir ayrıştırmaya ihtiyacı yoksa, OO ve işlevselden yazmak ve anlamak tartışmasız daha kolaydır. Örnekler: OO veya işlevselliği kullanarak işleri parçaladıktan sonra sayısal kod, çoğu küçük komut dosyası, çoğu küçük alt sorun.

Bazı endişelerin birden fazla uygulamasına sahip olabileceğiniz için, endişeleri güçlü bir şekilde ayırmanız gerektiğinde nesne yönelimli kod iyidir. Örnek: Çoğu büyük işletme yazılımı. Örneğin, iş mantığını sunum mantığından güçlü bir şekilde ayırmak isteyebilirsiniz, çünkü muhtemelen bağımsız olarak değişmeleri gerekecektir.

İşlevsel stil programlama, mekanizmanın politikadan güçlü bir şekilde ayrılması gerektiğinde iyidir. Bir ilke işlevini kabul eden bir mekanizma işlevine sahip olmak güzel bir kalıptır. (D programlama dilinin std.algoritma modülüne bakarak öğrendim .) Politika ve mekanizma kodu arasındaki sınırdaki değişebilir durumu soyutlamak genellikle API'yi akıl yürütmeyi kolaylaştırır. Değişken durum her ikisinde de özel olarak kullanılırsa, bu bir uygulama detayıdır. İşlevsel programlamanın diğer gücü, açık nedenlerden dolayı eşzamanlılıktır.


Her bir programlama paradigmasını açıklayan ve bunları ne zaman / nasıl kullanacağınıza dair örnekler veren harika cevap için teşekkürler.
Kevin Peno

7

Kod asla "OOP'ye ihtiyaç duymaz". Farklı modlarda düşünebildikleri sürece, bu ya da bu problemin PARADIGM $ 'a "ihtiyaç duyduğunu" ya da en iyi şekilde bu şekilde çözüldüğünü düşünen programcılar.

Genellikle sadece bir paradigmayı bilen programcıların paradigmalarının en iyisi olduğunu düşünürler. Bir beden herkese uyar ve şu anda modaya uygunsa, hepimiz Procrustes'ın yatağında uyumalıyız.


5

Projenizi sadece OOP'ye ihtiyaç duyulduğunun açık bir göstergesi varsa OOP'ye dönüştürmelisiniz. Bunun olabileceği olası senaryolar (diğerleri arasında):

  • projeyi büyütmek
  • ekibe daha fazla geliştirici eklemek

ve bu senaryolarda bile projenizi OOP'ye dönüştürmek gerekli olmayabilir.


İyi bir nokta, ama bana projeyi ölçeklendirmenin veya prosedürel bir kod ise takıma daha fazla geliştirici eklemenin neden sorun olacağını söyleyebilir misiniz?
Sourav

Projenin ölçeklendirilmesi, uygulama modeline karmaşık ilişkisel yapıların eklenmesini içerebilir, bu durumda OOP'ye geçmek karlı olabilir. Uygulama yavaş yavaş ölçeklenirse ve uzun vadede OOP'ta daha kolay anlaşılır veya anlaşılırsa, kod OOP ise yeni geliştiriciler daha hızlı 'yakalayabilir'. OO olmayan bir kodun mirasını geride bırakmak, daha sonra proje büyüdüğünde bir sorun olabilir. 'şeylerin böyle oldukları için olduğu gibi olduğu' durumlarından bir daha
Timothy Groote

3
soruyu okuduğumda aklıma tam olarak bu geldi. 13 K kod satırı yazdığını söylüyor. Umarım sadece bir kez kullanarak boşa harcamazsınız. ve yeniden kullanılması gerekiyorsa, oop bir zorunluluk haline gelecekti. aksi halde yeni geliştiriciler için kabus olur
Chani

4

Her ikisi de iyi olabilir, ikisi de kötü olabilir. Ama birini diğerine benzeyecek şekilde uyarlamak asla iyi bir fikir değildir.


2

OO'nun neden icat edildiğini düşünüyorsanız, ihtiyacınız olmadığını görürsünüz OOP'ye , ancak bazen hayatınızı çok daha kolay hale getirir.

C kodlama günlerinde, çok büyük bir program oldukça dağınık hale gelebilir ve çalışmaya devam etmek zorlaşabilir. Böylece onu modüler parçalara ayırmanın yollarını keşfettiler. OOP bu yaklaşımı benimser ve daha modüler hale getirir ve program mantığının bu parçalarına veri koyar, böylece kodun geri kalanından daha da ayrılır.

Bu, daha büyük ve daha büyük programlar yazmanıza izin verir, bir görevin dev filini bunun yerine yüz fare boyutunda bir göreve değiştirdiğinizden emin olun. Ek olarak, bu 'farelerden' bazılarını alıp diğer programlarda tekrar kullanabilirsiniz!

Tabii ki, gerçek dünya tam olarak böyle değildir ve nesnenin yeniden kullanımı asla amaçlandığı gibi yakalanmamıştır, ancak bu işe yaramaz bir paradigma olduğu anlamına gelmez.

İşe yaramayan şey, her iki kodlama stiline aşırı bağımlılıktır. Bin minik, önemsiz sınıfla OO yapan herkes gerçekten doğru yapmıyor - kendileri (veya başka biri) için bir bakım kabusu yapıyorlar. Sadece 3 işlevi olan prosedürel bir uygulama yazan herkes de hayatı zorlaştırmaktadır. En iyi yol, makul miktarda tek başına kod ve yeniden kullanılma olasılığı daha yüksek olan veriler sağlayabilen orta zeminde, büyük ish nesneleri (bazen bir zamanlar gitmeye çalıştığımız bileşenler olarak adlandırılır) uygulamanızın geri kalanından ayrı olarak.

Bir dahaki sefere tavsiyem: her zamanki prosedür kodunuzu yazmayı deneyin, ancak ana veri yapınızdan tek bir nesne oluşturun. Bununla çalışmanın, verileri işlevden işleve iletmekten daha kolay olduğunu görün.


0

Kodum OOP [kapsülleme, kalıtım temelde ...] özelliğine ihtiyaç duymaz!

Bunu nasıl biliyorsun?

Bu projeyi sürdürmeniz mi gerekiyor? Planlanan yeni özellikler var mı? Sizinle birlikte gelişecek başka insanlar olacak mı? Kendinizi tekrarladınız mı? Kodu kavramak zor mu?

Cevap "evet" ise, belki bir OOP iskeleti kurmayı ve bu şekilde gitmeyi düşünmeye başlamalısınız.

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.