- •Мови програмування. Представлення даних.
- •1. Вступ. Про обчислювальну техніку.
- •2. Історія мов програмування.
- •3. Поняття про платформу .Net
- •4. Створення мови програмування с#.
- •5. Представлення даних. Необхідність типізації. Двійкова арифметика.
- •6. Основні поняття програмування.
- •Поняття про інтегроване середовище розробки VisualStudio (на прикладі Visual Studio 2005). Структура c#-програми.
- •1. Основні можливості інтегрованого середовища розробки VisualStudio .Net.
- •2. Структура програми мовою с#.
- •Int I; // Визначили цілу змінну
- •Основні елементи мови с#.
- •1. Основні вбудовані типи мови с#
- •2. Визначення та ініціалізація змінних, область їх видимості.
- •3. Приведення типів.
- •Інакше обидва операнди перетворюються до типу int;
- •4. Літерали (константи) мови с#.
- •5. Операції мови с#.
- •5.1. Арифметичні операції.
- •5.2. Операції інкременту та декременту.
- •5.3. Операції відношення (порівняння).
- •5.4. Логічні операції.
- •5.5. Порозрядні (бітові) операції.
- •5.6. Умовна (тернарна) операція.
- •5.7. Операції присвоєння.
- •5.8. Пріоритет операцій.
- •Основні інструкції керування мови с# – розгалуження та цикли.
- •1. Розгалуження у мові с#
- •2. Цикли у мові с#
- •2.1. Цикл for.
- •2.2. Цикл while.
- •2.3. Цикл do-while.
- •3. Керування виходом із циклів с#
- •Масиви в мові с#.
- •1. Визначення та ініціалізація масиву.
- •2. Цикл foreach
- •3. Багатовимірні масиви.
- •4. Використання деяких методів класу System.Array.
- •5. Масиви масивів. Непрямокутні масиви.
- •Структуровані типи даних (колекції) в мові c#
- •1. Основні структури даних та їх призначення
- •2. Використання списку ArrayList та узагальненого списку List
- •3. Використання асоційованого списку Hashtable та узагальненого словника Dictionary
- •Класи в мові с#.
- •1. Визначення класу.
- •2. Методи класу.
- •3. Методи з параметрами.
- •4. Конструктор класу.
- •Методи в мові с#.
- •1. Передача об’єктів методам.
- •2. Використання модифікаторів для параметрів методів.
- •3. Методи, що повертають об’єкти.
- •Перевантаження методів в мові с#.
- •1. Перевантаження методів.
- •2. Перевантаження конструкторів.
- •3. Використання ключового слова this.
- •4. Деструктор класу.
- •5. Метод Main ().
- •Статичні члени класу.
- •1. Статичні дані-члени класу.
- •2. Статичні методи-члени класу.
- •3. Статичний конструктор класу.
- •4. Статичні класи, локалізація та глобалізація
- •Властивості та індексатори.
- •1. Властивості.
- •2. Індексатори.
- •Спадкування в мові с#.
- •1. Поняття про спадкування та ієрархію класів.
- •2. Спадкування та правила доступу до членів класів.
- •3. Конструктори базового та похідних класів.
- •4. Посилання на екземпляри базового та похідних класів.
- •5. Поняття про поліморфізм.
- •6. Віртуальні функції – більш детальний погляд.
- •7. Абстрактні методи та класи.
- •Перевантаження операцій в мові с#.
- •1. Загальні відомості.
- •2. Перевантаження бінарних арифметичних операцій.
- •3. Перевантаження унарних операцій.
- •4. Перевантаження операцій відношення.
- •5. Перевантаження логічних операцій.
- •6. Підсумкові зауваження.
- •Структури та переліки в мові с#.
- •1. Структури.
- •2. Переліки.
- •Делегати, події та обробники подій
- •1. Делегати (delegate).
- •2. Події та їх обробники.
- •Атрибути та їх використання
- •Рекомендована література
7. Абстрактні методи та класи.
Можлива ситуація, коли у базовому класі неможливо реалізувати деякий метод. Проте зрозуміло, що подібний метод зі своєю особливою функціональністю буде присутній у похідних класах. В такому випадку є сенс визначити «порожній» віртуальний метод у базовому класі (свого роду «заглушку»), визначивши його інтерфейс, а у похідних класах слушним чином визначити коди відповідних методів, що його заміщають. Засіб, який примушує всі похідні класи обов’язково замістити такий «невизначений» метод, полягає у використанні модифікатору abstract:
abstract <тип_результату> <ідентифікатор_методу> (<параметри_методу>);
Такий метод автоматично є віртуальним і його не треба додатково помічати службовим словом virtual.
Абстрактний метод, таким чином, взагалі не має тіла. Абстрактними можуть бути не лише методи, але й властивості. Клас, який містить принаймні один абстрактний член класу, теж має бути визначений як abstract, адже від нього не можна утворювати екземпляри – такі класи використовуються лише для спадкування. Класичним прикладом демонстрації абстрактного класу є клас геометричних форм – не існує загальної формули для визначення площі абстрактної геометричної фігури. Проте всім відомо як визначити площі, наприклад, квадрата або прямокутника чи кола. Розглянемо приклад, у якому визначається абстрактний клас Shape, що містить закрите текстове поле shapeType – тип фігури, та відкриту властивість ShapeType, яка реалізує доступ до нього. Ця властивість використовується у конструкторі класу. Властивість Area базового класу визначається як абстрактна. Крім того, вказується, що властивості, які будуть заміщати її у похідних класах, будуть мати лише аксесор get – властивість дозволяє лише читання. Зверніть увагу, що у базовому класі заміщається також метод ToString(), успадкований від класу System.Object. Тепер він буде виводити на екран тип фігури та її площу.
using System;
namespace AbstractClass
{ // абстрактний клас - геометрична форма
abstract class Shape
{
private string shapeType;
public string ShapeType
{ get { return shapeType; }
set { shapeType = value; }
}
public Shape(string s) // конструктор
{ ShapeType = s; } // працює set-аксесор властивості
// Площа Area є властивістю read-only –
// буде потрібний лише get-аксесор
public abstract double Area // абстрактна властивість
{ get; }
// заміщаємо метод класу Object
public override string ToString()
{
return ShapeType + ": площа = " + String.Format("{0:F2}",
Area);}
}
class Square : Shape // похідний клас - квадрат
{
private double side;
// працює конструктор базового класу
public Square(double side_, string type) : base(type)
{ side = side_; }
// заміщаємо абстрактний метод
public override double Area
{ get // повертає площу квадрата із стороною side
{ return side * side;}
}
}
class Circle : Shape // похідний клас - коло
{
private double radius;
public Circle(double radius_, string type) // конструктор
: base(type) // працює конструктор базового класу
{ radius = radius_; }
// заміщаємо абстрактний метод
public override double Area
{
get // повертає площу кола радіуса radius
{ return radius * radius * Math.PI; }
}
}
class Rectangle : Shape // похідний клас - прямокутник
{
private double width;
private double height;
public Rectangle( // конструктор
double width_, double height_, string type)
: base(type) // працює конструктор базового класу
{ width = width_;
height = height_; }
// заміщаємо абстрактний метод
// повертає площу прямокутника ширини width і висоти height
public override double Area
{
get
{ return width * height;}
}
}
class Program
{
static void Main()
{ Shape[] shapes = { // масив геометричних форм
new Square(10, "Квадрат"),
new Circle(10, "Коло"),
new Rectangle( 10, 5, "Прямокутник")
};
Console.WriteLine("Масив геометричних фiгур");
foreach (Shape s in shapes)
// тут викликається заміщений метод ToString()
Console.WriteLine(s);
}
}
}
Результатом роботи цієї програми буде наступний вигляд екрану:
Масив геометричних фiгур
Квадрат: площа = 100
Коло: площа = 314,16
Прямокутник: площа = 50