CSC111 Simple Programs Introducing OOP

From dftwiki3
Revision as of 09:23, 11 April 2014 by Thiebaut (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

--D. Thiebaut (talk) 10:00, 7 April 2014 (EDT)



Program 1: NO OOP


# peopleNOOOP.py
# D. Thiebaut
# Collection of People.
# A preparation program for Object Oriented programming.
# This program DOES NOT USE OBJECTS.  It creates a list
# of people composed of a name, an age, a gpa, and a major.
# It displays the partial list of the people, add a new person,
# modifies one record, and displays the new partial list.

text = """
Alex, 20, 3.6, ART
Lulu, 21, 3.5, BIO
Alka, 19, 3.0, ENG
Le, 21, 3.2, EGR
"""

def main():
    # create a list of people taken from the text
    people = []
    for line in text.split( "\n" ):
        words = line.split( "," )
        # skip ill-formed lines
        if len( words ) != 4:
            continue
        # strip each word
        words = [ w.strip() for w in words ]
        person = [ words[0], int( words[1] ), float( words[2] ), words[3] ]
        people.append( person )

    # display the list of names and their age
    print( "Names: " )
    for name, age, gpa, major in people:
        print( "\t", name, "\t\t", age )

    # add a new person to the list
    people.append( [ "Xiaole", 21, 3.9, "CSC" ] )

    # modify age of person named Alka
    for person in people:
        if person[0].lower() == "alka":
            person[1] += 1

    # display the list of names
    print( "Names: " )
    for name, age, gpa, major in people:
        print( "\t", name, "\t\t", age )
            
    
main()


Output


Names: 
	 Alex 		 20
	 Lulu 		 21
	 Alka 		 19
	 Le 		 21
Names: 
	 Alex 		 20
	 Lulu 		 21
	 Alka 		 20
	 Le 		 21
	 Xiaole 		 21


Same Program, using OOP


# peopleOOP.py
# D. Thiebaut
# Collection of People (mirror of Program peopleNOOOP.py)
# A preparation program for Object Oriented programming.
# This program USES OBJECTS.  It creates a list
# of people composed of a name, an age, a gpa, and a major.
# It displays the partial list of the people, add a new person,
# modifies one record, and displays the new partial list.

text = """
Alex, 20, 3.6, ART
Lulu, 21, 3.5, BIO
Alka, 19, 3.0, ENG
Le, 21, 3.2, EGR
"""

class Person:
    # a class containing 4 fields:
    # - name of the person (string)
    # - age (integer)
    # - gpa (float)
    # - major (string, uppercase)

    # constructor: intializes a person with all fields
    def __init__(self, n, a, g, m):
        self._name = n
        self._age  = a
        self._gpa  = g
        self._major= m

    # returns a string with the name and age.
    def toString( self ):
        return "\t%s\t\t%d" % ( self._name, self._age )

    # returns the name
    def getName( self ):
        return self._name

    # set the age to a new value x
    def setAge( self, x ):
        self._age = x

    # returns the age of the person
    def getAge( self ):
        return self._age


def main():
    # create a list of people taken from the text
    people = []
    for line in text.split( "\n" ):
        words = line.split( "," )
        
        # skip ill-formed lines
        if len( words ) != 4:
            continue
        
        # strip each word
        words = [ w.strip() for w in words ]

        person = Person( words[0], int( words[1] ), float( words[2] ), words[3] )
        people.append( person )

    # display the list of names and their age
    print( "Names: " )
    for person in people:
        print( person.toString() )

    # add a new person to the list
    people.append( Person("Xiaole", 21, 3.9, "CSC") )

    # modify age of person named Alka
    for person in people:
        if person.getName().lower() == "alka":
            person.setAge( person.getAge() + 1 )

    # display the list of names and their age
    print( "Names: " )
    for person in people:
        print( person.toString() )

main()


Output


Names: 
	Alex		20
	Lulu		21
	Alka		19
	Le		21
Names: 
	Alex		20
	Lulu		21
	Alka		20
	Le		21
	Xiaole		21



Dogs


# dogs.py
# D. Thiebaut
# An OOP program illustrating the use of another class, and 
# creating a list of objects created from this class.


# DOG: a class providing a container for a tag name and a 
# boolean indicating if the dog is vaccinated or not.
# public methods supported:
#  - isVaccinated() return True if the dog is, False otherwise
#  - getNameTag() returns the dog's name tag
#  - setNameTag() sets the name tag to the string argument
#  
class Dog:

    # constructor
    def __init__( self, tag, vaccinated ):
        self._tag = tag
        self._vaccinated = vaccinated

    # default string representation for the dog
    def __str__( self ):
        if self._vaccinated==True:
            return "%s (vaccinated)" % self._tag
        return "%s (not vaccinated)" % self._tag

    def isVaccinated( self ):
        return self._vaccinated

    def getNameTag( self ):
        return self._tag

    def setNameTag( self, tag ):
        self._tag = tag

# displays a list of dogs
def displayList( list, caption ):
    print( caption )
    for dog in list:
        print( dog )
    
# main program: creates a list of dogs, displays it, finds the vaccinated ones.
def main():
    dogs = []

    dogs.append( Dog( "Rex", True ) )
    dogs.append( Dog( "Fido", False ) )
    dogs.append( Dog( "Fifi", True ) )

    displayList( dogs, "\n\nList of dogs" )
    
    vaccinated = []
    for dog in dogs:
        if dog.isVaccinated():
            vaccinated.append( dog )

    displayList( dogs, "\n\nList of vaccinated dogs" )
    
    
main()



...