Рубрика: ООП
ООП на простых примерах
Объектно-Ориентированное Программирование
представляет собой Объекты и Классы
ООП построено на трёх основных концепциях
- инкапсуляция
- наследование
- полиморфизм
Три принципа ООП
— инкапсуляция
не даём другим объектам изменять внутреннее состояние объекта
когда внутренне состояние объекта может изменяться только им самим
— состояние объекта — назначены определенные значения полям, свойствам.
— get и set необходимы для защиты на валидность данных (в функции всегда можно проверить тип)
— наследование
животными являются кошки, рыбы, змеи и они все дышат
— полиморфизм
животные по разному дышат и поэтому у животных Мы вызываем одинаковый метод но с разной реализацией (кошки дышат лёгкими, рыбы жабрами, змеи кожей).
public interface ITest
{
/// <summary>
/// проверка экземпляра типа Dictionary на заполенность
/// </summary>
public bool Пустой => System.Convert.ToInt32(this.GetType().GetProperty("Count").GetValue(this))== 0;
}
public class Test:Dictionary<uint,string> ITest{
}
ITest Ex= new Test();
Debug.log(Ex.Пустой);
using UnityEngine;
namespace test2208041738
{
public interface ITest
{
public byte Prop1
{
get;
set;
}
public string Prop2
{
get;
set;
}
public void Method_props_assign() => this.Method(2, "hello");
public (byte, string) Method(byte Prop1, string Prop2) => (this.Prop1 = Prop1, this.Prop2 = Prop2);
}
public class Test : ITest
{
private byte _prop1;
private string _prop2;
public byte Prop1
{
get => _prop1;
set => _prop1 = value;
}
public string Prop2
{
get => _prop2;
set => _prop2 = value;
}
static public void test()
{
ITest t = new Test();
t.Method_props_assign();
Debug.Log(t.Prop1 + "," + t.Prop2);
}
}
}
Ссылка
Абстрактный класс
это класс, у которого не реализован один или больше методов некоторые языки требуют такие методы помечать специальными ключевыми словами
Интерфейс
это абстрактный класс, у которого ни один метод не реализован, все они публичные и нет переменных класса.
Интерфейс нужен обычно когда описывается только интерфейс (тавтология). Например, один класс хочет дать другому возможность доступа к некоторым своим методам, но не хочет себя «раскрывать». Поэтому он просто реализует интерфейс.
Абстрактный класс нужен, когда нужно семейство классов, у которых есть много общего. Конечно, можно применить и интерфейс, но тогда нужно будет писать много идентичного кода в некоторых языках (С++) специального ключевого слова для обозначения интерфейсов нет.
Можно считать, что любой интерфейс — это уже абстрактный класс, но не наоборот.
Class
- не наследуемый класс с именем Class1 без объявленных полей
Class1:Class {
}
- не наследуемый класс с именем Class1 с объявленным полем внутри конструктора и обращением снаружи через get и set
Class1:Class {
get Field(){
return this.field;
}
set Field(val){
this.field=val;
}
constructor(atr){
this.field=atr;
}
}
- наследование
дочерний класс относительно другого класса
Animal:Class {
constructor(name){
this.name=name;
}
speak(){
console.log(`${this.name} издаёт звук.`);
}
}
Class Dog extends Animal {
constructor(name){
//вызывает конструктор super класса и передаёт параметр name
super(name);
}
speak() {
console.log(`${this.name} лает.`);
}
}
let d = new Dog ('Митци');
d.speak(); // Митци лает