Skip to main content

Основні принципи ООП.Інкапсуляція


Як відомо, Обєктно-орієнтоване програмування містить три основні принципи: інкапусляція, наслідування, поліморфізм. ООП появилося приблизно в 1960 роках, одна з перших мов ООП був Smalltalk .
В коледжі в нас був спецкурс "ООП". Але все, що я запамятав це списаний конспект на 60 аркушів i синтаксис конструкторів на Object Pascal(Delphi) i C++. Влітку на канікулах я читав підручник по Java. Саме тоді я зрозумів, що таке Обєкт і Клас. Зараз на 4 курсі я вивчаю C#. Тому весь представлений код буде написаний на цій мові.
Все що нас оточує як не парадоксально це обєкти: Телевізор, Магнітофон, Автомобіль, Клієнт(банку чи ще якоїсь установи).
Класс - це новий тип даних, який описує структуру обєкта і методи, які задають поведінку обєкта. Наприклад, автомобіль(який небудь) є екземпляром класу "Автомобілі". Тобто клас це тільки схема, опис обєкта. Отже, шо таке класс і обєкт розібралися.

Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
public enum Access { User, Administrator };
public class User
{

//Це поля класу User
//Вони приховані, тому тільки методи даного класу можуть з ними працювати
private string name;
private string lastname;
private int age;
private Access level;
private double ID;
private static int i = 0;

//А це методи з модифікатором public, тому вони будуть доступні користувачу
public void set_name(string name)
{
this.name = name;
}
public void set_lasname(string lastname)
{
this.lastname = lastname;
}
public void set_age(int age)
{
this.age = age;
}
public void set_level(Access level)
{
this.level = level;
}

public string get_name()
{
return this.name;
}
public string get_lastname()
{
return this.lastname;
}
public int get_age()
{
return this.age;
}
public Access get_level()
{
return this.level;
}

//private метод
private static double Generator()
{

return ++i;


}

//Цей метод дозволяє переглянути обєкт
public void GetInformation()
{

Console.WriteLine("ID:{0}\t Iнiцiали: {1}\t{2}\t Вiк:{3}\t Права:{4}", this.ID, this.name, this.lastname, this.age, this.level);

}

public User(string name, string lastname, int age, Access level) //конструктор
: this()//викликаємо конструктор який знаходится нижче
{
this.name = name;
this.lastname = lastname;
this.age = age;
this.level = level;

}
public User()//ще один конструктор
{

this.ID = Generator();//Ось цей метод прихований від "зовнішнього світу"

}
}
class Program
{
static void Main(string[] args)
{
User NewUser = new User("Вiтя", "Дзундза", 19, Access.Administrator);
User NextUser = new User();

NextUser.set_name("Iван");
NextUser.set_lasname("Ковалюк");
NextUser.set_age(34);
NextUser.set_level(Access.User);

NewUser.GetInformation();
NextUser.GetInformation();

Console.ReadLine();
}
}
}


Те через, що ми впливаємо на обєкт називається Інтерфейс обєкта, а внутрішня реалізація обєкта прихована. Ця методика приховування внутрішньої реалізації і надання інтерфейсу (обєкта) для доступу до полів цього обєкта і зміни його поведінки називається Інкапсуляція. :)

Comments

Popular posts from this blog

New Personal Website

Hello World, hello my blog again. I have good news, finally, I created my website , I do not know exactly what is the main goal for that and how it will be updated. Now I want to sync my current posts from the blogger platform and personal website, it can be easily done by using the `Blogger API` with some extra requirements which I want to have.   Especially,   - able to show/hide the post separately from blogger (1)   - use custom posts order (2)   - add some extra information besides tags (3)    For instance, technology stack, team size, etc. - add a possibility to use any 3rd party code highlighter instead of post-computed HTML from blogger (4) I think that the 4 the most required and nice feature - able to sync manually, or use cron for syncing with blogger (5)   There is some initial schema of my application   This is a pretty simple solution: two go services, one for fetching data, checking referential integr...

Університет нафти і газу

Всім привіт. Я поступив в національний технічний університет Нафти і Газу. Поступив на 2 курс, хоча мав б бути на третьому. Я дякую, за те, що поступив на другий курс на держ. форму. Але не все так просто. Потрібно перезаразувати години предметів, які вчили в універі на 1 і частково на 2 курсі, для того щоб без проблем перейти на 3 курс. На рахунок програмування, майже нічого нового немає. Хіба що будем вчити Java на на предметі "технологія розробки ПЗ". Ось і все, що я хотів написати. Всім удачі!