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