Lately I’ve seen a lot of people struggling with this concept and being the very base of modern programming I think I should talk about it.
OOP, formally called Object Oriented Programming it’s a paradigm that helps the programmer to express himself in a more natural way with concepts he already knows from daily life. This also dramatically increases the level of understanding of the code written, maintainability and further code addition.
Basically you have classes with methods, properties and member variables to designate objects. This principle is called encapsulation. Methods are functions through which the user interacts with the object. Note the difference between properties and member variables. Though it’s language dependent, a property often designates a variable with GET and SET (mutator and accessor functions) and does not have memory allocated on its own however the associated filed does and a member variable or field designates a class variable. Look at the example below:
[gist id=8675207 file=OOP]
We also have at least two special functions(methods) in a class, those are the constructor and destructor, their role is to initialize the object(allocate memory in non managed languages – C++ and members initialization) and to destroy the object(free allocated memory in non managed languages, not really used in managed languages) respectively. The compiler provides an empty constructor and destructor by default, they don’t anything. Pay attention that a constructor has the same name as the class and it does not return anything. The destructor has a “~” in front and has the same name as the class. The destructor makes no sense in managed languages because the garbage collector is in charge of when an object is destroyed.
Another principle of OOP is security. Often we use access modifiers to accomplish this (private, protected, public and internal in C#).
- public – can be accessed by anyone in or outside the class.
- protected – can be accessed by anyone in the same class or in a class that inherits the containing class.
- private – can be accessed by anyone in the same class.
- internal (C# specific) – can be accessed only from the same assembly, but not other assemblies. Java has this by default in packaging.
As I already stated abstraction was the main reason of OOP, because a more natural, faster and easier way to code was needed. Programmers needed to avoid “spaghetti code” to make their programs easier to understand and easier to maintain. I will talk about inheritance a bit later as it is a vast subject and it’s language dependent(C++ allows native multiple inheritance while C# and Java require Interface to accomplish this).
Will talk about polymorphism, abstract classes, overloading and templates on a future article.
Finally some of the OOP languages out there are: C++ (C is not), PHP, Java, C#, Ruby, Python etc.
If you are anxious and want to learn faster you can find a good resource here
I’ve got some positive feedback on the article with C# so I decided to do a bit more digging into the subject.
So, you’re interested in coding in C# but you are not really sure what is best for you. Supposedly you are not interested in Console Applications and you want something with a nice interface you have to choices: Windows Forms and WPF. In the following lines I’ll speak about the two.
Windows Forms it’s definitely easy: easy to learn, easy to use and has huge documentation, support and APIs, being here for quite a while now. There are also a lot more devs on Windows Forms than on WPF. It’s easy to learn and use because of “Drag and Drop” feature by which you can build a functional application very fast. If you are in need of an app that does something and you are not really interested on how does it look you can go for Windows Forms.
Usually, you’re using Windows Forms to do something (internal) and you don’t have much time at disposal.
Windows Presentation Foundation(WPF) on the other hand is newer, fewer devs working with it and it’s a bit harder to learn to new comers. In WPF you have much more freedom of design and if you would wanted a professional app (i.e. for clients) you should go for WPF. The look and feel is just great, it looks modern and behave accordingly. In WPF you can add lots of animations, transitions, making it suitable for end-users UI. However there is a bit of a trouble to new comers, why is that exactly?
Well, because there is an XML (XAML) component which is in charge of design and not many people are used to it first hand, but once you get used it, it’s really great: it is more maintainable, cleaner and you can control your elements very precisely.
There is also the advantage of data binding, as WPF is great with it having behind it the MVVM pattern (Model – View View – Model) .
Also, if you’re learning WPF now it’s going to be much easier for you to design and code Windows 8 (8.1) Apps or Windows Phone apps as those apps have similar behavior.
EDIT: What I forgot to mention is that Windows Forms is portable to other platforms through the Mono Project but WPF is not.
[gist id=8639173 file=WindowsForms]
[gist id=8639173 file=WPF]
To summarize, you use Windows Forms when you want something fast and you don’t care that much about the interface and WPF when you want something more elaborate and UI is a decisive factor. Keep in mind that Windows Forms it’s easier to learn and use and WPF represents somehow the future.
Today I am going to talk you about C#, what’s nice about it, why one would learn it and why should you?
C# is one of the high level languages due to its high abstractization level. This means that each instruction is translated into much machine code but it offers to programmer the possibility to express complicated things with few code lines.
C# it’s also a pure OO (Objected Oriented) Language, except for the primitive types (int, double, string…) meaning that everything is an object (there are also wrapper classes for the primitive types: Double, String …)
It has a big advantage having the syntax similar to C or C++ if you’re familiar with OOP concepts. Being an evolved language it has a garbage collector meaning you don’t have to worry about memory management.
Despite many people are saying C# it’s not portable this is not actually true. Thanks to MonoDevelop, an open source IDE (I am also contributing to it – you can too!) you can now code in C# on Linux and you can code applications for Android up to .NET 4.5 and C# 4.0.
So why is it so great?
Well, because you can do complicated stuff very easy and straightforward and it’s easy to learn if you are already familiar with C/C++.
C# has been designed to be simple and it works great. It has a the best IDE namely Visual Studio 20xx(2013 is the last version, but 2008,2010,2012 versions also exist). Some of people would say this it’s very expensive(there is also an Express version which is FREE) but for students it’s free anyway(through Microsoft’s partnership with various universities).
There is also another advantage that C# has now. You can develop applications for Windows 8 and Windows Phone 8, two fast growing OS for PC and mobile respectively.
Through the .NET initiative you can design Windows Forms, WPF (Windows Presentation Foundation), WCF (Windows Communication Foundation) applications with C#.
So, if you want to get started programming some real world applications, C# can be an excellent choice, being a modern and ever developing language.
But as I always recommend when learning something new: Work on a fun project! Learning should be fun 🙂
Some code snippet:
using System; //System is a namespace
static void Main() //Entry Point in our program
Console.WriteLine("Hello world!"); //Note that Console it's a class and WriteLine it's a method(function)
If you have further questions do not hesitate to contact me.
Now I have 2 books to start with, both free. Personally I think the first it’s better. Enjoy!