abstract data types contain multiple valuesare all examples of complex types the primitive types provided by language may not be sufficient for solving large complex problems thusmost languages allow for the construction of additional data typesknown as user-defined types since they are defined by the programmer and not the language some of these data types can themselves be very complex abstractions to help manage complex problems and complex data typescomputer scientists typically work with abstractions an abstraction is mechanism for separating the properties of an object and restricting the focus to those relevant in the current context the user of the abstraction does not have to understand all of the details in order to utilize the objectbut only those relevant to the current task or problem two common types of abstractions encountered in computer science are proceduralor functionalabstraction and data abstraction procedural abstraction is the use of function or method knowing what it does but ignoring how it' accomplished consider the mathematical square root function which you have probably used at some point you know the function will compute the square root of given numberbut do you know how the square root is computeddoes it matter if you know how it is computedor is simply knowing how to correctly use the function sufficientdata abstraction is the separation of the properties of data type (its values and operationsfrom the implementation of that data type you have used strings in python many times but do you know how they are implementedthat isdo you know how the data is structured internally or how the various operations are implementedtypicallyabstractions of complex problems occur in layerswith each higher layer adding more abstraction than the previous consider the problem of representing integer values on computers and performing arithmetic operations on those values figure illustrates the common levels of abstractions used with integer arithmetic at the lowest level is the hardware with little to no abstraction since it includes binary representations of the values and logic circuits for performing the arithmetic hardware designers would deal with integer arithmetic at this level and be concerned with its correct implementation higher level of abstraction for integer values and arithmetic is provided through assembly languagewhich involves working with binary values and individual instructions corresponding to the underlying hardware compiler writers and assembly language programmers would work with integer arithmetic at this level and must ensure the proper selection of assembly language instructions to compute given mathematical expression for examplesuppose we wish to compute at the assembly language levelthis expression must be split into multiple instructions for loading the values from memorystoring them into registersand then performing each arithmetic operation separatelyas shown in the following psuedocodeloadfrommemr 'aloadfrommemr '