This document provides an overview of object-oriented programming concepts in C#, including defining classes, constructors, fields, properties, static members, structures, delegates, events, and inheritance. It defines classes to represent dogs and cats as examples and demonstrates how to create class instances, set properties, and call methods. Constructors are described as special methods used to initialize objects, and different types of class members like fields, properties, and static members are explained.
What Are Access Modifiers ?
Access modifiers are keywords used to specify the declared accessibility of a member or a type.
Access modifiers support the concept of encapsulation, which promotes the idea of hiding functionality.
Access modifiers allow you to define who does or doesn't have access to certain features.
Types Of Access Modifiers:
public
protected
internal
private
Python Class | Python Programming | Python Tutorial | EdurekaEdureka!
( Python Training : https://www.edureka.co/python )
This Edureka Python Class tutorial (Python Tutorial Blog: https://goo.gl/wd28Zr) will help you understand Python Classes and Objects with examples. It will also explain the concept of Abstract Classes and Inheritance in python.
Check out our Python Training Playlist: https://goo.gl/Na1p9G
This Python Programming tutorial video helps you to learn following topics:
1. Python Classes and Objects
2. Inheritance
3. Abstract Classes
Abstract classes are classes that contain one or more abstract methods. An abstract method is a method that is declared, but contains no implementation. Abstract classes may not be instantiated, and require subclasses to provide implementations for the abstract methods. Subclasses of an abstract class in Python are not required to implement abstract methods of the parent class.
What Are Access Modifiers ?
Access modifiers are keywords used to specify the declared accessibility of a member or a type.
Access modifiers support the concept of encapsulation, which promotes the idea of hiding functionality.
Access modifiers allow you to define who does or doesn't have access to certain features.
Types Of Access Modifiers:
public
protected
internal
private
Python Class | Python Programming | Python Tutorial | EdurekaEdureka!
( Python Training : https://www.edureka.co/python )
This Edureka Python Class tutorial (Python Tutorial Blog: https://goo.gl/wd28Zr) will help you understand Python Classes and Objects with examples. It will also explain the concept of Abstract Classes and Inheritance in python.
Check out our Python Training Playlist: https://goo.gl/Na1p9G
This Python Programming tutorial video helps you to learn following topics:
1. Python Classes and Objects
2. Inheritance
3. Abstract Classes
Abstract classes are classes that contain one or more abstract methods. An abstract method is a method that is declared, but contains no implementation. Abstract classes may not be instantiated, and require subclasses to provide implementations for the abstract methods. Subclasses of an abstract class in Python are not required to implement abstract methods of the parent class.
An abstract class is a class that is declared abstract —it may or may not include abstract methods. Abstract classes cannot be instantiated, but they can be subclassed. When an abstract class is subclassed, the subclass usually provides implementations for all of the abstract methods in its parent class.
In this core java training session, you will learn Collections – Lists, Sets. Topics covered in this session are:
• List – ArrayList, LinkedList
• Set – HashSet, LinkedHashSet, TreeSet
For more information about this course visit on this link: https://www.mindsmapped.com/courses/software-development/learn-java-fundamentals-hands-on-training-on-core-java-concepts/
In this core java training session, you will learn Collections - Maps. Topics covered in this session are:
• Collections – Maps
• Map Interface
• Map methods
• Mapuse
• Hashmap
• Treemap
• Utilities
For more information about this course visit on this link: https://www.mindsmapped.com/courses/software-development/learn-java-fundamentals-hands-on-training-on-core-java-concepts/
Defining Simple Classes
Using Own Classes and Objects
Access Modifiers
Constructors and Initializers
Defining Fields
Defining Properties, Getters and Setters
Defining Methods
Exercises: Defining and Using Own Classes
An abstract class is a class that is declared abstract —it may or may not include abstract methods. Abstract classes cannot be instantiated, but they can be subclassed. When an abstract class is subclassed, the subclass usually provides implementations for all of the abstract methods in its parent class.
In this core java training session, you will learn Collections – Lists, Sets. Topics covered in this session are:
• List – ArrayList, LinkedList
• Set – HashSet, LinkedHashSet, TreeSet
For more information about this course visit on this link: https://www.mindsmapped.com/courses/software-development/learn-java-fundamentals-hands-on-training-on-core-java-concepts/
In this core java training session, you will learn Collections - Maps. Topics covered in this session are:
• Collections – Maps
• Map Interface
• Map methods
• Mapuse
• Hashmap
• Treemap
• Utilities
For more information about this course visit on this link: https://www.mindsmapped.com/courses/software-development/learn-java-fundamentals-hands-on-training-on-core-java-concepts/
Defining Simple Classes
Using Own Classes and Objects
Access Modifiers
Constructors and Initializers
Defining Fields
Defining Properties, Getters and Setters
Defining Methods
Exercises: Defining and Using Own Classes
Най-търсените направления в ИТ сферата за 2024Svetlin Nakov
Най-търсените направления в ИТ сферата?
д-р Светлин Наков, съосновател на СофтУни
София, май 2024 г.
Какво се случва на пазара на труда в ИТ сектора?
Какви са прогнозите за ИТ сектора за напред?
Защо има смисъл да учиш програмиране и ИТ през 2024?
Каква е ролята на AI в ИТ професиите?
Как да започна работа като junior?
Upskill програмите на СофтУни
BG-IT-Edu: отворено учебно съдържание за ИТ учителиSvetlin Nakov
Отворено учебно съдържание по програмиране и ИТ за учители
Безплатни учебни курсове и ресурси за ИТ учители
Разработени курсове към 03/2024 г. в BG-IT-Edu
https://github.com/BG-IT-Edu
Качествени учебни курсове (учебно съдържание) за ИТ учители: презентации + примери + упражнения + проекти + задачи за изпитване + judge система + насоки за учителите
Достъпни безплатно, под отворен лиценз CC-BY-NC-SA
Разработени от СофтУни Фондацията, по инициатива и под надзора на д-р Светлин Наков
Научете повече тук: https://nakov.com/blog/2024/03/27/bg-it-edu-open-education-content-for-it-teachers/
Светът на програмирането през 2024 г.
Продължава ли бумът на технологичните професии? Кои професии ще се търсят? Как да започна?
Прогнозата на д-р Светлин Наков за бъдещето на софтуерните професии в България
Има ли смисъл да учиш програмиране през 2024?
Какво се търси на пазара на труда?
Ще продължи ли търсенето на програмисти и през 2024?
Все още ли е най-търсената професия в технологиите?
Ролята на AI в сферата на софтуерните разработчици
Какво се случва на пазара на труда?
Има ли спад в търсенето на програмисти?
Как да започна с програмирането?
Видео от събитието сме качили във FB: https://fb.com/events/346653434644683
AI Tools for Business and Startups
Svetlin Nakov @ Innowave Summit 2023
Artificial Intelligence is already here!
AI Tools for Business: Where is AI Used?
ChatGPT and Bard in Daily Tasks
ChatGPT and Bard for Creativity
ChatGPT and Bard for Marketing
ChatGPT for Data Analysis
DALL-E for Image Generation
Learn more at: https://nakov.com/blog/2023/11/25/ai-for-business-and-startups-my-talk-at-innowave-summit-2023/
AI Tools for Scientists - Nakov (Oct 2023)Svetlin Nakov
Инструменти с изкуствен интелект в помощ на изследователите
Д-р Светлин Наков @ Anniversary Scientific Session dedicated to the 120th anniversary of the birth of John Atanasoff
Изкуствен интелект при стартиране и управление на бизнес
Семинар във FinanceAcademy.bg
Д-р Светлин Наков
Изкуственият интелект (ИИ) е вече тук!
Къде се ползва ИИ?
ChatGPT – демо
Bard – демо
Claude – демо
Bing Chat – демо
Perplexity – демо
Bing Image Create – демо
Bulgarian Tech Industry - Nakov at Dev.BG All in One Conference 2023Svetlin Nakov
IT industry in Bulgaria: key factors for success and the future. Deep tech, science, innovation, and education and how we can achieve more as an industry?
Dr. Svetlin Nakov
Innovation and Inspiration Manager @ SoftUni
Contents:
How big is the IT industry in Bulgaria?
Number of software professionals in Bulgaria: according to historical data from BASSCOM
Share of the software industry in GDP
Why does Bulgaria have such a successful IT industry?
Education for the tech industry: school education in software professions and profiles (2022/2023)
Education for the tech industry: Students in university in IT specialties (2022/2023)
Education for the IT industry: Learners at SoftUni (2022/2023)
Evolution of the Bulgarian software industry
How much can the industry grow?
Trends in the IT industry: AI progress, the IT market in Bulgaria, deep tech, science, and innovation
AI in the software industry
How to achieve more as an industry? education, deep tech, science, and innovation, entrepreneurship
Introduction
The IT industry in Bulgaria is one of the most successful in the country. It has grown rapidly in recent years and is now a major contributor to the economy. In this talk, Dr. Nakov explores the key factors behind the success of the Bulgarian IT industry, as well as its future prospects.
AI Tools for Business and Personal LifeSvetlin Nakov
A talk at LeaderClass.BG, Sofia, August 2023
by Svetlin Nakov, PhD
The artificial intelligence (AI) is here!
Where is AI used?
ChatGPT - demo
Bing Chat - demo
Bard - demo
Claude - demo
Bing Image Create - demo
Playground AI - demo
In this talk the speaker explains and demonstrates some AI tools for the business and personal life:
ChatGPT: a large language model that can generate text, translate languages, write different kinds of creative content, and answer your questions in an informative way.
Bing Chat: an Internet-connected AI chatbot that can search Internet and answer questions.
Bard: a large language model from Google AI, trained on a massive dataset of text and code, similar to ChatGPT.
Claude: A large AI chatbot, similar to ChatGPT, powerful in document analysis.
Bing Image Create: a tool that can generate images based on text descriptions.
Playground AI: image generator and image editor, based on generative AI.
Дипломна работа: учебно съдържание по ООП - Светлин НаковSvetlin Nakov
Дипломна работа на тема
"Учебно съдържание по обектно-ориентирано програмиране в профилираната подготовка по информатика"
Дипломант: д-р Светлин Наков
Специалност: Педагогика на обучението по информатика и информационни технологии в училище (ПОИИТУ)
Степен: магистър
Пловдивски университет "Паисий Хилендарски"
Факултет по математика и информатика (ФМИ)
Катедра “Компютърни технологии”
Настоящата дипломна работа има за цел да подпомогне българските ИТ учители от системата на средното образование в профилираните гимназии и паралелки, като им предостави безплатно добре разработени учебни програми и качествено учебно съдържание за преподаване в първия и най-важен модул от профил “Софтуерни и хардуерни науки”, а именно “Модул 1. Обектно-ориентирано проектиране и програмиране”.
Чрез изграждането на качествени учебни програми и ресурси за преподаване и пренасяне на добре изпитани образователни практики от автора на настоящата дипломна работа (д-р Светлин Наков) към българските ИТ учители целим значително да подпомогнем учителите в тяхната образователна кауза и да повишим качеството на обучението по програмиране в профилираните гимназии с профил “Софтуерни и хардуерни науки”.
Резултатите от настоящата дипломна работа са вече внедрени в практиката и разработените учебни ресурси се използват реално от стотици ИТ учители в България в ежедневната им работа. Това е една от основните цели и тя вече е изпълнена, още преди защитата на настоящата дипломна работа.
Прочетете повече в блога на д-р Наков: https://nakov.com/blog/2023/07/08/free-learning-content-oop-nakov/
Дипломна работа: учебно съдържание по ООПSvetlin Nakov
Презентация за защита на
Дипломна работа на тема
"Учебно съдържание по обектно-ориентирано програмиране в профилираната подготовка по информатика"
Дипломант: д-р Светлин Наков
Пловдивски университет "Паисий Хилендарски"
Факултет по математика и информатика (ФМИ)
Катедра “Компютърни технологии”
Защитена на: 8 юли 2023 г.
Научете повече в блога на д-р Наков: https://nakov.com/blog/2023/07/08/free-learning-content-oop-nakov
Свободно ИТ учебно съдържание за учители по програмиране и ИТSvetlin Nakov
В тази сесия разказвам за училищното образование по програмиране и ИТ, за професионалните и профилираните гимназии, свързани с програмиране и ИТ, за STEM кабинетите, за българските ИТ учители и тяхната подготовка, за проблемите, с които те се сблъскват, и как можем да им помогнем чрез проекта „Свободно учебно съдържание по програмиране и ИТ“: https://github.com/BG-IT-Edu.
Open Fest 2021, 14 август, София
В света се засилва тенденцията за установяване на STEAM образованието като двигател на научно-техническия прогрес чрез развитие на интердисциплинарни умения в сферата на природните науки, математиката, информационните технологии, инженерните науки и изкуствата в училищна възраст. С масовото изграждане на STEAM лаборатории в българските училища се изостря недостига на добре подготвени STEAM и ИТ учители.
Вярвайки в идеята, че българската ИТ общност може да помогне за решаването на проблема, през 2020 г. по инициатива на СофтУни Фондацията стартира проект за създаване на безплатно учебно съдържание по програмиране и ИТ за учители в подкрепа на училищното технологично образование. Проектът е със свободен лиценз в GitHub: https://github.com/BG-IT-Edu. Учителите получават безплатно богат комплект от съвременни учебни материали с високо качество: презентации, постъпкови ръководства, задачи за упражнения и практически проекти, окомплектовани с насоки, подсказки и решения, безплатна система за автоматизирано тестване на решенията и други учебни ресурси, на български и английски език.
Създадени са голяма част от учебните курсове за професиите "Приложен програмист", "Системен програмист" и "Програмист" в професионалните гимназии. Амбицията на проекта е да се създадат свободни учебни материали и за обученията в профил "Софтуерни и хардуерни науки" в профилираните гимназии.
Целта на проекта “Свободно ИТ учебно съдържание за учители” е да подпомогне българския ИТ учител с качествени учебни материали, така че да преподава на добро ниво и със съвременни технологии и инструменти, за да положи основите на подготовката на бъдещите ИТ специалисти и дигитални лидери на България.
В лекцията разказвам за училищното образование по програмиране и ИТ, за професионалните и профилираните гимназии, свързани с програмиране и ИТ, за STEM кабинетите, за българските ИТ учители и тяхната подготовка, за проблемите с които те се срещат, за липсата на учебници и учебни материали по програмиране, ИТ и по техническите дисциплини и как можем да помогнем на ИТ учителите.
A public talk "AI and the Professions of the Future", held on 29 April 2023 in Veliko Tarnovo by Svetlin Nakov. Main topics:
AI is here today --> take attention to it!
- ChatGPT: revolution in language AI
- Playground AI – AI for image generation
AI and the future professions
- AI-replaceable professions
- AI-resistant professions
AI in Education
Ethics in AI
In this seminar Dr. Svetlin Nakov talks about the programming languages, their popularity, available jobs and trends for 2022-2023.
Modern software development uses dozens of programming languages, along with hundreds of technology frameworks, libraries, and software tools.
This talk will review the most popular programming languages on the labor market: JavaScript, Java, C#, Python, PHP, C++, Go, Swift. It will be briefly stated what each of them is, what it is used for and what is its demand in the IT industry.
Agenda:
The Most Used Programming Languages in 2022:
- Python, Java, JavaScript, C#, C++, PHP
Jobs by Programming Languages in 2022:
- Jobs Worldwide by Programming Language
- Jobs in Bulgaria by Programming Language
Programming Languages Trends for 2023
- Language Popularity Rankings from Stack Overflow, GitHub, PYPL, IEEE, TIOBE, Etc.
Become a Software Developer: How To Start?
IT Professions and How to Become a DeveloperSvetlin Nakov
IT Professions and Their Future
The landscape of IT professions in the tech industry: software developer, front-end, back-end, AI, cloud, DevOps, QA, Java, JavaScript, Python, C#, C++, digital marketing, SEO, SEM, SMM, project manager, business analyst, CRM / ERP consultant, design / UI / UX expert, Web designer, motion designer, etc.
Industry 4.0 and the future of manufacturing, smart cities and digitalization of everything.
What are the most in-demand professions on LinkedIn? Why the best jobs in the world are related to software development and IT?
How to learn coding and start a tech job?
Why anyone can be a software developer?
Dr. Svetlin Nakov
December 2022
GitHub Actions (Nakov at RuseConf, Sept 2022)Svetlin Nakov
Building a CI/CD System with GitHub Actions
Dr. Svetlin Nakov
September 2022
Intro to Continuous Integration (CI), Continuous Delivery (CD), Continuous Deployment (CD), and CI/CD Pipelines
Intro to GitHub Actions
Building CI workflow
Building CD workflow
Live Demo: Build CI System for JS and .NET Apps
How to Become a QA Engineer and Start a JobSvetlin Nakov
How to Become a QA Engineer and Start a Job
Svetlin Nakov, PhD
Sofia, Nov, 2022
1) Why Become а QA Engineer?
2) How to Become a Software Quality Assurance Engineer (QA)?
Learn the Fundamental QA Skills:
Manual QA skills – 30%
Software engineering skills – 20%
QA automation skills – 50%
3) Anyone Can Be a QA Engineer!
4) The QA Program @ SoftUni
https://softuni.bg/qa
Призвание и цели: моята рецепта
д-р Светлин Наков
Как да открия своето призвание в живота и да го направя своя професия?
Съдържание:
1) Светлин Наков - моята история
2) Дигиталните професии
3) Как да намеря своята професия?
Поход на вдъхновителите | Аз мога тук и сега @ Петрич (19 ноември 2022 г.)
What Mongolian IT Industry Can Learn from Bulgaria?Svetlin Nakov
In this talk the speaker Dr. Svetlin Nakov explains the growth of the Bulgarian software industry for the latest 25 years and the key events in its growth.
He gives rich statistical data about Bulgaria, its GDP, and its software industry, which generates nearly 5% of the GDP (in 2022), about the open developer positions (5K in Oct 2022) and the number of software developers in Bulgaria (54K in Oct 2022).
The growth of the number of software developers in Bulgaria, software industry's revenues and their share in the national GDP are traced back from 2022 to 2005.
Similar research about the Mongolian software industry is conducted and available data is compared to Bulgaria and USA.
An interesting parallel is given between Bulgaria and Mongolia in terms of their software engineering talent and industry growth potential.
Finally, Dr. Nakov gives his recommendations about how local Mongolian software companies can reach the global tech market and suggests to use the "outstaffing" business model, targeting the European tech industry and the Asian region.
The talk is given at the "The Future of IT" forum in Ulaanbaatar, Mongolia (October 2022).
How to Become a Software Developer - Nakov in Mongolia (Oct 2022)Svetlin Nakov
In this talk the speaker Svetlin Nakov explains the IT professions and their extremely high demand in the latest years, and gives a recipe how to become a software engineer.
He recommends to spend 1-2 years in studying and practicing software engineering, following a learning curriculum like this:
Basic Coding Course – calculations, data, conditions, loops, IDE
Fundamentals of Programming – arrays, lists, maps, nested structures, text processing, error handling, basic language APIs, problem solving
Object-Oriented Programming – classes, objects, inheritance, …
Databases and ORM – relational DB, SQL, ORM frameworks, XML, JSON
Back-End Development – HTTP, MVC, Web apps, REST
Front-End Development – HTML, CSS, JS, DOM, AJAX, JS Frameworks
Projects – Git, software engineering, teamwork
Example: https://softuni.org/learn
The talk is from the "The Future of IT" forum in Ulaanbaatar, Mongolia (October 2022).
2. Table of Contents
1. Defining Classes
2. Access Modifiers
3. Constructors
4. Fields, Constants and Properties
5. Static Members
6. Structures
7. Delegates and Events
8. Interfaces
9. Inheritance
10. Polymorphism
2
3. OOP and .NET
In .NET Framework the object-oriented approach
has roots at the deepest architectural level
All .NET applications are object-oriented
All .NET languages are object-oriented
The class concept from OOP has two realizations:
Classes and structures
There is no multiple inheritance in .NET
Still classes can implement several interfaces at the
same time
3
5. Classes in OOP
Classes model real-world objects and define
Attributes (state, properties, fields)
Behavior (methods, operations)
Classes describe structure of objects
Objects describe particular instance of a class
Properties hold information about the
modeled object relevant to the problem
Operations implement object behavior
5
6. Classes in C#
Classes in C# could have following members:
Fields, constants, methods, properties,
indexers, events, operators, constructors,
destructors
Inner types (inner classes, structures,
interfaces, delegates, ...)
Members can have access modifiers (scope)
public, private, protected, internal
Members can be
static (common) or specific for a given object
6
7. Simple Class Definition
public class Cat : Animal
{
private string name;
private string owner;
public Cat(string name, string owner)
{
this.name = name;
this.owner = owner;
}
public string Name
{
get { return name; }
set { name = value; }
}
Fields
Constructor
Property
Begin of class definition
Inherited (base) class
7
8. Simple Class Definition (2)
public string Owner
{
get { return owner;}
set { owner = value; }
}
public void SayMiau()
{
Console.WriteLine("Miauuuuuuu!");
}
}
Method
End of class
definition
8
9. Classes andTheir Members
Classes have members
Fields, constants, methods, properties,
indexers, events, operators, constructors,
destructors
Inner types (inner classes, structures,
interfaces, delegates, ...)
Members have modifiers (scope)
public, private, protected, internal
Members can be
static (common) or for a given type
9
10. Class Definition and Members
Class definition consists of:
Class declaration
Inherited class or implemented interfaces
Fields (static or not)
Constructors (static or not)
Properties (static or not)
Methods (static or not)
Events, inner types, etc.
10
12. Access Modifiers
Class members can have access modifiers
Used to restrict the classes able to access them
Supports the OOP principle "encapsulation"
Class members can be:
public – accessible from any class
protected – accessible from the class itself and
all its descendent classes
private – accessible from the class itself only
internal – accessible from the current
assembly (used by default)
12
14. Task: Define Class Dog
Our task is to define a simple class that
represents information about a dog
The dog should have name and breed
If there is no name or breed assigned
to the dog, it should be named "Balkan"
and its breed should be "Street excellent"
It should be able to view and change the name
and the breed of the dog
The dog should be able to bark
14
15. Defining Class Dog – Example
public class Dog
{
private string name;
private string breed;
public Dog()
{
this.name = "Balkan";
this.breed = "Street excellent";
}
public Dog(string name, string breed)
{
this.name = name;
this.breed = breed;
}
// (example continues)
15
16. Defining Class Dog – Example (2)
public string Name
{
get { return name; }
set { name = value; }
}
public string Breed
{
get { return breed; }
set { breed = value; }
}
public void SayBau()
{
Console.WriteLine("{0} said: Bauuuuuu!", name);
}
}
16
18. Using Classes
How to use classes?
Create a new instance
Access the properties of the class
Invoke methods
Handle events
How to define classes?
Create new class and define its members
Create new class using some other as base class
18
19. How to Use Classes (Non-Static)?
1. Create an instance
Initialize fields
2. Manipulate instance
Read / change properties
Invoke methods
Handle events
3. Release occupied resources
Done automatically in most cases
19
20. Task: Dog Meeting
Our task is as follows:
Create 3 dogs
First should be named “Sharo”, second – “Rex”
and the last – left without name
Add all dogs in an array
Iterate through the array elements and ask
each dog to bark
Note:
Use the Dog class from the previous example!
20
21. Dog Meeting – Example
static void Main()
{
Console.WriteLine("Enter first dog's name: ");
dogName = Console.ReadLine();
Console.WriteLine("Enter first dog's breed: ");
dogBreed = Console.ReadLine();
// Using the Dog constructor to set name and breed
Dog firstDog = new Dog(dogName, dogBreed);
Dog secondDog = new Dog();
Console.WriteLine("Enter second dog's name: ");
dogName = Console.ReadLine();
Console.WriteLine("Enter second dog's breed: ");
dogBreed = Console.ReadLine();
// Using properties to set name and breed
secondDog.Name = dogName;
secondDog.Breed = dogBreed;
}
21
23. What is Constructor?
Constructors are special methods
Invoked when creating a new instance of an
object
Used to initialize the fields of the instance
Constructors has the same name as the class
Have no return type
Can have parameters
Can be private, protected, internal,
public
23
24. Defining Constructors
public class Point
{
private int xCoord;
private int yCoord;
// Simple default constructor
public Point()
{
xCoord = 0;
yCoord = 0;
}
// More code ...
}
Class Point with parameterless constructor:
24
25. Defining Constructors (2)
public class Person
{
private string name;
private int age;
// Default constructor
public Person()
{
name = null;
age = 0;
}
// Constructor with parameters
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
// More code comes here …
}
As rule constructors
should initialize all
own class fields.
25
26. Constructors and Initialization
Pay attention when using inline initialization!
public class ClockAlarm
{
private int hours = 9; // Inline initialization
private int minutes = 0; // Inline initialization
// Default constructor
public ClockAlarm()
{ }
// Constructor with parameters
public ClockAlarm(int hours, int minutes)
{
this.hours = hours; // Invoked after the inline
this.minutes = minutes; // initialization!
}
// More code comes here …
}
26
27. Chaining Constructors Calls
Reusing the constructors
public class Point
{
private int xCoord;
private int yCoord;
public Point() : this(0,0) // Reuse the constructor
{
}
public Point(int xCoord, int yCoord)
{
this.xCoord = xCoord;
this.yCoord = yCoord;
}
// More code comes here …
}
27
29. Fields
Fields contain data for the class instance
Can be arbitrary type
Have given scope
Can be declared with a specific value
class Student
{
private string firstName;
private string lastName;
private int course = 1;
private string speciality;
protected Course[] coursesTaken;
private string remarks = "(no remarks)";
}
29
30. Constants
Constant fields are defined like fields, but:
Defined with const
Must be initialized at their definition
Their value can not be changed at runtime
public class MathConstants
{
public const string PI_SYMBOL = "π";
public const double PI = 3.1415926535897932385;
public const double E = 2.7182818284590452354;
public const double LN10 = 2.30258509299405;
public const double LN2 = 0.693147180559945;
}
30
31. Read-Only Fields
Initialized at the definition or in the constructor
Can not be modified further
Defined with the keyword readonly
Represent runtime constants
public class ReadOnlyExample
{
private readonly int size;
public ReadOnlyExample(int aSize)
{
size = aSize; // can not be further modified!
}
}
31
32. The Role of Properties
Expose object's data to the outside world
Control how the data is manipulated
Properties can be:
Read-only
Write-only
Read and write
Give good level of abstraction
Make writing code easier
32
33. Defining Properties in C#
Properties should have:
Access modifier (public, protected, etc.)
Return type
Unique name
Get and / or Set part
Can contain code processing data in specific
way, e.g. validation logic
33
34. Defining Properties – Example
public class Point
{
private int xCoord;
private int yCoord;
public int XCoord
{
get { return xCoord; }
set { xCoord = value; }
}
public int YCoord
{
get { return yCoord; }
set { yCoord = value; }
}
// More code ...
}
34
35. Dynamic Properties
Properties are not obligatory bound to a class
field – can be calculated dynamically:
public class Rectangle
{
private float width;
private float height;
// More code ...
public float Area
{
get
{
return width * height;
}
}
}
35
36. Automatic Properties
Properties could be defined without an
underlying field behind them
It is automatically created by the C# compiler
36
class UserProfile
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
…
UserProfile profile = new UserProfile() {
FirstName = "Steve",
LastName = "Balmer",
UserId = 91112
};
38. Static Members
Static members are associated with a type
rather than with an instance
Defined with the modifier static
Static can be used for
Fields
Properties
Methods
Events
Constructors
38
39. Static vs. Non-Static
Static:
Associated with a type, not with an instance
Non-Static:
The opposite, associated with an instance
Static:
Initialized just before the type is used for the
first time
Non-Static:
Initialized when the constructor is called
39
40. Static Members – Example
public class SqrtPrecalculated
{
public const int MAX_VALUE = 10000;
// Static field
private static int[] sqrtValues;
// Static constructor
private static SqrtPrecalculated()
{
sqrtValues = new int[MAX_VALUE + 1];
for (int i = 0; i < sqrtValues.Length; i++)
{
sqrtValues[i] = (int)Math.Sqrt(i);
}
}
// (example continues)
40
41. Static Members – Example (2)
// Static method
public static int GetSqrt(int value)
{
return sqrtValues[value];
}
// The Main() method is always static
static void Main()
{
Console.WriteLine(GetSqrt(254));
}
}
41
43. Structures
Structures represent a combination of fields
with data
Look like the classes, but are value types
Their content is stored in the stack
Transmitted by value
Destroyed when go out of scope
However classes are reference type and are
placed in the dynamic memory (heap)
Their creation and destruction is slower
43
44. Structures – Example
struct Point
{
public int X, Y { get; set; }
}
struct Color
{
public byte RedValue { get; set; }
public byte GreenValue { get; set; }
public byte BlueValue { get; set; }
}
struct Square
{
public Point Location { get; set; }
public int Size { get; set; }
public Color BorderColor { get; set; }
public Color SurfaceColor { get; set; }
}
44
45. When to Use Structures?
Use structures
To make your type behave as a primitive type
If you create many instances and after that you
free them – e.g. in a cycle
Do not use structures
When you often transmit your instances as
method parameters
If you use collections without generics (too
much boxing / unboxing!)
45
47. What are Delegates?
Delegates are reference types
Describe the signature of a given method
Number and types of the parameters
The return type
Their "values" are methods
These methods correspond to the signature of
the delegate
47
48. What are Delegates? (2)
Delegates are roughly similar to function
pointers in C and C++
Contain a strongly-typed pointer (reference) to
a method
They can point to both static or instance
methods
Used to perform callbacks
48
49. Delegates – Example
// Declaration of a delegate
public delegate void SimpleDelegate(string param);
public class TestDelegate
{
public static void TestFunction(string param)
{
Console.WriteLine("I was called by a delegate.");
Console.WriteLine("I got parameter {0}.", param);
}
public static void Main()
{
// Instantiation of а delegate
SimpleDelegate simpleDelegate =
new SimpleDelegate(TestFunction);
// Invocation of the method, pointed by a delegate
simpleDelegate("test");
}
}
49
50. Anonymous Methods
We are sometimes forced to create a class or a
method just for the sake of using a delegate
The code involved is often relatively
short and simple
Anonymous methods let you define an
nameless method called by a delegate
Less coding
Improved code readability
50
51. Using Delegates: StandardWay
class SomeClass
{
delegate void SomeDelegate(string str);
public void InvokeMethod()
{
SomeDelegate dlg = new SomeDelegate(SomeMethod);
dlg("Hello");
}
void SomeMethod(string str)
{
Console.WriteLine(str);
}
}
51
52. Using Anonymous Methods
The same thing can be accomplished by using
an anonymous method:
class SomeClass
{
delegate void SomeDelegate(string str);
public void InvokeMethod()
{
SomeDelegate dlg = delegate(string str)
{
Console.WriteLine(str);
};
dlg("Hello");
}
}
52
53. Events
In component-oriented programming the
components send events to their owner to notify
them when something happens
E.g. when a button is pressed an event is raised
The object which causes an event is called event
sender
The object which receives an event is called
event receiver
In order to be able to receive an event the event
receivers must first "subscribe for the event"
53
54. Events in .NET
In the component model of .NET Framework
delegates and events provide mechanism for:
Subscription to an event
Sending an event
Receiving an event
Events in C# are special instances of delegates
declared by the C# keyword event
Example (Button.Click):
public event EventHandler Click;
54
55. Events in .NET (2)
The C# compiler automatically defines the +=
and -= operators for events
+= subscribe for an event
-= unsubscribe for an event
There are no other allowed operations
Example:
Button button = new Button("OK");
button.Click += delegate
{
Console.WriteLine("Button clicked.");
};
55
56. Events vs. Delegates
Events are not the same as member fields of
type delegate
The event is processed by a delegate
Events can be members of an interface unlike
delegates
Calling of an event can only be done in the
class it is defined in
By default the access to the events is
synchronized (thread-safe)
public MyDelegate m; public event MyDelegate m;≠
56
57. System.EventHandler Delegate
Defines a reference to a callback method,
which handles events
No additional information is sent
Used in many occasions internally in .NET
E.g. in ASP.NET and Windows Forms
The EventArgs class is base class with no
information about the event
Sometimes delegates derive from it
public delegate void EventHandler(
object sender, EventArgs e);
57
58. EventHandler – Example
public class Button
{
public event EventHandler Click;
public event EventHandler GotFocus;
public event EventHandler TextChanged;
…
}
public class ButtonTest
{
private static void Button_Click(object sender,
EventArgs eventArgs)
{
Console.WriteLine("Call Button_Click() event");
}
public static void Main()
{
Button button = new Button();
button.Click += Button_Click;
}
}
58
60. Interfaces
Describe a group of methods (operations),
properties and events
Can be implemented by given class or
structure
Define only the methods’ prototypes
No concrete implementation
Can be used to define abstract data types
Can not be instantiated
Members do not have scope modifier
and by default the scope is public
60
61. Interfaces – Example
public interface IPerson
{
string Name // property Name
{
get;
set;
}
DateTime DateOfBirth // property DateOfBirth
{
get;
set;
}
int Age // property Age (read-only)
{
get;
set;
}
}
61
62. Interfaces – Example (2)
interface IShape
{
void SetPosition(int x, int y);
int CalculateSurface();
}
interface IMovable
{
void Move(int deltaX, int deltaY);
}
interface IResizable
{
void Resize(int weight);
void Resize(int weightX, int weightY);
void ResizeByX(int weightX);
void ResizeByY(int weightY);
}
62
63. Interface Implementation
Classes and structures can implement
(support) one or many interfaces
Interface realization must implement all its
methods
If some methods do not have implementation
the class or structure have to be declared
as an abstract
63
64. Interface Implementation –
Example
class Rectangle : IShape, IMovable
{
private int x, y, width, height;
public void SetPosition(int x, int y) // IShape
{
this.x = x;
this.y = y;
}
public int CalculateSurface() // IShape
{
return this.width * this.height;
}
public void Move(int deltaX, int deltaY) // IMovable
{
this.x += deltaX;
this.y += deltaY;
}
}
64
65. Abstract Classes
Abstract method is a method without
implementation
Left empty to be implemented by some
descendant class
When a class contains at least one abstract
method, it is called abstract class
Mix between class and interface
Inheritors are obligated to
implement their abstract methods
Can not be directly instantiated
65
66. Abstract Class – Example
abstract class MovableShape : IShape, IMovable
{
private int x, y;
public void Move(int deltaX, int deltaY)
{
this.x += deltaX;
this.y += deltaY;
}
public void SetPosition(int x, int y)
{
this.x = x;
this.y = y;
}
public abstract int CalculateSurface();
}
66
68. Cohesion
Cohesion describes how closely all the routines
in a class or all the code in a routine support a
central purpose
Cohesion must be strong
Classes must contain strongly related
functionality and aim for single purpose
Cohesion is a useful tool for managing
complexity
Well-defined abstractions keep cohesion strong
68
69. Good and Bad Cohesion
Good cohesion: hard disk, CD-ROM, floppy
Bad cohesion: spaghetti code
69
71. Bad Cohesion
Example of bad cohesion
Class Magic that has all these methods:
Another example:
MagicClass.MakePizza("Fat Pepperoni");
MagicClass.WithdrawMoney("999e6");
MagicClass.OpenDBConnection();
public void PrintDocument(Document d);
public void SendEmail(string recipient, string
subject, string text);
public void CalculateDistanceBetweenPoints(int x1,
int y1, int x2, int y2)
71
72. Coupling
Coupling describes how tightly a class or
routine is related to other classes or routines
Coupling must be kept loose
Modules must depend little on each other
All classes and routines must have small, direct,
visible, and flexible relations to other classes
and routines
One module must be easily used by other
modules
72
73. Loose andTight Coupling
Loose Coupling:
Easily replace old HDD
Easily place this HDD to
another motherboard
Tight Coupling:
Where is the video card?
Can you change the
video card?
73
74. Loose Coupling – Example
class Report
{
public bool LoadFromFile(string fileName) {…}
public bool SaveToFile(string fileName) {…}
}
class Printer
{
public static int Print(Report report) {…}
}
class LooseCouplingExample
{
static void Main()
{
Report myReport = new Report();
myReport.LoadFromFile("C:DailyReport.rep");
Printer.Print(myReport);
}
}
74
75. Tight Coupling – Example
class MathParams
{
public static double operand;
public static double result;
}
class MathUtil
{
public static void Sqrt()
{
MathParams.result = CalcSqrt(MathParams.operand);
}
}
class Example
{
static void Main()
{
MathParams.operand = 64;
MathUtil.Sqrt();
Console.WriteLine(MathParams.result);
}
}
75
76. Spaghetti Code
Combination of bad cohesion and tight coupling
(spaghetti code):
class Report
{
public void Print() {…}
public void InitPrinter() {…}
public void LoadPrinterDriver(string fileName) {…}
public bool SaveReport(string fileName) {…}
public void SetPrinter(string printer) {…}
}
class Printer
{
public void SetFileName() {…}
public static bool LoadReport() {…}
public static bool CheckReport() {…}
}
76
78. Inheritance
Inheritance is the ability of a class to implicitly
gain all members from another class
Inheritance is fundamental concept in OOP
The class whose methods are inherited is
called base (parent) class
The class that gains new functionality is called
derived (child) class
Inheritance establishes an is-a relationship
between classes: A is B
78
79. Inheritance (2)
All class members are inherited
Fields, methods, properties, …
In C# classes could be inherited
The structures in C# could not be inherited
Inheritance allows creating deep inheritance
hierarchies
In .NET there is no multiple inheritance,
except when implementing interfaces
79
80. How to Define Inheritance?
We must specify the name of the base class
after the name of the derived
In the constructor of the derived class we use
the keyword base to invoke the constructor of
the base class
public class Shape
{...}
public class Circle : Shape
{...}
public Circle (int x, int y) : base(x)
{...}
80
81. Inheritance – Example
public class Mammal
{
private int age;
public Mammal(int age)
{
this.age = age;
}
public int Age
{
get { return age; }
set { age = value; }
}
public void Sleep()
{
Console.WriteLine("Shhh! I'm sleeping!");
}
}
81
82. Inheritance – Example (2)
public class Dog : Mammal
{
private string breed;
public Dog(int age, string breed): base(age)
{
this.breed = breed;
}
public string Breed
{
get { return breed; }
set { breed = value; }
}
public void WagTail()
{
Console.WriteLine("Tail wagging...");
}
}
82
83. Inheritance – Example (3)
static void Main()
{
// Create 5 years old mammal
Mamal mamal = new Mamal(5);
Console.WriteLine(mamal.Age);
mamal.Sleep();
// Create a bulldog, 3 years old
Dog dog = new Dog("Bulldog", 3);
dog.Sleep();
dog.Age = 4;
Console.WriteLine("Age: {0}", dog.Age);
Console.WriteLine("Breed: {0}", dog.Breed);
dog.WagTail();
}
83
85. Polymorphism
Polymorphism is fundamental concept in
OOP
The ability to handle the objects of a specific
class as instances of its parent class and to call
abstract functionality
Polymorphism allows creating hierarchies with
more valuable logical structure
Allows invoking abstract functionality without
caring how and where it is implemented
85
86. Polymorphism (2)
Polymorphism is usually implemented
through:
Virtual methods (virtual)
Abstract methods (abstract)
Methods from an interface (interface)
In C# to override virtual method the keyword
override is used
C# allows hiding virtual methods in derived
classes by the keyword new
86
87. Polymorphism – Example
class Person
{
public virtual void PrintName()
{
Console.WriteLine("I am a person.");
}
}
class Trainer : Person
{
public override void PrintName()
{
Console.WriteLine("I am a trainer.");
}
}
class Student : Person
{
public override void PrintName()
{
Console.WriteLine("I am a student.");
}
}
87
88. Polymorphism – Example (2)
static void Main()
{
Person[] persons =
{
new Person(),
new Trainer(),
new Student()
};
foreach (Person p in persons)
{
Console.WriteLine(p);
}
// I am a person.
// I am a trainer.
// I am a student.
}
88
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
3
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
29
30
31
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
43
44
45
46##
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*