Describe the key concepts of object-oriented programming and how they are represented in GIS patterns.