Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting my head around object oriented programming

Tags:

c#

object

oop

I am entry level .Net developer and using it to develop web sites. I started with classic asp and last year jumped on the ship with a short C# book. As I developed I learned more and started to see that coming from classic asp I always used C# like scripting language. For example in my last project I needed to encode video on the webserver and wrote a code like

public class Encoder
{
    Public static bool Encode(string videopath) {

        ...snip...

        return true;
    }
}

While searching samples related to my project I’ve seen people doing this

public class Encoder
{
    Public static Encode(string videopath) {
        EncodedVideo encoded = new EncodedVideo();

        ...snip...

        encoded.EncodedVideoPath = outputFile;
        encoded.Success = true;

        ...snip...
    }
}

public class EncodedVideo
{
    public string EncodedVideoPath { get; set; }
    public bool Success { get; set; }
}

As I understand second example is more object oriented but I don’t see the point of using EncodedVideo object.

Am I doing something wrong? Does it really necessary to use this sort of code in a web app?

like image 798
nLL Avatar asked May 17 '10 20:05

nLL


People also ask

How do I get my head around programming?

Use Your Intuition This technique simply requires looking at the code and browsing until you figure it out. Don't jot down any notes. Just wrap your head around the issue. It is basically the “dig around and find out what's going on” approach.

Why is object-oriented programming so hard?

As a beginner, OOP is also more difficult to read for several non-code related reasons. First, it's near impossible to understand why a piece of code exists if you're unfamiliar with the domain being modeled with classes. Secondly, OOP is a craft and is inherently opinionated.

How do you think in object-oriented way?

The basic idea of OOP is quite simple: you write classes that represent objects in the problem domain. For example, if you're writing a program for car rental billing, you will create objects to represent cars, customer accounts, invoices, things like that.

Is object-oriented programming difficult to maintain?

When it comes to object-oriented design, programs are often significant. This makes it difficult to maintain a large codebase and make changes along the way. If the developer needs to understand every single function that's part of a large codebase, then it will take them weeks to finish reading it all.


2 Answers

someone once explained OO to me as a a soda can.

A Soda can is an object, an object has many properties. And many methods. For example..

SodaCan.Drink();

SodaCan.Crush();

SocaCan.PourSomeForMyHomies();

etc...

The purpose of OO Design is theoretically to write a line of code once, and have abstraction between objects.

This means that Coder.Consume(SodaCan.contents); is relative to your question.

An encoded video is not the same thing as an encoder. An encoder returns an encoded video. and encoded video may use an encoder but they are two seperate objects. because they are two different entities serving different functions, they simply work together.

Much like me consuming a soda can does not mean that I am a soda can.

like image 54
brian brinley Avatar answered Sep 18 '22 14:09

brian brinley


Neither example is really complete enough to evaluate. The second example seems to be more complex than the first, but without knowing how it will be used it's difficult to tell.

Object Oriented design is at it's best when it allows you to either:

1) Keep related information and/or functions together (instead of using parallel arrays or the like).

Or

2) Take advantage of inheritance and interface implementation.

Your second example MIGHT be keeping the data together better, if it returns the EncodedVideo object AND the success or failure of the method needs to be kept track of after the fact. In this case you would be replacing a combination of a boolean "success" variable and a path with a single object, clearly documenting the relation of the two pieces of data.

Another possibility not touched on by either example is using inheritance to better organize the encoding process. You could have a single base class that handles the "grunt work" of opening the file, copying the data, etc. and then inherit from that class for each different type of encoding you need to perform. In this case much of your code can be written directly against the base class, without needing to worry about what kind of encoding is actually being performed.

like image 25
AaronSieb Avatar answered Sep 22 '22 14:09

AaronSieb