Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 43

Introductory Programming

with C#

Judith Bishop
University of Pretoria, South Africa
Visiting TU-Berlin

Microsoft Courses 2003 1


Talk overview

 Introduction
– Who, why, when, how, with what?

 Syntax and semantics


– for you and your students

 A tour through some lessons


– Early concepts
– Our approach to GUIs
– Debugging
– Advanced concepts

 Assessment
– Quizzes, exercises, laboratories, exams

 References

Microsoft Courses 2003 2


Featuring …

 Syntax and semantics descriptions

 Early use of libraries

 Independent GUI specifications

 Debugging New

Microsoft Courses 2003 3


Focus on C#

 Designed by Anders Hejlsberg, Scott Wiltamuth and


Peter Golde
 To b the main development medium for future
Microsoft products
 Origins in C++, Java, Delphi, Modula-2, Smalltalk
 Heljsberg was the chief architect behind Turbo
Pascal and Delphi
 Standardised by Ecma and ISO
 Free (to us)

Microsoft Courses 2003 4


Changing languages

 Major movements worldwide


– To Pascal in 1970s and 1980s
– To Java in 1990s

 Caused by advances in technology


– Data structures, oops, internet computing
– Foundation for later courses
– Desire to be "ahead of the pack"

 Inhibitors to change
– Lack of teaching resources
– Computing resources required by new technology
– Investment in current language
– Uncertainty over the measure of improvement

Microsoft Courses 2003 5


A first programming course

 Typically 40-50 lectures


 10-14 laboratories
 Take home assignments
 Project
 Questions:
– where does it start?
– where does it end?
– what is the place of libraries?
– what is the order of topics?
– what should be included/left out?
– what do I need to run the language?

Microsoft Courses 2003 6


Where does it start and end?

 Most institutions assume "no background"


– most students have more than that
– use of computers is almost universal now
– students can interact with GUIs

 Strong desire to have "objects first"


– but what is second?
– what do objects assume?

 With or without GUIs?


– huge tension between need to program realistically and the number of
concepts required to express GUIs

 Advanced topics can be left to other courses


– networking and databases - NetCentric Computing
– generics and overloading - Data Structures

Microsoft Courses 2003 7


What about libraries?

 Libraries cannot be ignored,


– More in the libraries than in the language!
– Without them, examples will be too constrained

 Students can be on a "need to know basis", BUT they


need to know the structure and organisation of
libraries
– This knowledge transcends languages

 Early use of libraries introduces many fundamental


concepts in a controlled manner, e.g.
– variables vs properties
– instance vs static
– constructors
– parameters

Microsoft Courses 2003 8


An order of topics
 Introduction to computers, languages and compiling 2
 Using types 5
 Defining types 5
 Data structures and control structures 5
Views System 4 Half way
 Input and output with files 4
Debugging 3
 Collections 5
 Extensibility and polymorphism 5
 Extra topics 2

Microsoft Courses 2003 9


What to include?

 If a feature is covered, cover it completely, albeit over


time in a spiral fashion
 Include
– images as data types - adds to the fun
– GUIs - for realism
– formatting and unicode - promotes internationalisation
– serialization - makes for serious programs
– exception handling - makes for robust programs
– foreach loop - so neat and powerful
– collections - enhance object-orientation

Microsoft Courses 2003 10


What to exclude?

 What to exclude depends on


– length of course
– interface with other courses

 A suggestion
– threads - in Operating Systems
– networking - for Netcentric Computing
– graphics and delegates - to introduce non-Views GUIs
– operator overloading, other upcoming features (e.g. generics), - in
Data Structures
 Notes:
– Topics that were in a Java introductory course might not be in a C#
version (applets)
– NOTE: some institutions will start with Netcentric Computing -
interesting approach

Microsoft Courses 2003 11


What resources do I need?

 Microsoft Academic Alliance, plus


 Option 1 (Student):
– a PC
– C# compiler
– Any simple editor

 Option 2 (Lecturer)
– a PC with lots of memory
– Visual Studio

 Option 3 (Researcher)
– PC or Mac, Windows or Linux
– Rotor
– Any simple editor

Microsoft Courses 2003 12


C# Concisely

 First year programming


text book, Oct 2003
 Pearson, 2004
 Incorporates Views
 Reviewed by Microsoft
 Contents on the Views
website
http://csharp.cs.uvic.ca

Microsoft Courses 2003 13


Volunteers on a C# course in Africa

Microsoft Courses 2003 Do it in C# Naturally! 14


From the ECMA C# Specification
8.7.4 Properties
A property is a member that provides access to a characteristic of an object or a class. Examples of
properties include the length of a string, the size of a font, the caption of a window, the name of a
customer,and so on. Properties are a natural extension of fields. Both are named members with associated
types, and the syntax for accessing fields and properties is the same. However, unlike fields, properties do
not denote storage locations. Instead, properties have accessors that specify the statements to be executed
when their values are read or written.
Properties are defined with property declarations. The first part of a property declaration looks quite similar
to a field declaration. The second part includes a get accessor and/or a set accessor. In the example below,
the Button class defines a Caption property.

public class Button {


private string caption;
public string Caption {
get {
return caption;
}
set {
caption = value;
Repaint();
}
}}

Microsoft Courses 2003 15


Syntax forms in C#C
Fixed words
Items to
and symbols
fill in

public string Course {


get {return course;}
}
Microsoft Courses 2003 16
Also for libraries

Microsoft Courses 2003 17


Visual Studio Help

Microsoft Courses 2003 18


Concepts for simple oops

Microsoft Courses 2003 19


Example sequence from early lessons

 Example 2.5 (page 45) - Meeting times


– Creates objects of type DateTime and accesses their properties
and methods

 Example 2.6 (page 47) - Dates in different formats


– Further example of DateTime methods, customising output

 Example 2.7 (page 49) - Time with reading


– Introduces input using Console and the Parse methods of a type

 Example 3.4 (page 83) - Table of meeting times


– Using a loop to create different times

 Examples 3.2 and 3.3 (page 75) - The shuttle bus


– Defining a type from scratch and using it in a program

Microsoft Courses 2003 20


GUIs

 Current approaches do not emphasise independent


principles

OPTIONS
 Create GUIs by hand
– error prone
– takes too much time

 Use a GUI builder


– dumps code in the program
– hides principles

Microsoft Courses 2003 21


Where GUIs are going

The reality of a
Views single cross-language,
cross-platform
GUI interface programming model
is in sight, based on an
XML description language
supported by
fast native runtimes.
[Russel Jones, DevX, Nov 2002]

Microsoft Courses 2003 22


… and more recently

Supporting many GUIs


isn't just a simple process
of including one set of libraries or another;
it's often a frustrating and error-prone exercise
in writing GUI-specific code.

[Russel Jones, DevX, Aug 2003]

Microsoft Courses 2003 23


Rotor CLI Implementation
VS.NET
System.WinForms
System.WinForms
C#
System.Web
JScript (ASP.NET)
System.Drawing

System.Data
System.Xml
(ADO.NET)

System
SDK Tools

Common Language Runtime

Platform Abstraction
Microsoft Courses 2003 24
Views

 Views is a Vendor Independent Extensible


Windowing System
 Developed by Nigel Horspool and Judith Bishop with
help from students in 2002-2003
 Provides an XML-based specification notation for
defining GUIs, and an execution engine for handling
event listening and dispatching back to the program
 It was supported under the Microsoft Rotor RFP
Program
 It is distributed from the C# Concisely book website

Microsoft Courses 2003 25


Microsoft Courses 2003 26
Example in WinForms
show.Click += new
EventHandler(ActionPerformed);
hide.Click += new
EventHandler(ActionPerformed);
}

public void ActionPerformed(Object src,


EventArgs args)
{
if (src == show) {
pic.Show();
} else if (src == hide) {
pic.Hide();
}
}i
 Embedded in 115 lines of generated code - “do not touch”
 Unexplained classes and unused objects here
Microsoft Courses 2003 27
GUI building today
widget
widget
rendering
rendering
ininthe
theOS
OS
widget
calls in a Windows
language

Application
GUI
GUIBuilder
Builder
Add
AddListeners
Listeners
Handlers

Visual Studio

C#

Microsoft Courses 2003 28


A GUI using XML
widget
widget
rendering
rendering
in
inthe
theOS
OS
GUI
GUI
Application
XML
XML
Spec
Spec Handlers

Control
Engine

Add
AddListeners
Listeners

Microsoft Courses 2003 29


XML
Example in Views
Views.Form f =
string c; C#
new Views.Form(@"<Form>
for (;;) {
<vertical>
c = f.GetControl();
<horizontal>
PictureBox pb = f["pic"];
<Button Name=Show/>
switch (c) {
<Button Name=Hide/>
case ”Show" : pb.Show();
</horizontal>
break;
<PictureBox Name=pic
}
Image='C:Jacarandas.jpg'
case ”Hide" : pb.Hide();
Height=175/>
break;
</vertical>
}
</Form>" );
}
}

 No pixel positioning
 No generated code
 Separation of concerns
Microsoft Courses 2003 30
Example 2

Views.Form v = new Form (@"<form Text= Lucky>


<vertical>
<TextBox name =Number Text = '13'/>
<Button name = Start/>
<ListBox name = Day Width = 270/>
</vertical>
</form>");

int luckyNumber =
int.Parse(v.GetText("Number"));
Random r = new Random (luckyNumber);
for( ; ; ) {
string s = v.GetControl( );
if (s==null) break;
DateTime luckyDate =
new DateTime(DateTime.Now.Year, r.Next(3,12);, r.Next(1,30););
v.PutText("Day", "Your lucky day will be " +
luckyDate.DayOfWeek + " " + luckyDate.ToString("M"));
}
Microsoft Courses 2003 31
Other Views examples

 Calculator
– Compare with text version
– Separation of concerns
– Internationalization

 PhotoAlbum
– Fun with pictures

Microsoft Courses 2003 32


Debugging

 Principles - types of errors:


– syntactic
– semantic
– runtime

 Exception handling
 Robust code
– simple logic
– validity checks - also with Assert
– tracing statements

 Debugger programs
– Text based, or
– GUI, with or without Visual Studio

Microsoft Courses 2003 33


Oops in C#

 Structs and classes


 Well defined collection library
– Array class
– Sorted lists
– BitArray
– Queue, Stack, Hashtable

 Polymorphism and extensibility


– Interfaces and inheritance

Microsoft Courses 2003 34


Example - Access control

 Page 318
 Students, staff, posgrads and tutors have different
rules for access to a building. The rules are
implemented at the start of each year.
 Polymorphic collection over IAccess
 Classic simple data update example
 Can be much extended e.g. for
– serialisation
– images

Microsoft Courses 2003 35


Assessment

 Quizzes
– available online on the website

 Exercises
– at the end of each chapter - answers will be provided to lecturers

 Practicals
– worksheets are being devised based on the book

 Exam questions
– samples will also be provided

Watch for the CD

Microsoft Courses 2003 36


References

 Peter Drayton, Ben Albahari, Ted Neward, C# in a Nutshell,


O’Reilly, 2002
 Troelsen, Andrew “C# and the .NET platform” A! press 2001
 Damien Watkins, Mark Hammond and Brad Abrams,
Programming in the .NET environment, Microsoft .NET
Development Series, Addison Wesley, 2002
 Not many text books yet, but many trade books

 Visual Studio help files


 DevHood tutorials -- see http://www.devhood.com
 http://www.cs.up.ac.za/rotor -- for the Views project

Microsoft Courses 2003 37


Motivation for a different approach

Forward looking
– Move to platform independent GUI systems
– Integration of XML into languages (cf XEN)

Technical
– Rotor does not have a GUI capability
– Interesting challenges in Reflection, RegEx etc

Educational
– Dissatisfaction with method-oriented or drag and drop GUIs
– Separation of concerns

Microsoft Courses 2003 38


The Views Notation
form: <form> controlGroup </form>
controlGroup: <vertical> controlList </vertical>
| <horizontal> controlList </horizontal>
controlList: { control }
textItemList: { <item> text </item> }
control: controlGroup
| <Button/> | <CheckBox/>
| <CheckedListBox> textItemList </CheckedListBox>
| <DomainUpDown> textItemList </DomainUpDown>
| <GroupBox> radioButtonList </GroupBox>
| <Label/> | <ListBox/>
| <OpenFileDialog/> | <SaveFileDialog/>
| <PictureBox/> | <TextBox/>
| <ProgressBar/> | <TrackBar/>
radioButtonList: { <RadioButton/> }
Microsoft Courses 2003 39
Handler methods
Form(string spec,params) Essentially five kinds of methods:
The constructor. construct
void CloseGUI( )
close
Terminates the execution thread
string GetControl( ) getControl
Waits for the user to perform an action get
string GetText(string name)
put
Returns the value of the Text attribute
int GetValue(string name) PLUS … direct access
Returns the Value attribute from TrackBar, ProgressBar and CheckBox
int GetValue(string name, int index)
Returns the status of CheckBox at position index
void PutText(string name, string s)
Displays the string in a TextBox or ListBox control.
void PutValue(string name, int v)
Sets an integer value associated with a ProgressBar or CheckBox
Microsoft Courses 2003 40
Handler methods
Form(string spec,params) Essentially five kinds of methods:
The constructor. construct
void CloseGUI( )
close
Terminates the execution thread
string GetControl( ) getControl
Waits for the user to perform an action get
string GetText(string name)
put
Returns the value of the Text attribute
int GetValue(string name) PLUS … direct access
Returns the Value attribute from TrackBar, ProgressBar and CheckBox
int GetValue(string name, int index)
Returns the status of CheckBox at position index
void PutText(string name, string s)
Displays the string in a TextBox or ListBox control.
void PutValue(string name, int v)
Sets an integer value associated with a ProgressBar or CheckBox
Microsoft Courses 2003 41
Object orientation

 Extension, polymorphism
D1(P)
 Delegation D2(Q)
D3(R)

F(D1) -- calls P
F() -- calls M F() -- calls M via M

I A D
M M
M C
A B
A B C B C P Q R
M M M M M

Interfaces Inheritance Delegates


Microsoft Courses 2003 42
GUI building today
widget
widget
rendering
rendering
ininthe
theOS
OS
widget
calls in a Windows
language

Application
GUI
GUIBuilder
Builder
Add
AddListeners
Listeners
Handlers

Visual Studio

C#

Microsoft Courses 2003 43

You might also like