# Abstract data types

Abstract data types are data types that are considered regardless of how they are represented or implemented by programming language. Like ordinary data types, abstract data types are defined by a set of values and a set of operations that can be performed on values of a given type.

The mathematical data type is a component of a multibase data algebra, and the abstraction means that the data algebra is considered up to isomorphism. For example, the data that we represent as a "complex number" can be defined using the +, -, x, /, im, re, mod, arg operations, while the numbers themselves can be represented in different ways using the usual types. One such representation is a pair of real numbers that determine the real and imaginary part, the other is a pair of numbers defining the module and the argument.

The main role is played by abstract data types in the programming methodology based on step-by-step programming. At the stage of constructing the specification of the projected program, the data algebra simulates the objects of the domain, in terms of which the problem being solved is formulated. In the process of step-by-step refinement, the data are concretized by moving to intermediate views until they are found using the basic data algebra of the programming language used. Many programming languages have support for step-by-step development technology and, in particular, the use of abstract data types. In this case, the main tool is to protect the descriptions of abstract types from using the internal properties of the data representation. This is achieved by processing data that have abstract types only by calling functions and procedures that implement the operations of the corresponding algebras. For example, abstract data types can be implemented using the concept of a package, the description of which is divided into visible, invisible and own part. The visible part contains only the headings (specifications) of functions, defining uniquely the types of operations. The proprietary part of the package contains complete descriptions of the functions and subroutines with which they work, defining the implementation of the operations of the abstract data algebra.

In the theory of abstract data types, various methods of determining are investigated, regardless of the ways in which they are realized. There are three main approaches:

1. algebraic, which uses methods to define algebras and algebraic systems using generators and defining relations, identities, and quasi-identities.
2. axiomatic, which involves the use of some formal logical language for the axiomatic definition of the properties of operations and relationships.
3. model, in which elements of the data algebra are explicitly constructed, as data structures over others, perhaps again abstract algebras and data types, and operations are defined, for example, recursively or using functional equations.