Programming is a modeling process where phenomena and abstractions from a referent system are expressed using a programming language. To improve the efficiency of program development, programming languages should be designed to reflect human conceptualization as well as possible. This will make programs easier to comprehend, thus aiding during both development and maintenance, and it will aid in making the developed programs conform better to the users expectations. This paper will present a model of the interactions between epistemology, concept formation, programming language analysis and design, and programming. The model will be used to develop a taxonomic framework for analyzing and designing abstraction mechanisms found in object-oriented languages.