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

Some notes about transportation problem

Hello guys. After work I remembered my studying at university. My first thoughts is about solving Monge–Kantorovich transportation problem using a modification of simplex method known as Method of Potentials. Transportation theory investigates methods for optimal allocation resources among consumers and transportation them with minimum cost. For example, suppose we have some factories which provide materials and shops which consume it. (To be continued)

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

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

Nginx rewrite rules for hosting angular(any) static app on subroute

Hi everyone, I decided to reorganise my personal blog and use it mostly as "Notes" Today, I want to host two websites served by golang application. The simplest solution is to create system service which points to go executable app on the particular port. In a nutshell, there are two separate services which use 9990 and 9991 ports. Next step I added this simple rule to the Nginx location /admin { rewrite /admin/(.*) /$1 break; proxy_pass http://localhost:9991; proxy_redirect off; proxy_set_header Host $host; } location / { proxy_pass http://localhost:9990; } So this simple configuration just rewrites URL properly to the admin service and I do not need to add extra `admin` route prefix. The latest step is set-up base href for the static `index.html` file. We can easily do it with build option `ng build --base-href /admin/` Thank everyone for reading.