41
SOFTWARE ENGINEERING I 1st lecture

Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

SOFTWARE ENGINEERING I

1st lecture

Page 2: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Contact info

• Page:

– http://kimutis.lt

• Emails:

[email protected]

[email protected]

• In the subject of the email, provide this:

– string.Concat(„PSI I: ", „Your text");

Page 3: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course material

• Code examples:

– http://kimutis.lt/source.html

• Slides:

– http://kimutis.lt/slides.html

• Material:

– Will be uploaded after the lecture (within couple of

days)

– For students in this course only

– Might change – always check the latest version

Page 4: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Purpose of the course unit

• To get acquainted with software development

methods using C# programming language and

.NET (core) framework, to consolidate

knowledge of object-oriented programming.

Page 5: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Learning outcomes of the course

unit (1)• Design, implement and develop applied programs, apply

code reviews;

• Apply knowledge of software systems engineering, make

qualified design and architectural decisions while expanding

the functionality of the developed system;

• Combine theory and practice using .NET framework

technologies and developing OO application systems;

• Develop the knowledge about data types, named and

optional arguments as well as other new features of C#

programming language;

Page 6: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Learning outcomes of the course

unit (2)• Program in C# independently and in a team, applying basic

OO design templates using C# programming environment;

• Recognize the need for continuous learning and will have

the initial skills;

• Work in the team - on site and remotely;

Page 7: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Survey

• 5mins.

• In your group chats (someone has to initiate

call)

• After that, group has to present outcome

• Honest!

Page 8: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Last year winners!

Page 9: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Let’s learn together ☺

Page 10: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

15 mins

Page 11: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview (1)

Four main sections:

1. Introduction to basic C # constructs;

2. Exceptional C # and OOP features;

3. Working with databases;

4. MS.NET and OO solutions and patterns

overview;

Page 12: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview: 1, 2 lecture

• Acquaintance with C#

programming language;

• Loops/operators;

• Type systems;

• Applications build tools, .NET

framework compatibility with

different operating systems;

• Code versioning systems;

• Code reviews;

• Generic types and methods …

what is that?

Page 13: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview: 3, 4 lecture (1)– Value types … what is that?

– Reference types:

• Classes and their interaction: fields, properties, methods, nested classes.

– Type conversions:

• Allowed conversion (Widening, narrowing, implicit, and explicit, checked

keyword),

• cast

• Conversions of incompatible types

• is and as

• boxing and unboxing

– Common .NET interfaces:

• IComparable, IComparer, IEquatable, IClonable, IEnumerable, IEnumerator

Page 14: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview: 3, 4 lecture (2)

– Creation of objects:

• Lazy / object initializers / anonymous type /

equals

– Extension methods

– Typical OOP mistakes and how to avoid them

– Object lifecycle

– String type variables

– Software system construction

– Business needs analysis

– Software system modification and maintenance

Page 15: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview: 5, 6 lecture (1)

• Delegates: Action and Func

• Anonymous methods

• Lambda expressions

• Events

• Expression trees

• Introduction to LINQ

• Working with data

• Collections

Page 16: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview: 5, 6 lecture (2)

Page 17: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview: 7, 8 lecture– Working with databases

– Introduction to ORM

– Entity framework with .net core

– Serialization

– Attributes

– Exceptions and their handling

– Introduction to project management

– Basics of Agile

Page 18: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview: 9,10 lecture

• Web services:

– SOAP

– GraphQL

– gRPC

– REST

• Creating a web service using .net core

• Introduction to multithreading

• Async/await

Page 19: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview: 11,12 lecture

• Improving application:

– Debug

– Diagnostics and profiling

– Events (operating system)

– Configuration files

• Testing:

– unit tests vs integration tests vs component test

– Testing tools and strategies

• Functional and non-functional requirements for software

systems

• Use cases of interceptor and middleware in .NET Core

framework

Page 20: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview: 13,14 lecture

• Introduction to creating and improving the user

experience

• Introduction to graphical interface development

• Presentation of the developed software system

Page 21: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Course overview: 15,16 lecture

• Introduction to design patterns (MQ, CQRS

etc.)

• Analysis of modern OO systems

• Preparation for the exam and taking the final

exam (written)

Page 22: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Evaluation

• Exam in written form (max 5.0)

– Test, semi open and open questions

– Exam is considered to be passed if at least 1.5 out of 5

points are collected

– Exam can be taken only when total amount of points

collected during the semester is 3.0 or more

• Laboratory assignments (max 5.0)

– Three (1.5 + 2.0 + 1.5)

• Additional points (max 1.5)

– Kahoots during the lecture (<1.0).

– Advance settlement of tasks (5.0 x 10%).

Page 23: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

VU, MIF, Programų sistemų katedra

Page 24: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

What's wrong with traditional teaching?

• Failure to code in a team:

– Code reviews

– Managing work tasks

• Weak personal preparation:

– Lack of empathy

– Lack of creativity

– Minimalism (I do only what I am told to)

– English

• Teaching methods:

– One to everyone

– All to all

Page 25: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

„You think education is expensive...

Try estimating the cost of ignorance“

Howard Gardner

Page 26: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

What do we do?

• Practise assignments:

– Smart saver

– Support you locals

– Comparison shopping engine

Page 27: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

First part of lab. work (1)

• Official goal: to develop an app while working in groups while

using material covered in 1-7 lectures

• Unofficial goal: to develop an app in Windows Forms, that has

basic functionality of assigned APP. Understand the usage of

GitHub, coding in team principles. Learn to code review yourself

and take the feedback when getting one.

• Recommendations:

– Creating and using your own class, struct and enum (with flag(s),

preferably).

– Property (standard, indexed, auto-implemented) usage in struct and class.

– Named and optional argument usage.

– Extension method usage.

– Reading from file.

Page 28: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

First part of lab. work (2)

• Recommendations:

– Generic type usage.

– Regex.

– Widening and narrowing type conversions.

– Putting data to collection, iterating through it the

right way.

– LINQ to Objects usage (methods and queries),

including groupJoin.

– Implementing some of the standard .NET interfaces

(IEnumerable, IComparable, IComparer,

IEquatable, IEnumerator, etc.)

Page 29: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Second part of lab. work(1)

• Official goal: continue developing an app while

working in groups while using material covered in 8-11

lectures

• Unofficial goal: implement web service(s) so

functionality could be separated from UI. Deepen the

functionality of application while being creative.

• Recommendations:

– Lazy initialization.

– Generics (in delegates, events and methods)

– Delegates.

– Events and their usage: standard and custom.

Page 30: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Second part of lab. work(2)

• Recommendations:

– Exceptions and dealing with them: standard and custom (and

meaningful usage of those).

– Variation and covariation usage (at least demonstration).

– Anonymous methods.

– Lambda expressions.

– concurrent programming (threading or async/await (for your

own written classes); common resource usage between

threads).

– Config file usage (both - app and user).

– Dependency Injection.

Page 31: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Third part of lab. work

• Official goal: continue developing an app while working in groups

while using material covered in 12-15 lectures (databases).

• Unofficial goal: Make an actual smartphone UI, while thinking about

end-user experience. Deepen the functionality of application while

being creative.

• Recommendations:

– Prepare ER diagram and create the database (MS SQL, but not mandatory -

only important to be able to integrate to your solution).

– Transfer/update data using DataTable and DataAdapter.

– Select/insert/update/delete usage.

– LINQ usage: Join, Group, Skip and Take, Aggregate function.

– Entity Framework usage.

Page 32: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Practice assignments (1)

• Practice examination is being held during practice lessons.

Virtual examination (e.g via email) is not possible.

• Every assignment that is done in time and without any flaws is

marked with maximum possible points

– Flaws make grade lower

– It is always better to make adjustments as long as there are now flaws

• Lateness leads to the decrease of the maximal assessment (2.0)

by 20% of every delayed week

• Additional points are added to the assessment if the work is

presented before the deadline (no more than 10% of the final

assessment and 5% for every preliminary week)

Page 33: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Practice assignments(2)

• During the practice assignment examination

lecturer makes sure that students understand

and has ability to change the program.

• When grading, lecturer checks if version

control was used and checks pull requests

code reviews.

• Students are informed about their mark in the

same lecture after the examination.

Page 34: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Practice assignments(3)

Page 35: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Practice assignments(4)

• The point is "pretending" to write code as if you

were working for a company, rather than reporting to

a university. So :

– Your code will be reviewed (pull requests),

– Code will be long living after the lectures,

– You dont want to be that person, whos name is being

mentioned in the context of: „who coded this peace of

nonsense???“,

– Basically – you have to be happy with the code that you

write.

Page 36: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Practice assignments(5)

• Results can always be checked online (kimutis.lt)

• For TOP THREE students:

– Honor and glory☺

– Voucher to take Microsoft exam „98-361: Software

Development Fundamentals “:

• 100Eur worth, provided by DanskeBank

https://docs.microsoft.com/en-us/learn/certifications/exams/98-361#certification-

exams

• Top three teams will be rewarded as well.

– Prizes - TBD

Page 37: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Practice assignments(7)

Page 38: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Literature

• Main: Andrew Troelsen. Pro C# 2010 and the .NET 4

• Additional:

– J.Skeet. C# in Depth.

– D.Clark. Beginning C# Object-Oriented Programming.

– J.Purdum. Beginning Object-Oriented Programming with C#.

– A.Hunt, D.Thomas. The pragmatic programmer: from journeyman to

master.

– Scott Allen - C# Fundamentals with Visual Studio 2015

https://app.pluralsight.com/library/courses/c-sharp-fundamentals-with-

visual-studio-2015/table-of-contents

• Preparation for exam 70-483:

– MCSD Certification Toolkit. Exam 70-483. Programming in C#.

– Programming in C#. Exam Ref 70-483.

Page 39: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Programming IDE

– Microsoft Visual Studio

• Cummunity: recommended and FREE

• Ultimate/Pro: Microsoft Imagine.

– JetBrains Rider

• https://www.jetbrains.com/rider/

– JetBrains tools are free to MIF students

• https://mif.vu.lt/itwiki/programine_iranga#jetbrains_ira

nkiai

Page 41: Taikomasis objektinis programavimas · Modulio studijų siekiniai •Gebėssavarankiškaiir komandoje programuoti C# kalba, pritaikant pagrindinius OO projektavimo šablonus, naudojantis

Questions