Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. What the elephant happened to OO design?

What the elephant happened to OO design?

Scheduled Pinned Locked Moved The Lounge
oopc++designhelpquestion
40 Posts 25 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Sander RosselS Sander Rossel

    charlieg wrote:

    control c / control v must be banned

    Couldn't agree more. I once worked with a guy who copy/pasted everything and had no idea what it actually was he did. He used someCollection.Where(x => x.MeetsCriteria()); every day for over a year. Then I noticed he used bool any = c.Where(...).Count() > 0; I told him to use someCollection.Any(...) instead because it's a lot cheaper and more readable. However, he did not understand the types of the input parameters to Any(Expression> predicate) or the even simpler Any(Func predicate). Spoiler: Where and Any have the exact same input parameter. He literally told me "I know I type 'Where' and then some letter, whatever that is, and then '=>' and then I can magically use properties on the objects of a collection. I didn't know it was the same for Any, I never knew the parameter type." :omg: :wtf: :~ X| Since then I've told that guy NEVER to copy/paste again, it's a right that needs to be deserved and he clearly didn't deserve it X| Of course he kept on copy/pasting because that was all he could... A useful code monkey, he had his place, but he needed a lot of guidance.

    Best, Sander Continuous Integration, Delivery, and Deployment arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly

    T Offline
    T Offline
    theokr
    wrote on last edited by
    #28

    You can't be serious? That's both hilarious and infuriating.

    Sander RosselS 1 Reply Last reply
    0
    • C charlieg

      I know the 4 pillars of OOD - but my love is for abstraction and encapsulation. Polymorphism is useful, but I've found it confuses many developers. Inheritance results in hemorrhoids and other digestive issues, so unless I have a very, very generic object, I tend to avoid it. That said, it baffles me to the point of wanting to cut myself why encapsulation is ignored. I'm living in a static global world where we hack away every day... I have a file that contains data. Why would you not write a class to handle it? Every damn tool we have is a C++ compiler. :doh: I'm thinking that to advance software development to the next level, control c / control v must be banned.

      Charlie Gilley <italic>Stuck in a dysfunctional matrix from which I must escape... "Where liberty dwells, there is my country." B. Franklin, 1783 “They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.” BF, 1759

      K Offline
      K Offline
      KBZX5000
      wrote on last edited by
      #29

      In my experience (~= 15 years of research about minimalistic design approaches) OOD is a flawed concept. In theory, there's nothing wrong with it and it should lead to a better than average design, consistently. In practice, abstraction is horrible, because people are really awful at defining, sharing and accepting the initial purpose of abstracted objects. In part, this is because making the abstraction is rewarding in and of itself, while accepting an existing one is horrendously tedious. The only form of OOD that seems to work consistently, is when you severely limit it to communication interfaces, DBO's and DTO's and drop polymorphism and inheritance all together. Anything else, and people will misinterpret the abstracts made and muck it up beyond comprehension. Also, reusability at object level is a maintenance nightmare. Reusability at API level is where it's at.

      1 Reply Last reply
      0
      • C charlieg

        I know the 4 pillars of OOD - but my love is for abstraction and encapsulation. Polymorphism is useful, but I've found it confuses many developers. Inheritance results in hemorrhoids and other digestive issues, so unless I have a very, very generic object, I tend to avoid it. That said, it baffles me to the point of wanting to cut myself why encapsulation is ignored. I'm living in a static global world where we hack away every day... I have a file that contains data. Why would you not write a class to handle it? Every damn tool we have is a C++ compiler. :doh: I'm thinking that to advance software development to the next level, control c / control v must be banned.

        Charlie Gilley <italic>Stuck in a dysfunctional matrix from which I must escape... "Where liberty dwells, there is my country." B. Franklin, 1783 “They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.” BF, 1759

        D Offline
        D Offline
        DerekT P
        wrote on last edited by
        #30

        charlieg wrote:

        control c / control v must be banned

        No problem with that. I use shift-delete / shift-insert. :-D

        E 1 Reply Last reply
        0
        • D DerekT P

          charlieg wrote:

          control c / control v must be banned

          No problem with that. I use shift-delete / shift-insert. :-D

          E Offline
          E Offline
          englebart
          wrote on last edited by
          #31

          I think you mean control+insert / shift+insert shift+delete is the same as control+X as further evidence about MS lack of originality per a previous post. Control + C, V, X were copied from Apple's Macintosh.

          D 1 Reply Last reply
          0
          • C charlieg

            I know the 4 pillars of OOD - but my love is for abstraction and encapsulation. Polymorphism is useful, but I've found it confuses many developers. Inheritance results in hemorrhoids and other digestive issues, so unless I have a very, very generic object, I tend to avoid it. That said, it baffles me to the point of wanting to cut myself why encapsulation is ignored. I'm living in a static global world where we hack away every day... I have a file that contains data. Why would you not write a class to handle it? Every damn tool we have is a C++ compiler. :doh: I'm thinking that to advance software development to the next level, control c / control v must be banned.

            Charlie Gilley <italic>Stuck in a dysfunctional matrix from which I must escape... "Where liberty dwells, there is my country." B. Franklin, 1783 “They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.” BF, 1759

            S Offline
            S Offline
            Steve Naidamast
            wrote on last edited by
            #32

            Everything I develop is centered around OOD/OOP as I use objects for the organizational constructs of my projects. However, with very rare exception I do not use inheritance due to the many problems that senior software engineering analysts have found with it over the years. This is not to say that inheritance is a bad concept but that it has to be used sparingly and carefully. Unfortunately, many developers rush into using it thinking that it is the real meaning of OOD. When I was learning OOD many years ago I actually studied the history of its invention in Sweden (Simula-67). My conclusion was that it was created so that developers could better organize their development endeavors, not for the primary constructs that people promote. In business applications, in general, there is little actual need for the use of inheritance and polymorphism, though there are applications that certainly could make good use of these attributes. However, here I am speaking generally. As OOD emerged in popularity within the development community a small book was produced by a computer scientist back in the 1980s. This book went through all of the types of applications that could truly benefit from the use of OOD. None of the applications related to business development as all were from the scientific and internals communities. In addition, the use of generic modules and the concepts of reuse were completely disproven many years ago simply from the statistical studies that were made against so many such projects. Generic modules are nearly impossible to create as regular implementations into most applications since such modules must be relatively static in nature (ie: date validation module). The rise of popularity of generically designed modules was a direct result of incompetent technical managers who tried to foresee every possibility for any module developed. The result was terrible frustrations on the part of developers and projects that did not succeed very well if at all. This was because, in reality, very few modules can be designed to be generic just like not every type of design can be shoe-horned into being an "Expert System" when that too was a craze in the late 1980s and early 1990s. Object re-use failed as a direct result of organizations not setting up working repositories for re-usable modules that were designed to be used in such a manner (ie: data access layer). The result here, and which was eventually written about in our technical journals was that development teams\developers si

            1 Reply Last reply
            0
            • E englebart

              I think you mean control+insert / shift+insert shift+delete is the same as control+X as further evidence about MS lack of originality per a previous post. Control + C, V, X were copied from Apple's Macintosh.

              D Offline
              D Offline
              DerekT P
              wrote on last edited by
              #33

              Actually no, I do mean shift-delete + shift-insert. (I find it easier to cut and immediately paste, then paste the copy). No need to move the right hand then. ) Also means that VS marks the "copied from" line as changed, which is a useful reminder when scrolling back to copy other code from the same area.

              E 1 Reply Last reply
              0
              • C charlieg

                I know the 4 pillars of OOD - but my love is for abstraction and encapsulation. Polymorphism is useful, but I've found it confuses many developers. Inheritance results in hemorrhoids and other digestive issues, so unless I have a very, very generic object, I tend to avoid it. That said, it baffles me to the point of wanting to cut myself why encapsulation is ignored. I'm living in a static global world where we hack away every day... I have a file that contains data. Why would you not write a class to handle it? Every damn tool we have is a C++ compiler. :doh: I'm thinking that to advance software development to the next level, control c / control v must be banned.

                Charlie Gilley <italic>Stuck in a dysfunctional matrix from which I must escape... "Where liberty dwells, there is my country." B. Franklin, 1783 “They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.” BF, 1759

                R Offline
                R Offline
                RandyBuchholz
                wrote on last edited by
                #34

                One of the things that happened was CRUD. When I learned OOAD back in the 80's, we designed our objects around what they did - methods first, attributes when necessary, and properties weren't just for exposing backing variables. "Data Objects" lived only in the back tiers. Things like MVC soon moved them to the clients. Then the Web, JavaScript, and CSS (where until recently everything was global and single threaded) returned us to procedural coding. Welcome back to the 70's. When all of your objects are just data objects and everything is global and procedural, what need is there for OO design? :mad: Then,(misinterpreting) Agile - hack in circles until it (sort of) works. On top of all of that, OO design is hard. Really hard to do well. Few initial design objects make it into the final code unscathed. Finally, design is documentation. We're Agile - "Working code over comprehensive documentation..." :sigh:

                1 Reply Last reply
                0
                • C charlieg

                  I know the 4 pillars of OOD - but my love is for abstraction and encapsulation. Polymorphism is useful, but I've found it confuses many developers. Inheritance results in hemorrhoids and other digestive issues, so unless I have a very, very generic object, I tend to avoid it. That said, it baffles me to the point of wanting to cut myself why encapsulation is ignored. I'm living in a static global world where we hack away every day... I have a file that contains data. Why would you not write a class to handle it? Every damn tool we have is a C++ compiler. :doh: I'm thinking that to advance software development to the next level, control c / control v must be banned.

                  Charlie Gilley <italic>Stuck in a dysfunctional matrix from which I must escape... "Where liberty dwells, there is my country." B. Franklin, 1783 “They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.” BF, 1759

                  J Offline
                  J Offline
                  Jim_Snyder
                  wrote on last edited by
                  #35

                  On my team of 4 programmers, I am the only one who even knows that the four pillars exist. Getting any of them to use a property is near impossible, but reflection is in almost every program. Mind you, there are utility classes for email, sFTP, etc, but the class that uses them is C code consisting of inline functions with everything forced through the same path. Special cases requires switches everywhere they differ from the rigid flow. (carp mode off). I have 5.5 years of OOP before this job and wish OOP was appreciated. The problem is that just like 'cheapest programmers', management is 'cheapest management' and no longer has the tech savvy to use the proper techniques. It is a self-feeding trend that I do not see changing. If a programmer can write code that stumps his coworkers, he gets a raise.

                  1 Reply Last reply
                  0
                  • C charlieg

                    I know the 4 pillars of OOD - but my love is for abstraction and encapsulation. Polymorphism is useful, but I've found it confuses many developers. Inheritance results in hemorrhoids and other digestive issues, so unless I have a very, very generic object, I tend to avoid it. That said, it baffles me to the point of wanting to cut myself why encapsulation is ignored. I'm living in a static global world where we hack away every day... I have a file that contains data. Why would you not write a class to handle it? Every damn tool we have is a C++ compiler. :doh: I'm thinking that to advance software development to the next level, control c / control v must be banned.

                    Charlie Gilley <italic>Stuck in a dysfunctional matrix from which I must escape... "Where liberty dwells, there is my country." B. Franklin, 1783 “They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.” BF, 1759

                    J Offline
                    J Offline
                    Jim_Snyder
                    wrote on last edited by
                    #36

                    I would argue that there are really five pillars of OOP and OOAD. Without loose-coupling, using the other four becomes spaghetti.

                    1 Reply Last reply
                    0
                    • C charlieg

                      I know the 4 pillars of OOD - but my love is for abstraction and encapsulation. Polymorphism is useful, but I've found it confuses many developers. Inheritance results in hemorrhoids and other digestive issues, so unless I have a very, very generic object, I tend to avoid it. That said, it baffles me to the point of wanting to cut myself why encapsulation is ignored. I'm living in a static global world where we hack away every day... I have a file that contains data. Why would you not write a class to handle it? Every damn tool we have is a C++ compiler. :doh: I'm thinking that to advance software development to the next level, control c / control v must be banned.

                      Charlie Gilley <italic>Stuck in a dysfunctional matrix from which I must escape... "Where liberty dwells, there is my country." B. Franklin, 1783 “They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.” BF, 1759

                      B Offline
                      B Offline
                      BillWoodruff
                      wrote on last edited by
                      #37

                      charlieg wrote:

                      it baffles me to the point of wanting to cut myself why encapsulation is ignored.

                      Depending on what you cut with, and where, and how, you cut, it may violate encapsulation.

                      «... thank the gods that they have made you superior to those events which they have not placed within your own control, rendered you accountable for that only which is within you own control For what, then, have they made you responsible? For that which is alone in your own power—a right use of things as they appear.» Discourses of Epictetus Book I:12

                      1 Reply Last reply
                      0
                      • T theokr

                        You can't be serious? That's both hilarious and infuriating.

                        Sander RosselS Offline
                        Sander RosselS Offline
                        Sander Rossel
                        wrote on last edited by
                        #38

                        Yeah really. The good thing about this guy was that he knew his shortcomings and acted accordingly (did not invent anything new and when he did he asked a second opinion). Then I've worked with people who were completely incompetent, but still thought they could tell shout me how to write my code X|

                        Best, Sander Continuous Integration, Delivery, and Deployment arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly

                        1 Reply Last reply
                        0
                        • Sander RosselS Sander Rossel

                          Not a recent book. There's Pro LINQ by Apress, but that's from 2010 already :wtf: However, you don't really need a book. If you're working with LINQ-to-Entities I'd use a profiler and check out every SQL query that gets send to the database (I think they're printed in the output window as well, but that's a bit of a search). For LINQ-to-Objects I wouldn't worry about performance too much, just make sure you keep the non-deferred LINQ operators for last :) Tools like Visual Studio and Resharper can also give you tips, like revert coll.Where(...).First(); to coll.First(...);

                          Best, Sander Continuous Integration, Delivery, and Deployment arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly

                          E Offline
                          E Offline
                          Eytukan
                          wrote on last edited by
                          #39

                          :thumbsup: oh wow LINQ is old. OR, there's so much already packed in, that people are still learning. hehe thanks!

                          Starting to think people post kid pics in their profiles because that was the last time they were cute - Jeremy Falcon.

                          1 Reply Last reply
                          0
                          • D DerekT P

                            Actually no, I do mean shift-delete + shift-insert. (I find it easier to cut and immediately paste, then paste the copy). No need to move the right hand then. ) Also means that VS marks the "copied from" line as changed, which is a useful reminder when scrolling back to copy other code from the same area.

                            E Offline
                            E Offline
                            englebart
                            wrote on last edited by
                            #40

                            gotcha. I have a coworker that uses that pattern. [shift+delete shift+insert] [navigate] [shift+insert] Since I am writing this response later, I am scratching my head and wondering how we started talking about copy+paste when the subject has "OO design" in it! lol [but I am not going to go back and figure it out].

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups