Monday, March 29, 2010

Why I Don't Like The Private Access Specifier

I like the concept of encapsulation. Really. I do. Hiding implementation details behind an interface is top-notch design work. I'm all for it. As long as it's done with "protected" and not "private".

The problem that I have with the private access specifier is that it discourages or prevents entirely code reuse in certain situations. Let me explain: as is often the case, I find myself coding with certain libraries or frameworks. Just as often they do not do everything exactly how I would like. Perhaps they are missing a feature, or maybe they have a small bug somewhere. No problem! They are coded with OOP principles, so if I want to add a feature, I'll just subclass it and do what I need to do, right? Wrong!

All too often the particular hook that I need to add my feature is marked private. And since it's marked private, at the discretion of the original author, I can't do what I need to do. Let me lay this out: I have access to the original source code in one form or another, I understand what the original source code is doing, I've identified exactly what I need to change, and yet I'm stuck. What are my options?

One is to change the original source code. However, this is not always possible. Take the .NET Framework for example. The framework comes in a "compiled" form, yet the source code is readable thanks to tools like Reflector. Even if I can change the source code, I don't always want to. Perhaps I want to be able to distribute my application without packaging my custom build of the library. In the case of Javascript, perhaps the library is coming from a CDN like Yahoo provides for YUI.

Another option is to use what hooks I do have available. For instance, if protected MemberA calls private MemberB, and I need to change MemberB, I can override MemberA, copying most of the code, and have it call my custom MemberC instead of the original MemberB. Sometimes this requires changing code many levels deep, and the final product is a copy/pasted mess of the original.

It seems to me that a balance could be struck between the concepts of encapsulation and the flexibility of OOP inheritance and code-reuse. This balance, I think, is called "protected". If somebody has the time and dedication to read and understand the implementation details of a class, I do not think they should be barred from subclassing and having full access to that implementation. I do not believe that it should be up to the original authors to decide what should and should not be changed; they do not have enough foresight. It is impossible to imagine every single feature that could potentially be added and create an extension point for each. Using protected means that normal users of the code still have encapsulation, and those that want or need to go the extra step have the flexibility to do so.

I don't recall a time when I ever thought to myself: "I sure am glad that member is private. That really saved me a lot of hassle." I know of numerous times when I've thought the opposite. Very dark thoughts indeed.


  1. patriots jerseys,
    saints jerseys,
    karen millen uk,
    air jordan 11 free shipping,
    hollister canada,
    hollister uk,
    tods outlet,
    air jordan 4 free shipping,
    pandora jewelry,
    coach outlet online,
    tiffany and co,
    prada outlet,
    ravens jerseys,
    supra shoes,
    hogan,hogan outlet,scarpe hogan,hogan sito ufficiale,hogan interactive
    michael kors outlet,
    juicy couture tracksuit,
    chicago bulls,
    jets jersey,

  2. بادر بالتواصل مع شركة تنظيف خزانات بمكة المتخصصة التي تقدمها شركة العنود حتى تتمكن من الحصول على جميع خدمات تنظيف خزانات بمكة المتكاملة التي تحتاجها لخزانات منزلك بأقل الاسعار

  3. للحصول على خدمات شركة كشف تسربات المياه بالدمام المتخصصة في السعودية قم بالتواصل مع شركة ابراج دبي ذات الخبرة في الخدمات المنزلية المتنوعة

  4. By reading this article I get a lot of lessons and this is very useful . cara menggugurkan kandungan

  5. The article is very useful, thank you for sharing. Allow me to share articles about health here, God willing, useful. thank you :)

    Obat Herbal Luka Gangren
    Obat Usus Buntu Tanpa Operasi
    Obat Mata Kabur dan Berbayang
    Cara Mengobati Tremor secara Alami

  6. The article is very interesting. And I also want to share articles about health, I'm sure this will be useful. Read and share it. Thank you very much :)

    Khasiat dan manfaat QnC Jelly Gamat
    Obat Benjolan Di Ketiak
    Solusi Sehat Alami
    Jamu Tradisional Penyubur Kandungan/Herbal Khusus Wanita


  7. After reading and understanding this article. in my opinion this is very useful .

  8. When you’re contemplating a significant move to a place like Anchorage, you might mentally “try on” your new hometown, much like stepping into a dressing room and pulling on a new outfit.
    transportation service Exeter

  9. This comment has been removed by the author.

  10. toptan iç giyim tercih etmenizin sebebi kaliteyi ucuza satın alabilmektir. Ürünler yine orjinaldir ve size sorun yaşatmaz. Yine de bilinen tekstil markalarını tercih etmelisiniz.

    Digitürk başvuru güncel adresine hoşgeldiniz. Hemen başvuru yaparsanız anında kurulum yapmaktayız.

    tutku iç giyim Türkiye'nin önde gelen iç giyim markalarından birisi olmasının yanı sıra en çok satan markalardan birisidir. Ürünleri hem çok kalitelidir hem de pamuk kullanımı daha fazladır.

    nbb sütyen hem kaliteli hem de uygun fiyatlı sütyenler üretmektedir. Sütyene ek olarak sütyen takımı ve jartiyer gibi ürünleri de mevcuttur. Özellikle Avrupa ve Orta Doğu'da çokça tercih edilmektedir.

    yeni inci sütyen kaliteyi ucuz olarak sizlere ulaştırmaktadır. Çok çeşitli sütyen varyantları mevcuttur. iç giyime damga vuran markalardan biridir ve genellikle Avrupa'da ismi sıklıkla duyulur.

    iç giyim ürünlerine her zaman dikkat etmemiz gerekmektedir. Üretimde kullanılan malzemelerin kullanım oranları, kumaşın esnekliği, çekmezlik testi gibi birçok unsuru aynı anda değerlendirerek seçim yapmalıyız.

    iç giyim bayanların erkeklere göre daha dikkatli oldukları bir alandır. Erkeklere göre daha özenli ve daha seçici davranırlar. Biliyorlar ki iç giyimde kullandıkları şeyler kafalarındaki ve ruhlarındaki özellikleri dışa vururlar.

  11. What an interesting article! I'm glad i finally found what i was looking for. 토토

  12. I am overwhelmed by your post with such a nice topic. Usually I visit your site and get updated through the information you include but today’s blog would be the most appreciable. 경마사이트

  13. Hard to ignore such an amazing article like this. You really amazed me with your writing talent. Thank you for sharing again.


    Feel free to visit my blog :

  14. Nice to be visiting your blog again. it has been months for me. Well this article that i’ve been waited for so long. I need this article to complete my assignment in the college. and it has same topic with your article. Thanks. great share
    Feel free to visit my blog :일본야동

  15. Thanks For Sharing Such An Interesting Article, It Is Really Worthy To Read. I Have Subscribed To You And From Now On I'll Check Your Profile Daily For Interesting Stuffs.
    Feel free to visit my blog : 국산야동

  16. I subscribed to your Feed too.
    Feel free to visit my blog : 일본야동

  17. Hi there! This article could not be written much better!
    Feel free to visit my blog : 야설

  18. GREAT JOB! This blog presents a very valuable information. Keep up the good work! Visit our website too. Thanks!

  19. Took me time to read all the comments, but I really enjoyed the article. It proved to be Very helpful to me and I am sure to all the commenters here! It’s always nice when you can not only be informed, but also entertained!

  20. Thanks for sharing the informative post. If you are looking the Linksys extender setup guidelines . so, we have a best technical expert for handlings your quires. for more information gets touch with us.

  21. Nice post! This is a very nice blog that I will definitively come back to more times this year! Thanks for informative post 토토사이트

  22. What a post I've been looking for! I'm very happy to finally read this post. 안전놀이터 Thank you very much. Can I refer to your post on my website? Your post touched me a lot and helped me a lot. If you have any questions, please visit my site and read what kind of posts I am posting. I am sure it will be interesting.

  23. The Best Casino Apps of 2020 - DrmCMD
    Best casino 세종특별자치 출장마사지 apps: · 광양 출장마사지 1. 강릉 출장샵 Bovada · 2. Slots 부산광역 출장안마 Casino · 양주 출장샵 3. Vegas Slots Casino · 4. BetMGM · 5. The Atlantis · 6. Bovada.

  24. When did you start writing articles related to ? To write a post by reinterpreting the 메이저사이트추천 I used to know is amazing. I want to talk more closely about , can you give me a message?

  25. Yes i am completely concurred with this article and i simply need say this article is extremely decent and exceptionally useful article.I will make a point to be perusing your blog more. You made a decent point yet I can"t resist the urge to ponder, shouldn"t something be said about the other side? 먹튀검증업체 .

  26. I accidentally searched and visited your site. I still saw several posts during my visit, but the text was neat and readable. I will quote this post and post it on my blog. Would you like to visit my blog later? 메이저놀이터추천