CS 580 Client-Server Programming Fall Semester, 2000 Introduction |
||
---|---|---|
© 2000, All Rights Reserved, SDSU & Roger Whitney San Diego State University -- This page last updated 26-Aug-00 |
Introduction to Course
Items To Cover
Computing "Paradigms"
Motivating Factors
Distributed Single-User Architecture
Motivating Factors
Strengths
Client/Server Architecture
Motivating Factors
Strengths
Introduction to Client-Server
What is Client-Server?
Client
<!DOCTYPE HTML SYSTEM "html.dtd"> <HTML> <HEAD><TITLE> Client Server Programming </TITLE></HEAD> <BODY> <H2>Client Server Programming</H2> <HR>Protocol
Protocol Choices
What this Course is not
An advanced (or beginning) Networking course
How to use a client builder application/system
What Client-Server Requires of a Programmer
Programming Issues
Names
"Finding good names is the hardest part of OO Programming"
"Names should fully and accurately describe the entity the variable represents"
What role does the variable play in the program?
Data
Structure
|
Role,
function
|
InputRec |
EmployeeData |
BitFlag |
PrinterReady |
TrainVelocity |
Velt,
V, X, Train
|
CurrentDate |
CD,
Current, C, X, Date
|
LinesPerPage |
LPP,
Lines, L, X
|
OOP Names - Common Problems
class Stack { Vector theStack = new Vector(); public void push( object x ) { theStack.add( x ); } // code deleted } class DriverProgram { public void static main( String[] args ) { // blah blah blah Stack stack; aFooFunction( stack ); // more blah } void aFooFunction( Stack aStack ) { } }
Comments
"Comments are easier to write poorly than well, and comments can be more damaging than helpful"
What does this do?
for i := 1 to Num do MeetsCriteria[ i ] := True; for i := 1 to Num / 2 do begin j := i + i; while ( j <= Num ) do begin MeetsCriteria[ j ] := False; j := j + i; end; for i := 1 to Mun do if MeetsCriteria[ i ] then writeln( i, ' meets criteria ' );
How many comments does this need? for PrimeCandidate:= 1 to Num do IsPrime[ PrimeCandidate] := True; for Factor:= 1 to Num / 2 do begin FactorableNumber := Factor + Factor ; while ( FactorableNumber <= Num ) do begin IsPrime[ FactorableNumber ] := False; FactorableNumber := FactorableNumber + Factor ; end; end; for PrimeCandidate:= 1 to Num do if IsPrime[ PrimeCandidate] then writeln( PrimeCandidate, ' is Prime ' );Good Programming Style is the Foundation of Well Commented Program
Kinds of Comments
X := X + 1 /* add one to X /* if allocation flag is zero */ if ( AllocFlag == 0 ) ...
*p++->*c = a /* first we need to increase p by one, then ..
(*(p++))->*c = a ObjectPointerPointer++; ObjectPointer = *ObjectPointerPointer; ObjectPointer ->*DataMemberPointer = a;
/* **** Need to add error checking here **** */
{ get current employee information } intent { update EmpRec structure } what
Commenting Efficiently
/*********************************** * module: Print * * * * author: Roger Whitney * * date: Sept. 10, 1995 * * * * blah blah blah * * * ***********************************/ /*********************************** module: Print author: Roger Whitney date: Sept. 10, 1995 blah blah blah ***********************************/
Commenting Techniques
Commenting Individual Lines
Avoid self-indulgent comments
MOV AX, 723h ; R. I. P. L. V. B.
MemToInit := MemoryAvailable(); { get memory available }
Commenting Paragraphs of Code
Write comments at the level of the code's intent
Comment the why rather than the how
Make every comment count
Document surprises
Avoid abbreviations
How verses Why
How
/* if allocation flag is zero */ if ( AllocFlag == 0 ) ...
Why
/* if allocating a new member */ if ( AllocFlag == 0 ) ...
Even Better
/* if allocating a new member */ if ( AllocFlag == NEW_MEMBER ) ...
Summary comment on How
{ check each character in "InputStr" until a dollar sign is found or all characters have been checked } Done := false; MaxPos := Length( InputStr ); i := 1; while ( (not Done) and (i <= MaxLen) ) begin if ( InputStr[ i ] = '$' ) then Done := True else i := i + 1 end;Summary comment on Intent
{ find the command-word terminator } Done := false; MaxPos := Length( InputStr ); i := 1; while ( (not Done) and (i <= MaxPos ) ) begin if ( InputStr[ i ] = '$' ) then Done := True else i := i + 1 end;
Summary comment on Intent with Better Style
{ find the command-word terminator } FoundTheEnd := false; MaxCommandLength := Length( InputStr ); Index := 1; while ((not FoundTheEnd) and (Index <= MaxCommandLength)) begin if ( InputStr[ Index ] = '$' ) then FoundTheEnd := True; else Index := Index + 1; end;
Commenting Data Declarations
Comment the units of numeric data
Comment the range of allowable numeric values
Comment coded meanings
var CursorX: 1..MaxCols; { horizontal screen position of cursor } CursorY: 1..MaxRows; { vertical position of cursor on screen } AntennaLength: Real; { length of antenna in meters: >= 2 } SignalStrength: Integer; { strength of signal in kilowatts: >= 1 } CharCode: 0..255; { ASCII character code } CharAttib: Integer; { 0=Plain; 1=Italic; 2=Bold } CharSize: 4..127; { size of character in points } Comment limitations on input data Document flags to the bit level
Commenting Routines
Avoid Kitchen-Sink Routine Prologs
Keep comments close to the code they describe
Describe each routine in one or two sentences at the top of the routine
Document input and output variables where they are declared
Differentiate between input and output data
Document interface assumptions
Keep track of the routine's change history
Comment on the routine's limitation
Document the routine's global effects
Document the source of algorithms that are used
procedure InsertionSort { Var Data: SortArray; { sort array elements } FirstElement: Integer {index of first element to sort} LastElement: Integer {index of last element to sort} }
Object-Oriented Programming
Conceptual Level DefinitionAbstraction
“Extracting the essential details about an item or group of items, while ignoring the unessential details.”
Edward Berard
“The process of identifying common patterns that have systematic variations; an abstraction represents the common pattern and provides a means for specifying which variation to use.”
Richard Gabriel
Example
Pattern: Priority queue Essential Details: length items in queue operations to add/remove/find item Variation: link list vs. array implementation stack, queue
Object-Oriented Programming Conceptual Level DefinitionEncapsulation
Enclosing all parts of an abstraction within a container
Example
Object-Oriented Programming Conceptual Level DefinitionInformation Hiding
Hiding parts of the abstraction
Example
Object-Oriented Programming Conceptual Level DefinitionHierarchy
Abstractions arranged in order of rank or level
Class Hierarchy
Object-Oriented Programming Conceptual Level DefinitionHierarchy
Object Hierarchy
Copyright ©, All rights reserved.
2000 SDSU & Roger Whitney, 5500 Campanile Drive, San Diego, CA 92182-7700 USA.
OpenContent license defines the copyright on this document.
    visitors since 26-Aug-00